Docker网络之网络配置
在镜像run后进入容器的状态时,实际可以理解为容器在镜像的基础上包裹了一个“初始化层”的文件层。这个文件层实际上做了什么呢?其实容器中的主机名和DNS配置信息都是通过3个系统配置文件来维护的,这些文件就放在“初始化层”,分别是/etc/hosts、/etc/resolv.conf、/etc/hostname。
启动一个容器后,可以在容器中使用mount命令可以查看这三个文件的挂载信息,以nginx为例示例,如下:
其中,/etc/resolv.conf文件在创建容器的时候会默认与宿主机的/etc/resolv.conf保持一致,而/etc/hosts中只会记录一些与容器相关的地址和名称信息,/etc/hostname中记录的是主机名。
虽然以上3个文件在容器中都运行修改,但是当容器重启或者终止后就会丢失。因此在容器中修改hosts时,要在容器重启时在执行一次。而且这3个文件的修改不会被docker commit提交——即不能通过更新镜像的方式保存。
对于网络,Docker提供了子命令network。在Docker网络之多容器之间通讯 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)已经有所应用,具体参考官网docker network | Docker Documentation可以进行网络配置相关操作。
docker-compose.yml中也可以进行网络配置的设置,官网上关于网络配置,有个图解可以分享,如下:
Compose可以知道自定义网络,而不是使用默认的应用网络,这就为用户创建更复杂的拓扑结构和指定自定义网络驱动程序和选项提供了条件。以官网提供配置文件应用之间访问为例:
webapp服务位于项目的中间网络,database服务与后端网络。处理配置默认网络之外,还可以使用已经存在的网络,在service同级标签中设置networks覆盖全部服务容器。