网络端口映射:
我们创建一个Python应用的容器
我们也可以使用-p标识指定容器端口绑定到主机端口
两种方式的区别是:
-P:是容器内部端口随机映射到主机的端口
-p:是容器内部端口绑定到指定的主机端口
我们可以指定容器绑定的网络地址,比如绑定127.0.0.1
默认都是绑定TCP端口,如果要绑定UDP端口,可以在端口后面加上/UDP
docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py
查看端口的绑定情况
docker port <容器 ID>
二、Docker 容器互联
端口映射并不是唯一把docker连接到另一个容器的方法
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息
docker连接会创建一个父子关系,其中父容器可以看到子容器的信息
1.容器命名
当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用–name标识来命名容器,
docker run -d -P --name Sangfor training/webapp python app.py
2.新建网络
创建一个新的docker网络
1.查看容器的网络详情
docker network ls
参数说明:
-d:参数指定Docker 网络类型,有bridge、overlay
其中overlay网络类型用于 Swarm mode
3.连接容器
运行一个容器并连接到新建的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容器建立了互联关系
如果test1、test2容器中无ping命令,则在容器内执行一下命令安装ping(即学即用:可以在一个容器安装好,提交容器到镜像,在新的镜像重新运行一下两个容器)
进入容器中执行:
1.apt-get update
2.apt install iputils-ping
使用ping进行测试
在容器1中测试ping容器2
ping test2
在容器2中测试ping容器1
ping test1
这样,test1容器和test2容器建立了互联关系
如果你有多个容器之间需要互相连接,推荐使用Docker Compose
三、配置DNS
我们可以在宿主的/etc/docker/daemeon.json文件中增加以下内容来设置全部容器的DNS:
设置后,启动容器的DNS会自动配置为114.114.114.114和8.8.8.8
配置完,需要重启docker才能生效
查看容器的DNS是否生效可以使用以下命令,它会输出容器的DNS信息:
参数解析:
如果在容器启动时没有指定 --dns和–dns-search,Docker会默认用宿主主机上的/etc/resolv.conf来配置容器的DNS