Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。本文首先介绍了Docker自身的4种网络工作方式,然后介绍一些自定义网络模式。
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,成为Container-IP,同时Docker’网桥是 每个容器的默认网关。因为同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。
如果容器希望外部访问能访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run创建容器时通过-p或-P参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器 。
docker四种网络模式如下:
Bridge contauner ——桥接式网络模式
Host(open) container ——开放式网络模式
Container(join) container ——联合挂载式网络模式,是host网络模式的延伸
None(Close) container ——封闭式网络模式
这里的案例是pull一个ubuntu镜像,启动多个ubuntu容器,实现容器间的通信
一、前提是已经安装好了docker和docker-compose,具体可见链接;
docker pull ubuntu
# 可以先查看有哪些镜像
docker search ubuntu
# 首先查看、创建一个网络 test-network
docker network ls
docker network create test-network
#将容器加入网络当中
方法一:docker network connect test-netwrk ubuntu1
方法二:启动容器的时候加入:docker run -itd --network test-network ubuntu
# 在外面查看各个容器的IP地址
docker netwrk inspect test-network
# 关于容器内源不能使用
方法一:启动容器时映射进去;本地新建一个文件夹,s.list,把对应容器版本的源放进去,-v参数后面是将本地s.list文件映射到容器的sources.list中
docker run -itd -v $PWD/s.list:/etc/apt/sources.list ubuntu bash
方法二:找到源,进入容器echo进他的sources.list文件,覆盖掉。
systemctl restart docker