您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
docker-compose一键构建(卷及具名卷)lnmp
发布时间:2023-07-12 14:33:36编辑:雪饮阅读()
-
上篇虽然实现了子网,使得mysql服务bind_address与nginx里面的连接php-fpm统一为使用ip地址的方式。
子网的ip地址可以自定义,当然也要合理才可以,只要不会有网络冲突就行。
那么其实上次的构建过程中还是有一些不足的地方。
(1)这次整体最大的收获就是卷的挂载以及具名挂载,相关资料经验已经记录到docker-composer.txt文件中了.
(2)另外就是这次优化了默认情况下my.cnf中的skip-grant-tables配置,由于skip-grant-tables配置可以直接不用密码就能进入mysql
显然不是很好,注释掉后.又会由于我们之前使用的是空密码导致php无法连接.my.cnf肯定是有所改动的.至于改动后的副作用,在后面步骤里面会有通过修改默认密码来实现的.
(3)本次的重点之一当然就是挂载卷,mysql算是特殊一点,其它的,像是nginx和php容器的挂载卷就可以不用具名挂载也是可以的.为什么mysql就特殊点呢,因为mysql容器启动后
先立马启动mysql进程,这个时候mysql数据目录如果挂载的是一个空目录(普通挂载时候宿主机为空目录的情况下,即便容器中数据目录有文件,那么会用宿主机目录去覆盖容器中的这个数据目录)
那么mysql启动时候就会因为缺少系统的一些必要文件(目录),例如mysql,performance_schema,sys这三个就是必要的目录.所以这里docker-compose.yml如:
version: '2.3'
volumes:
mysql5733_volume:
name: mysql5733_volume
driver: local
driver_opts:
o: bind
type: none
device: /root/test/mysql
services:
nginx181:
build:
context: .
dockerfile: Dockerfile_nginx181
ports:
- 80:80
depends_on:
- php7433
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.2
volumes:
- ./web:/usr/local/nginx181/html
php7433:
build:
context: .
dockerfile: Dockerfile_php7433
depends_on:
- mysql5733
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.3
volumes:
- ./web:/usr/local/nginx181/html
mysql5733:
build:
context: .
dockerfile: Dockerfile_mysql5733
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.4
privileged: true
volumes:
- mysql5733_volume:/data/mysql
- ./my.cnf:/etc/mysql/my.cnf
networks:
nginx181_php7433_mysql5733:
ipam:
config:
- subnet: 172.20.0.0/16
(4)上次拆分出来的Dockerfile_mysql5733的内容好像基本没有修改过什么
(5)其实也不能说是一点都没有修改,还是多加了一个start_mysql.sh的脚本,主要是因为我们注释了skip-grant-tables后,则对于远程mysql用户来说,就需要密码了,这里这个脚本就是修改密码的.
#!/bin/bash
source /tmp/env_file
#这个本来就不会阻塞,没有必要&
/usr/local/mysql5733/support-files/mysql.server start
sleep 5s
mysql -e "source /lnmp/setup.sql;"
(6)start_services_mysql5733.sh文件,好像也是没有修改过什么.
(7)Dockerfile_nginx181中优化了从阿里云repo中获取gcc的过程,改为离线copy然后本地yum的方式,主要我看到每次这里都要那个请求一次,而且稍微还挺花费点时间的.以及web根目录之前copy下那个test.php和test2.php都优化了
毕竟要靠卷了
(8)Dockerfile_php7433,同样优化了copy下那个test.php和test2.php的冗余代码.
(9)setup.sql主要是为了修改默认密码的,用于上面那个修改密码的脚本的.
(10)web/test2.php就是基于之前,修改下默认密码了.web/test.php和web/test2.php都是统一整理到web目录,然后统一挂载到php和nignx容器的.
(11)附件
关键字词:lnmp,docker,具名,卷