网络端口映射
创建一个python应用的容器
docker run -d -P training/webapp python app.py
我们可以指定容器绑定的网络地址比如绑定127.0.0.1
我们使用-P参数创建一个容器,使用docker ps可以看到容器端口5000绑定主机端口是随机的
我们也可以使用-p标识来指定端口绑定到主机端口
两者的区别是
-P 是容器内部端口随机映射到主机的端口
-p 是容器内部端口绑定到指定的主机端口
另外我们可以指定容器绑定的网络地址 比如绑定127.0.0.1
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
上面这些默认绑定的都是tcp端口,如果要绑定udp端口,可以在端口后面加上/udp
docker port 命令可以快捷的查看端口的绑定情况
Docker 容器互联
端口映射并不是唯一把docker连接到另一个容器的方法。
docker有个连接系统允许将多个容器连接在一起,共享连接信息。
docker连接会创建一个父子关系,其中父容器可以看到子容器的信息
容器命名
我们可以使用 --name标识来命名容器,
docker run -d -P --name runoob 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 ubuntu /bin/bash
打开一个新的终端,再运行一个容器并加入到test-net网络
docker run -itd --name test2 --network test-net ubuntu /bin/bash
通过ping命令来证明test1容器和test2容器建立了互联关系
如果没有ping命令
可以在容器内执行以下命令
1.首先进入test1容器的终端
docker exec -it test1 /bin/bash
2.执行下面的命令
apt-get update
3.执行下面命令 ,选择Y
apt install iputils-ping
这时候我们的test1就有ping的命令了,但是我们的test2还没有,这时候我们就可以利用之前的知识来进行安装
因为我们的test1容器里面已经有了ping的相关环境,那么我们只需要把test1这个容器提交到一个镜像上面,然后test2再进行拉取就好了
1.首先进行容器提交镜像
docker commit -a "ubuntu" -m "添加ping相关命令" -p 4521473f27a8 ubuntu:demo23
看一下本地确实有了这个镜像
2.注意,这时候我们应该让test1和test2容器都在这个这个镜像下面创建
docker run -itd --name test2 --network test-net ubuntu:demo23 /bin/bash
这下test1和test2都有了ping的相关命令
进入test1容器的终端并执行执行
docker exec -it test1 /bin/bash
ping test2
说明已经ping成功了
换到test2终端下结果相同 。
配置 DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}