使用 mysql 的 Docker 镜像

前言

之前搞了很多都是手工在操作系统的镜像中安装使用 mysql,作为自己折腾也就算了,作为实际使用实为不妥:Docker最重要的特性就是可扩展性,把各种程序都放在一个容器里还如何扩展(当然如果用来统一开发、测试和线上环境还是可以的)。因此再来记录一下直接使用 mysql 的官方 Docker 镜像,以免回头本末倒置,瞎折腾会了,正经的使用却不会了,虽然非常简单。

1. 下载 mysql 的 Docker 镜像

使用 docker pull mysql 命令,具体的tag名称可以去 Docker Hub 的 mysql 页面 上查询。

2. 启动命令

其实 Docker Hub 的 mysql 页面已有相关的说明了,但还应该加入端口映射:

docker run --name some-mysql -p 33060:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

3. 其它思考

官方给的原来启动命令为(并没有端口的映射):

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

连接命令也有点不同:

docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p

大概是启动一个容器,然后用里面的连接程序去连接别的容器QAQ,其中 --rm 表示容器推出后自动删除,多用于测试, --network 表示可以手工设定网络。在我本地需要执行的命令为:

docker run -it --rm mysql mysql -h 172.17.0.2 -uroot -p

官方给的 mysql 是容器的名称,尝试后发现会报错:

ERROR 2005 (HY000): Unknown MySQL server host 'mysql' (22)

尝试换成 ip 地址后可以。

两年后的更新

以上的启动命令只是为了启动而启动,并没有考虑时区编码的问题,比较实用的启动命令为:

docker run -e "MYSQL_ROOT_PASSWORD=<YOUR_StRong_PASSWD>" -e "TZ=Asia/Shanghai" -p 3306:3306 -d mysql:<TAG> --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

其中指定了时区为上海,编码为utf8mb4,规则为:utf8mb4_unicode_ci注意将<TAG>换成需要的版本