目录
1. Docker 容器内服务的端口访问
1.1 随机映射端口
运行一个服务
docker run -d -P training/webapp python app.py
参数说明:
- -P: 随机映射本机的端口
- -d:以守护进程开启,后台运行此容器。
- -p: 制定本机端口映射
1.2 指定端口映射
1.2.1 指定端口映射
docker run -d -p 5000:5000 training/webapp python app.py
参数说明:
- -p: 制定本机端口映射
1.2.2 指定地址及端口映射
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
1.2.3 udp绑定
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
2 Docker容器互联
docker提供了一个连接系统将多个容器连接到一起,共享连接信息。
docker连接时会创建父子关系,其中父容器可以看到子容器的信息。
2.1 容器命名
docker run
的时候可以通过添加--name
标识来命名容器。例如:
docker run -d -P --name runoob training/webapp python app.py
2.2 新建网络
docker network create
$ docker network create -d bridge test-net
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
ps:
-
passthru模式:只允许单个子接口连接主接口,且必须设置成混杂模式,一般用于子接口桥接和创建 VLAN 子接口的场景。
-
private模式:隔离功能比VPEA更强,阻断了广播和组播,即使交换机开启hairpin也无法通信。
-
bridge模式:寄生在同一个物理设备的macvlan设备可以直接通讯,不需要外接的hairpin设备帮助,使用如下的命令创建一个bridge的macvlan网络。
-
overlay:管理 Swarm 中 Docker 守护进程间的通信。你可以将服务附加到一个或多个已存在的 overlay 网络上,使得服务与服务之间能够通信。
2.3 连接容器
2.3.1 新建两个容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
2.3.2 容器的互相访问
进入容器1
docker exec -it test1 /bin/bash
访问容器2
ping test2
PS:没有ping命令时:
apt-get update
apt install iputils-ping
同理,也可以进入test2,然后去ping
test1容器。
2.4 容器DNS配置
2.4.1 全部容器DNS配置
在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
设置完后需要重启docker 。
/etc/init.d/docker restart
打印容器DNS信息
docker run -it --rm ubuntu cat etc/resolv.conf
2.4.2 指定容器DNS配置
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
PS: --dns
和--dns-search
没有指定时会默认使用主机上/etc/resolv.conf
来配置容器的 DNS。
参数说明
-
–rm:容器退出时自动清理容器内部的文件系统。
-
-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。