网络端口映射
1.拖取web应用镜像
$ docker pull training/webapp
2.创建一个python应用容器
$ docker run -d -P training/webapp python app.py
b84340e5347fb61cc4fcc7c059eff4ef82ce5eed5864d913a477240cb374e6bd
也可指定容器绑的IP和绑定端口
我们也可以使用 -p 标识来指定容器端口绑定到主机端口。
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
$ docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
然后就可以通过访问127.0.0.1:5000访问容器的5000端口了
上面默认绑定的时tcp端口,如果要绑定UDP端口,可以在端口后面加上/udp
$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
用docker port 命令可以快捷查看端口绑定情况
$ docker port silly_blackwell 5000
Docker容器的互联
给容器命名
$ docker run -d -P --name hengda training/webapp python app.py
新建一个docker网络
$ docker network create -d bridge test-net
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
运行两个容器连接到新建的test-net网络:
$ docker run -itd --name test1 --network test-net centos:7 /bin/bash
$ docker run -itd --name test2 --network test-net centos:7 /bin/bash
进入test1 然后 ping test2 ,如果能ping通 则 网络建立成功
多个容器互联时,推荐使用Docker Compose
配置DNS
可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
设置后启动容器。容器的DNS会自动配置为114.114.114.114 和8.8.8.8
配置完成后,重启docker才能生效。
查看容器内的DNS是否生效
#docker run -it --rm centos:7 cat /etc/resolv.conf
只给某一个容器配置DNS
$ docker run -it --rm -h host_centos --dns=114.114.114.114 --dns-search=test.com centos
参数说明:
-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。