您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
docker-compose一键构建(使用子网)lnmp
发布时间:2023-07-11 15:51:10编辑:雪饮阅读()
-
什么意思呢?
其实在上篇中,我们在docker-compose部署时候容器之间的访问通过容器主机名,比如php主机名,mysql主机名这些。
但是mysql是个特例,在my.cnf中bind-address只支持ip地址,虽然可以用0.0.0.0这种方式,但是这种方式显然是不够安全的。
另外一方面就是说,这种配置方式其它两个都支持主机名以及ip地址的方式,而mysql不支持,这样就整体而言看着不是很整齐。
为了整齐风格。所以这次使用子网。(实际上每个服务里面都使用127.0.0.1这种可能是我的妄想,docker的设计上应该就是不能直接这样搞)。
所谓子网就是说在这几个容器在同一个网络下面,这里所谓的同一个网络可以理解为同一个交换机下,不同容器就相当于不同的lan吧。
基于上篇
那么docker-compose.yaml结合子网后配置如:
version: '2.3'
services:
nginx181:
build:
context: .
dockerfile: Dockerfile_nginx181
ports:
- 80:80
depends_on:
- php7433
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.2
php7433:
build:
context: .
dockerfile: Dockerfile_php7433
depends_on:
- mysql5733
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.3
mysql5733:
build:
context: .
dockerfile: Dockerfile_mysql5733
networks:
nginx181_php7433_mysql5733:
ipv4_address: 172.20.0.4
networks:
nginx181_php7433_mysql5733:
ipam:
config:
- subnet: 172.20.0.0/16
那么此时nginx.conf中应该连接php-fpm的地方也就修改为php容器在该子网下的ip地址172.20.0.3
那么同样的Dockerfile_php7433这个拆分出来的对于php的Dockerfile中所用的www.conf配置文件中listen = 127.0.0.1:9000也应该替换为如172.20.0.3:9000
那么同样的,之前用的那个test2.php中也应该是更换下连接的mysql主机应该为172.20.0.4,即现在使用子网后mysql主机的子网ip。
那么my.cnf中自然也就是需要将mysqld段中的bind-address配置为172.20.0.4,即现在使用子网后mysql主机的子网ip。
另外对于my.cnf中skip-grant-tables,其实我不准备继续优化了,虽然这里很危险,但是实际做镜像的时候,是不会有这个的,应该是直接将mysql的数据目录挂载于宿主机的某个目录,也就是挂载卷。
那么第一次创建的时候可能没有密码,当登录后修改了密码,或者其它权限操作后,第二次的时候就是直接因为镜像已经有了,有挂载卷的情况下则会直接有密码的,以及修改后的一些权限策略的生效都是有的。
最后,本次使用的附件
关键字词:docker,lnmp,子网