我的一点点docker部署服务习惯,喜欢使用官方的镜像,如果没有官方的镜像或者官方的镜像不好用,我会找第三方使用量比较多的镜像。这个习惯是基于安全的考虑,毕竟官方做得稍微安全点,有漏洞也更新最快。
1、docker search 搜索mysql
如图所示,STARS 第一为13491是官方的mysql镜像。第三方bitnami/mysql的STARS为79。
2、https://hub.docker.com镜像站搜索mysql
如图所示,第一个是mysql的官方镜像。
1、docker 启动一个简单的mysql 实例
docker run \
--name some-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d \
mysql:tag
docker run:是启动一个docker 容器的命令。完整书写方法应该是docker container run。
-name some-mysql: 给mysql容器起个名字,为some-mysql。
-e MYSQL_ROOT_PASSWORD=my-secret-pw:e是environment的首字母,是环境的意思。这里是给root用户配置一个密码my-secret-pw,这个my-secret-pw可以改成自己需要的。
-d: d是detach的首字母,可以理解为后台运行这个mysql容器。
mysql:tag:指的mysql的镜像名。tag是给一个版本mysql打个标签,如果不加:tag默认为mysql:latest。mysql最新镜像。
大家应该会发现一个问题,没绑定端口,所以这个启动的mysql没法通过端口访问,于是我就查看一下dockerfile,
如图所示,mysql镜像向外暴露的端口是3306 和33060,
所以启动容器想被外面访问就要加上-p 3306:3306 -p 33060:33060
docker run \
--name some-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d \
-p 3306:3306 \
-p 33060:33060 \
mysql:tag
-p 3306:3306: 映射端口,前一个3306是宿主机上的端口要,可以改成自己想要的端口,后面的3306是docker容器里mysql启动的端口。
-p 33060:33060:映射端口,前一个33060是宿主机上的端口要,可以改成自己想要的端口,后面的33060是docker容器里mysql启动的端口。33060是管理员用的端口,目的是为了在3306连接数被耗尽了没法通过3306端口连上mysql操作,而为管理员特意准备的。
2、docker-compose 启动一个简单的mysql 实例
#mysql的docker-compose.yml
# Use root/example as user/password credentials
version: '3.1'
services:
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- 3306:3306
- 33060:33060
adminer:
image: adminer
restart: always
ports:
- 8080:8080
这个docker-compose启动两个实例,一个是mysql,一个是adminer这个mysql管理工具。可以通过浏览器打开,如果你机器IP是192.168.0.22 ,那访问地址是http://192.168.0.22:8080
mysql管理工具adminer我就不介绍了,大家自行网上查找。
#mysql的docker-compose部署实例
docker-compose -f /path/docker-compose.yml up -d
-f:f是file的首字母,在这指docker-compose.yml实在路径。
3、用定制mysql配置file启动mysql服务
官方介绍,镜像的默认配置文件是/etc/mysql/my.cnf,扩展配置文件可能在/etc/mysql/conf.d 或者 /etc/mysql/mysql.conf.d这个两个目录中一个下。需要通过创建的实际mysql镜像查看扩展配置文件路径实际是上面哪一个,命令方法是(docker image inspect mysql:latest)。
假设你看见 扩展配置文件路径是/etc/mysql/conf.d。而你把配置好扩展配置放在宿主机上的/data/mysql/custom/config-file.cnf,那docker启动的语句就是:
docker run \
--name some-mysql \
-v /data/mysql/custom:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d \
-p 3306:3306 \
-p 33060:33060 \
mysql:tag
4、msyql数据文件目录映射到宿主机
如果不在宿主机绑定mysql的数据文件路径,想要检查数据文件就很不方便。假设我在宿主机上建了一个存放mysql数据文件的路径为/data/mysql/data,那docker启动语句就是
docker run \
--name some-mysql \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d \
-p 3306:3306 \
-p 33060:33060 \
mysql:tag
5、加上映射配置文件路径和数据文件路径,docker启动语句就是
docker run \
--name some-mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/custom:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-d \
-p 3306:3306 \
-p 33060:33060 \
mysql:tag
6、加上映射配置文件路径和数据文件路径的docker-compose.yml文件,内容如下
# Use root/example as user/password credentials
version: '3.1'
services:
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- 3306:3306
- 33060:33060
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/custom:/etc/mysql/conf.d
adminer:
image: adminer
restart: always
ports:
- 8080:8080
7、重启一下docker-compose部署的服务
docker-compose -f /path/docker-compose.yml down && docker-compose -f /path/docker-compose.yml up -d
docker exec -it some-mysql bash
1、简单用法
docker logs some-mysql
2、向后翻滚地查看日志
docker logs -f some-mysql
3、从最后一行向后翻滚地查看日志
docker logs -f --tail 1 some-mysql
注.最后说一下,看了第三方mysql镜像和部署方法,没有比官方更好,所以建议使用官方的image和部署方法。