一、MySQL 镜像下载
1. 查找 MySQL 镜像
登录 Docker Hub 官网搜索 MySQL 镜像,或者直接访问 https://hub.docker.com/_/mysql。
也可以在终端使用docker search mysql
来搜索 MySQL 镜像,OFFICAL 列为 OK 的为官方镜像。
2. 下载MySQL镜像
从 Docker Hub 拉取 MySQL 5.7 镜像,命令如下:
$ docker pull mysql:5.7
使用docker pull mysql:
来指定下载镜像的 tag,不指定默认为 latest。下载完成后使用docker images
来查看本地已经下载好的镜像。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 718a6da099d8 3 weeks ago 448MB
二、MySQL 容器运行
安装完成后,可以使用docker run
命令来运行 MySQL 容器。
1. 配置端口映射
$ docker run --name mysql -p 3306:3306 -d mysql:5.7 8c3026a0acd14f53e702a9854b2ffe4aa2668a552e11e171b3ae667cbe691d31
--name
:指定容器名称,方便对容器的操作-p :
:指定端口映射,将容器的端口映射到主机的端口-d
:指定容器在后台运行,以守护进程的形式运行8c3026a...
:容器ID,对容器进行操作时用于指定容器
运行成功后可以使用下面命令查看运行中的 MySQL 容器:
# 查看运行中的容器 $ docker ps # 或 docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 查看所有容器 $ docker ps -a # 或 docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1280ffeb3616 mysql:5.7 "docker-entrypoint.s…" 52 seconds ago Exited (1) 50 seconds ago mysql
我们发现没有运行成功的容器,再使用docker ps -a
命令查看所有容器,查看STATUS
列发现容器状态为已经退出。此时使用docker logs mysql
来查看容器运行的日志来找出问题:
$ docker logs mysql 2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started. 2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started. 2020-08-30 03:25:12+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
日志提示我们需要指定一个MYSQL_ROOT_PASSWORD
、MYSQL_ALLOW_EMPTY_PASSWORD
或MYSQL_RANDOM_ROOT_PASSWORD
的环境变量来作为数据库 root 用户的密码。
2. 配置环境变量
移除刚才运行失败的容器,并指定环境变量重新运行:
# 移除容器 $ docker container rm mysql mysql # 指定端口映射和环境变量运行 $ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 bdfa70905470e241daaf9fcd332c957550e24b10b74c4a2232001c79e3dae898
-e key=value
:用于指定容器中系统的环境变量
此时使用docker ps
查看容器已经运行成功了,接下来我们可以使用 MySQL 数据库客户端来连接使用了。使用下面命令,并输入我们刚才配置的密码,就可以进入数据库了。
$ mysql -h 127.0.0.1 -u root -p
3. 查看数据卷
在 Docker 中,MySQL 数据库的数据持久化是通过创建数据卷来实现的,也就是说所有在数据库中存储的数据,都会保存在主机上,使用下面命令来查看数据卷详情:
# 查看数据卷 $ docker volume ls DRIVER VOLUME NAME local b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca # 查看数据卷详情 $ docker inspect b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca [ { "CreatedAt": "2020-08-30T11:35:15+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca/_data", "Name": "b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca", "Options": null, "Scope": "local" } ] # 查看数据卷绑定的主机目录 $ sudo ls /var/lib/docker/volumes/b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca/_data auto.cnf client-cert.pem ib_logfile0 ibtmp1 private_key.pem server-key.pem ca-key.pem client-key.pem ib_logfile1 mysql public_key.pem sys ca.pem ib_buffer_pool ibdata1 performance_schema server-cert.pem
从上面的操作可以看出,数据库数据实际保存的位置在主机的目录下,这样就可以实现 MySQL 容器的数据持久化了。
使用 Docker 搭建数据库环境,不管是单节点还是集群,只需要很简单的操作就能实现,再也不用担心虚拟机消耗太多的电脑资源,也不用担心环境之间有什么差异,因此,我们在学习过程中,只需要关注知识点功能的实现。