跳到主要内容

第6章 Docker常用服务

1.mysql容器的使用

1.1 官方镜像地址

https://hub.docker.com/_/mysql?tab=description&page=1&ordering=last_updated

1.2 涉及到的环境变量

MYSQL_ROOT_PASSWORD			#必选项,设置root账号密码
MYSQL_DATABASE #创建数据库
MYSQL_USER #创建普通用户
MYSQL_PASSWORD #给创建的普通用户设置密码

1.3 使用命令

docker run --name mysql_v1 \
-v /data/docker_mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql:5.7

1.4 宿主机用户ID和容器内保持一致

[root@docker-11 ~]# groupadd -g 1000 mysql
[root@docker-11 ~]# useradd -u 1000 -g 1000 -M -s /sbin/nologin mysql
[root@docker-11 ~]# id mysql
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)
[root@docker-11 ~]# chown -R mysql:mysql /data/docker_mysql/

docker run --name mysql_v1 \
-v /data/docker_mysql:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

1.5 验证数据持久化不会因为容器消失而消失

docker run --name mysql_v1 \
-v /data/docker_mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

1.6 结论

官方的mysql容器启动脚本可以判断是空的数据目录还是已经存在数据。
如果是空的数据目录,就按照用户传递的变量初始化数据库
如果数据目录已经有数据了,直接使用原来的数据,用户传递的变量失效了

2.wordpress容器的使用

2.1 mysql容器命令

docker run --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
-v /data/docker_mysql:/var/lib/mysql \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin

2.2 wordpress容器命令

docker run --name wordpress \
--link mysql \
-e WORDPRESS_DB_HOST="mysql" \
-e WORDPRESS_DB_USER="wordpress" \
-e WORDPRESS_DB_PASSWORD="wordpress" \
-e WORDPRESS_DB_NAME="wordpress" \
-p 80:80 \
-d wordpress

3.zabbix容器的使用

3.1 容器命令

docker run --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=zabbix \
-v /data/docker_mysql:/var/lib/mysql \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-server-mysql \
--link mysql \
-e DB_SERVER_HOST="mysql" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql

docker run --name zabbix-web-nginx-mysql \
--link mysql \
--link zabbix-server-mysql \
-e DB_SERVER_HOST="mysql" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e PHP_TZ="Asia/Shanghai" \
-p 80:8080 \
-d zabbix/zabbix-web-nginx-mysql

3.2 容器注释

mysql容器注释:

docker run \
#mysql服务
--name mysql \

#映射端口 宿主机端口:容器内端口
-p 3306:3306 \

#启动Mysql初始化的时候设置root的密码
-e MYSQL_ROOT_PASSWORD=123 \

#初始化时创建的数据库名称
-e MYSQL_DATABASE=zabbix \

#初始化时创建的的普通用户,此用户对刚才创建的数据库拥有所有权限
-e MYSQL_USER=zabbix \

#普通用户的密码
-e MYSQL_PASSWORD=zabbix \

#将容器内的数据持久化到宿主机,如果已经有数据了,用户传递的变量就失效了
-v /data/docker_mysql:/var/lib/mysql \

#后台启动,使用镜像名称
-d mysql:5.7 \

#设置数据库的字符集
--character-set-server=utf8 --collation-server=utf8_bin

zabbix-server-mysql容器注释:

docker run \
#给zabbix服务端容器起个名字
--name zabbix-server-mysql \

#连接到mysql容器,连接后可以直接使用容器名进行通讯
--link mysql \

#后端mysql的连接地址,这里因为Link了mysql容器,所以可以直接使用容器名通讯
-e DB_SERVER_HOST="mysql" \

#告诉zabbix-server连接mysql使用什么用户
-e MYSQL_USER="zabbix" \

#告诉zabbix-server连接mysql的用户的密码
-e MYSQL_PASSWORD="zabbix" \

#将zabbix-server的服务端口暴露出来,方便客户端连接
-p 10051:10051 \

#使用镜像名称
-d zabbix/zabbix-server-mysql

zabbix-web-nginx-mysql容器注释:

docker run \
--name zabbix-web-nginx-mysql \
--link mysql \
--link zabbix-server-mysql \

#连接数据库的地址,因为link了mysql容器,所以可以直接使用容器名通讯
-e DB_SERVER_HOST="mysql" \

#mysql连接的用户
-e MYSQL_USER="zabbix" \

#mysql连接的用户密码
-e MYSQL_PASSWORD="zabbix" \

#zabbix-server的地址,因为link了zabbix-server的容器,所以可以直接使用容器名通讯
-e ZBX_SERVER_HOST="zabbix-server-mysql" \

#修改php的时区为上海
-e PHP_TZ="Asia/Shanghai" \

#映射web网页端口,通过查看镜像信息得知容器内是8080
-p 80:8080 \

#镜像名称
-d zabbix/zabbix-web-nginx-mysql