Docker-mysql
使用 Docker 运行 MySQL
以下是本机开发示例,不是公网生产部署方案。宿主端口只绑定
127.0.0.1;如果只供容器间访问,应省略 -p
并使用专用 Docker 网络。应用使用单独的最小权限账户,不使用 root。
1. 确认镜像与输入密码
先在官方镜像文档核对适合项目的受支持版本、完整 tag(或
digest)、升级和数据兼容要求。这里不指定一个未经拉取/运行验证的版本,也不使用漂移的
latest。
下面交互命令适用于
Bash。输入由密码管理器生成的独立强密码,不把真实密码写入文章、历史命令或版本库。示例用
Docker 环境变量初始化,因此宿主 root / Docker
管理员仍能通过容器配置读取密码;生产部署应改用镜像支持的
MYSQL_ROOT_PASSWORD_FILE 与受控 secret 文件。
1 | read -r -p '输入已核对的固定 mysql:<完整版本> 或 mysql@sha256:<摘要>: ' MYSQL_IMAGE |
输入检查只拒绝明显的空密码/漂移标签,不验证镜像存在、支持期限或密码强度;这些仍须由读者确认。
2. 快速启动或持久化(二选一)
无卷的方式只适合可丢弃的数据;删除容器后不要指望数据仍在:
1 | sudo --preserve-env=MYSQL_ROOT_PASSWORD docker run --name mysql \ |
需要持久化时,改用命名卷(不要先运行上面的同名容器):
1 | sudo docker volume create mysql-data |
sudo
必须允许保留该变量;不允许时不能假设密码已传入,应使用受控 secret
文件或先进入授权管理环境。不要删除数据卷来“修复”启动失败;修改初始化密码环境变量不会重设已初始化数据目录中的
root 密码。卷提供持久化,不代替备份;跨版本升级前备份并验证恢复。
3. 登录 MySQL
1 | sudo docker exec -it mysql mysql -uroot -p |
在提示时输入密码,不使用
-p明文密码。容器在运行不代表数据库已就绪;先查看日志及所选版本的健康检查,再登录。
4. 复制文件并导入
1 | sudo docker cp /path/to/file.sql mysql:/root/file.sql |
在 MySQL 客户端执行以下交互语句;name
和文件路径按自己的数据替换:
1 | mysql> create database name; |
这只是导入流程示例;字符集、授权和备份要求由项目决定,不把任意 SQL 文件当作可信输入。对外部署还需要明确的认证、TLS、网络访问控制和恢复方案。