容器连接

网络端口映射

  • 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 指定ip
  • docker 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
Copyright © zhaojq 2019 all right reserved,powered by Gitbook本书发布时间: 2021-01-19 20:53:28

results matching ""

    No results matching ""