容器连接
网络端口映射
docker run -d -P training/webapp python app.py
-P随机映射docker run -d -p 5000:5000 training/webapp python app.py
-p指定端口docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
指定ipdocker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
udp端口
容器互联
端口映射并不是唯一把 docker 连接到另一个容器的方法
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息
容器命名
docker run -d -P --name test training/webapp python app.py
--name来命名容器
创建一个安装ping命令的测试镜像
#进入容器
docker exec -it ubuntu-test /bin/bash
#更新并安装
apt-get update
apt install iputils-ping
# exit退出并提交更新
docker commit -m="install ping" -a="zhaojq" 0546f66f7e25 zhaojq/ubuntu:ping
新建网络
docker network create -d bridge test-net
#-d:参数指定 Docker 网络类型,有 bridge、overlay
#其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它
#查看 可看到test-net网络
docker network list
NETWORK ID NAME DRIVER SCOPE
e82ff7953606 bridge bridge local
661089d2aecf host host local
c0320454d544 none null local
15bfd9d1637c test-net bridge local
连接容器
# 运行两个容器
docker run -itd --name test-net1 --network test-net zhaojq/ubuntu:ping /bin/bash
docker run -itd --name test-net2 --network test-net zhaojq/ubuntu:ping /bin/bash
# 进入test-net1
docker exec -it test-net1 /bin/bash
# ping test-net2 可以看到连接成功,反过来进入test-net2 ping test-net2 也可以连接成功
ping test-net2
PING test-net2 (172.19.0.3) 56(84) bytes of data.
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=3 ttl=64 time=0.054 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=4 ttl=64 time=0.059 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=5 ttl=64 time=0.046 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=6 ttl=64 time=0.045 ms
64 bytes from test-net2.test-net (172.19.0.3): icmp_seq=7 ttl=64 time=0.053 ms
配置DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS, 配置完,需要重启 docker 才能生效
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
# 查看dns是否生效
docker run -it --rm ubuntu cat etc/resolv.conf
手动指定容器配置
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
# -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
# --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
# --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com
# 如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS