我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

苏南大叔在本文中,讲述如何通过docker拉取(镜像)并运行一个mysql容器。主要目的是复习docker操作的全流程命令,并且为后续文章做准备。当然,如果不是为了练习docker操作的目的,完全有很多其它的安装mysql的途径,并不局限于docker这种方式。

苏南大叔:docker如何拉取运行mysql容器?docker操作全命令行流程 - docker全命令行
docker如何拉取运行mysql容器?docker操作全命令行流程(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10docker@28.0.4mysql@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"
    ] 
}

Dockerregistry-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会直接跳过下载的。

苏南大叔:docker如何拉取运行mysql容器?docker操作全命令行流程 - docker-pull-image
docker如何拉取运行mysql容器?docker操作全命令行流程(图3-2)

其实,拉取镜像这一步,也是可选的。直接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如何拉取运行mysql容器?docker操作全命令行流程 - 数据持久化
docker如何拉取运行mysql容器?docker操作全命令行流程(图3-3)

新的命令是:

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

这样执行后,好处就是:随便删除容器,数据不会丢,方便反复调试参数。所以重点推荐。

端口映射【可选】

对于配置了networkcontainer来说,这个端口映射可能并不是必须的。参考文章:

执行命令:

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经验文字,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql    docker