Docker创建MySQL容器

103 阅读2分钟

前言

本文通过 Docker 搭建 MySQL 容器服务为例,了解 Docker 容器的一些操作命令。

拉取MySQL镜像

linux/amd64 架构平台:docker pull mysql
linux/arm64/v8 (适用 Apple Silicon M1) 架构平台:docker pull mysql/mysql-server
因为用的 Mac 是 ARM64架构的 M1 芯片,所以拉取的 MySQL 镜像命令有些区别。

运行MySQL容器

命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d--detach,以后台方式运行容器。
-p--publish,开放端口,这里是绑定主机的 13306 端口到容器内的 3306 端口。
-v--volume,绑定挂载数据卷,这里是将主机 /Users/wei/data/mysql/ 挂载到容器内。
--name,命名容器,不指定时会给容器一个随机名称。
mysql/mysql-server:8.0,指定镜像,也可以用镜像ID。

docker run -d \
  -p 13306:3306 \
  -v /Users/wei/data/mysql/:/var/lib/mysql/
  --name=mysql mysql/mysql-server:8.0

获取MySQL初始密码

很多时候启动了一个容器服务后,都会有要查看服务运行日志的情况,
这时不必进入容器内,只需通过docker logs命令。
命令格式:docker logs [OPTIONS] CONTAINER

docker logs mysql

通过上面的命令,找到其中的日志,例如:
[Entrypoint] GENERATED ROOT PASSWORD: 907*@^3KUB&l0.=b19t*ZNmpl#7Dlekw
也可以直接使用命令:docker logs mysql1 2>&1 | grep GENERATED

连接MySQL

连接至 MySQL 服务,在本地我们会用mysql -uroot -p这样的命令,
而对于运行在容器内的 MySQL,可以通过docker exec执行容器内命令而不必进入容器内操作。
命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-i--interactive,交互,意思就是保持标准输入 (STDIN) 打开。
-t--tty,分配伪终端(pseudo-tty)并绑定到容器的标准输入上。
mysql,指定的容器。
mysql -uroot -p,连接至 MySQL 的命令。

docker exec -it mysql mysql -uroot -p

执行上面的命令,然后输入刚才获取到 MySQL 初始密码。

修改root@localhost密码

连接到 MySQL 后即可执行 MySQL 的一些操作。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

参考

[1] Docker run reference
[2] GitHub - docker-library/mysql