Docker 容器连接
前面我们实现了通过网络端口来访问运行在docker容器内的服务。下面我们来实现通过端口连接到一个docker容器
网络端口映射
我们创建了一个 python 应用的容器。
[root@docker ~]# docker run -d -P training/webapp python app.py
f9a0558823043e2a188b94265dcc245e1a256c26cc20d8cb5f2ee4817e006e92
[root@docker ~]#
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1
。
我们使用 -P
参数创建一个容器,使用 docker ps
来看到端口 5000 绑定主机端口 32771 。
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9a055882304 training/webapp "python app.py" 44 seconds ago Up 43 seconds 0.0.0.0:32771->5000/tcp confident_banach
74c14274a8f0 training/webapp "python app.py" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp nostalgic_jones
[root@docker ~]#
我们也可以使用 -p
标识来指定容器端口绑定到主机端口。
两种方式的区别是:
-
-P :是容器内部端口随机映射到主机的高端口。
-
-p : 是容器内部端口绑定到指定的主机端口。
[root@docker ~]# docker run -d -p 5001:5000 training/webapp python app.py f80f4f4490beda799c71068a2d7fc196c85e054a588f15428fc35bb805bea725 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f80f4f4490be training/webapp "python app.py" 14 seconds ago Up 14 seconds 0.0.0.0:5001->5000/tcp cocky_cocks f9a055882304 training/webapp "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:32771->5000/tcp confident_banach 74c14274a8f0 training/webapp "python app.py" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp nostalgic_jones [root@docker ~]#
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1
。
[root@docker ~]# docker run -d -p 127.0.0.1:5002:5000 training/webapp python app.py
53808c9cb8668c382bbc74eb2924a5838616f82595ae6bd6d1c41a70b52860e5
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53808c9cb866 training/webapp "python app.py" 4 seconds ago Up 2 seconds 127.0.0.1:5002->5000/tcp distracted_shirley
f80f4f4490be training/webapp "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:5001->5000/tcp cocky_cocks
f9a055882304 training/webapp "python app.py" 5 minutes ago Up 5 minutes 0.0.0.0:32771->5000/tcp confident_banach
74c14274a8f0 training/webapp "python app.py" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp nostalgic_jones
[root@docker ~]#
这样我们就可以通过访问 127.0.0.1:5002
来访问容器的 5000
端口。
上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
。
[root@docker ~]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
df5a6eb999d9509c3874f59846e056513bafed3ad3a0eee4895b837ff2b56f5e
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df5a6eb999d9 training/webapp "python app.py" 2 seconds ago Up 1 second 5000/tcp, 127.0.0.1:5000->5000/udp amazing_wright
53808c9cb866 training/webapp "python app.py" About a minute ago Up About a minute 127.0.0.1:5002->5000/tcp distracted_shirley
f80f4f4490be training/webapp "python app.py" 4 minutes ago Up 4 minutes 0.0.0.0:5001->5000/tcp cocky_cocks
f9a055882304 training/webapp "python app.py" 6 minutes ago Up 6 minutes 0.0.0.0:32771->5000/tcp confident_banach
74c14274a8f0 training/webapp "python app.py" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp nostalgic_jones
[root@docker ~]#
docker port
命令可以让我们快捷地查看端口的绑定情况。
[root@docker ~]# docker port cocky_cocks 5000
0.0.0.0:5001
[root@docker ~]#
Docker容器连接
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker连接会创建一个父子关系,其中父容器可以看到子容器的信息。
容器命名
当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用–name标识来命名容器,例如:
我们可以使用 docker ps -l
命令来查看容器名称。
[root@docker ~]# docker run -d -P --name runoob training/webapp python app.py
fdf22bdbe0892d91b92edc0018aad18dc95a5cfd9bbebc2e983f7774a04a3e7c
[root@docker ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdf22bdbe089 training/webapp "python app.py" 10 seconds ago Up 8 seconds 0.0.0.0:32772->5000/tcp runoob
[root@docker ~]#