docker如何拉取运行mysql容器?docker操作全命令行流程
发布于 作者:苏南大叔 来源:程序如此灵动~

苏南大叔在本文中,讲述如何通过docker
拉取(镜像)并运行一个mysql
容器。主要目的是复习docker
操作的全流程命令,并且为后续文章做准备。当然,如果不是为了练习docker
操作的目的,完全有很多其它的安装mysql
的途径,并不局限于docker
这种方式。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10
,docker@28.0.4
,mysql@5.7
。本文操作的mysql
镜像是最经典的mysql5.7
,并不是最新版本,也不是mariadb
分支。同时,本文描述的是docker
命令行操作,并不是docker desktop
操作,周知。
前文回顾
本文的顺利执行,首先需要你有一个合适的docker
环境,并正确配置了docker
的镜像下载服务。本文的docker
环境,是在win10
系统下,安装的docker desktop
得到的。参考文字:
注意配置修改daemon.json
中的registry-mirrors
字段,例如:
{
"registry-mirrors" :
[
"https://docker.m.daocloud.io",
"https://docker.xuanyuan.me",
"https://docker.1ms.run"
]
}
Docker
的 registry-mirrors
配置仅影响镜像拉取(pull
)操作,而 search
默认仍使用 Docker Hub
的官方地址。由于国内网络环境可能无法直接访问 Docker Hub
,导致 search
命令超时或失败。
docker search
可以使用search
命令查找相关的镜像,但是目前国内的docker hub
服务,并不可用,也没有可用于官方镜像image
查找的镜像mirror
服务。所以,目前这一步来说,要不就科学上网,要不就按着格式自己得出结论。
就拿mysql
关键词来说,正常需要使用命令:
docker search mysql
但是,也可以凭借经验,直接得出结论:mysql / mysql:latest / mysql:8.0 / mysql:5.7
,这个也是挺好理解的。那么,接下来,就假装得出了mysql:5.7
的结论。
docker pull【可选】
然后需要从Docker Hub
上,拉取MySQL 5.7
的官方镜像。这里如果没有拉取成功的话,请配置docker mirror
。参考前文回顾部分的内容。
docker pull mysql:5.7
如果本地已经存在该镜像,Docker
会直接跳过下载的。
其实,拉取镜像这一步,也是可选的。直接run
的时候,如果本地不存在对应镜像,也是会触发自动拉取的。
查看已下载镜像【可选】
拉取完成后,可以使用以下命令查看本地的镜像列表
docker images
输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 5107333e08a8 16 months ago 501MB
确认mysql:5.7
镜像已经成功下载。
docker run
接下来,苏南大叔使用拉取的镜像运行一个MySQL
容器。想好了再决定执行哪条命令!容器建立成功参数不能修改!只能重建!但是容器名称是可以修改的啊。
docker run -d --name <容器名称> <镜像名>
或者:
docker run -d --restart=always --name <容器名称> <镜像名>
-d
:以后台模式运行容器。
然而,对于mysql
来说,它缺少了一个必要的参数MYSQL_ROOT_PASSWORD
,所以,镜像运行不起来。内部会报错,无限重启。可以运行的命令是:
docker run -d --restart=always --name mysql-container -e MYSQL_ROOT_PASSWORD=root mysql:5.7
正常情况下来说,就是这样运行的:
docker run -d --restart=always --name mysql-container mysql:5.7
映射关系
直接修改运行容器的端口和目录映射是不支持的,最佳实践是停止容器并重新创建,同时指定新的端口和目录映射。
目录映射【推荐】
然而,mysql
的数据目录还在容器内部。如果删除或重装这个容器,数据会丢失。所以,需要再增加目录映射。具体需要映射出来几个目录,是根据容器自身的情况而定的,这并无统一的规定。
可能需要的目录映射关系,如下:
- 配置:
d:/mysql/conf/
,对应/etc/mysql/conf.d
- 数据:
d:/mysql/data/
,对应/var/lib/mysql
- 日志:
d:/mysql/log/
,对应/var/log/mysql
如果当前容器的对应的目录,是有数据的情况的话,可能还需要docker cp
命令。比如:
docker cp mysql-container:/etc/mysql/conf.d d:/mysql/conf/
docker cp mysql-container:/var/lib/mysql d:/mysql/data/
docker cp mysql-container:/var/log/mysql d:/mysql/log/
新的命令是:
docker run -d --name mysql-container --restart=always -v d:/mysql/conf:/etc/mysql/conf.d -v d:/mysql/data:/var/lib/mysql -v d:/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
这样执行后,好处就是:随便删除容器,数据不会丢,方便反复调试参数。所以重点推荐。
端口映射【可选】
对于配置了network
的container
来说,这个端口映射可能并不是必须的。参考文章:
执行命令:
docker run -d --name mysql-container --restart=always --network sunan_network -e MYSQL_ROOT_PASSWORD=root mysql:5.7
或者有必须的理由,需要把端口号开放到宿主机的话。
docker run -d --name mysql-container --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
重点也就是-p <宿主机端口>:<容器端口>
。是不是添加这个映射,看情况而定。
修改名称
Docker 不支持直接修改镜像名称,但可以通过 docker tag 命令为镜像添加新的标签(相当于重命名),然后删除旧的镜像标签。
docker tag <旧镜像名称>:<旧标签> <新镜像名称>:<新标签>
docker rmi <旧镜像名称>:<旧标签>
修改容器名称,命令:
docker rename <旧容器名称> <新容器名称>
查看列表
可以使用以下命令查看当前运行的容器:
docker ps
查看镜像:
docker images
docker image ls
进入容器【常用】
如果需要进入容器内部,可以使用以下命令:
docker exec -it mysql-container bash
或者
docker exec -it mysql-container bin/bash
进入容器后,可以通过 MySQL
客户端连接数据库:
mysql -u root -p
当然,也可以选择把端口映射到宿主机上,再使用客户端工具进行连接。
停止和启动容器
如果需要停止运行的容器,可以使用以下命令:
docker stop mysql-container
启动容器
docker start mysql-container
删除容器和镜像
如果不再需要该容器或镜像,可以将其删除。
删除容器:
docker rm mysql-container
删除镜像的前提是:已经删除了对应的容器。否则,可能会收到报错信息。
Error response from daemon: conflict: unable to remove repository reference "mysql:5.7" (must force) - container 9bbc0f598dcb is using its referenced image 5107333e08a8
删除镜像命令:
docker rmi mysql:5.7
docker image rm mysql:5.7
长命令
大多数情况下,网上会这样改写这个命令:
docker run -d --name mysql-container \
--restart=always \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /path/to/mysql/data:/var/lib/mysql \
-v d:/mysql/conf:/etc/mysql/conf.d \
-v d:/mysql/data:/var/lib/mysql \
-v d:/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
然而,在windows
下,需要做一些修改才能执行:
docker run -d --name mysql-container ^
--restart=always ^
-e MYSQL_ROOT_PASSWORD=root ^
-p 3306:3306 ^
-v /path/to/mysql/data:/var/lib/mysql ^
-v d:/mysql/conf:/etc/mysql/conf.d ^
-v d:/mysql/data:/var/lib/mysql ^
-v d:/mysql/log:/var/log/mysql ^
-e MYSQL_ROOT_PASSWORD=root ^
mysql:5.7
总结
使用Docker
部署MySQL
不仅快速,而且便于管理,非常适合开发和测试环境。苏南大叔的更多docker
经验文字,请点击:


