详解Docker 端口映射与容器互联

2020-06-17 06:42:14易采站长站整理

使用–name参数可以为容器自定义命名:


[root@docker ~]# docker run -itd --name centos_1 centos:latest
4d58a9f6f324185caf53dbe5eaee85f35e853842ffb037cf272c2a92cee89716
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d58a9f6f324 centos:latest "/bin/bash" 6 seconds ago Up 5 seconds centos_1
3436fd5fbdca nginx:latest "nginx -g 'daemon ..." 11 minutes ago Up 11 minutes 80/tcp, 10.0.0.31:32769->8082/tcp nginx_5
16a476837222 nginx:latest "nginx -g 'daemon ..." 13 minutes ago Up 13 minutes 80/tcp, 10.0.0.31:89->8081/tcp nginx_4
65fbfbe9761e nginx:latest "nginx -g 'daemon ..." 15 minutes ago Up 15 minutes 80/tcp, 0.0.0.0:3000->2700/tcp, 0.0.0.0:2389->8863/tcp nginx_3
5bdca2bde33d nginx:latest "nginx -g 'daemon ..." 18 minutes ago Up 18 minutes 80/tcp, 0.0.0.0:5000->5000/tcp nginx_2
f769af3e9847 nginx:latest "nginx -g 'daemon ..." 34 minutes ago Up 34 minutes 0.0.0.0:32768->80/tcp nginx_1
[root@docker ~]#

通过docker ps或者docker ps -a可以查看到容器的自定义名字,利用docker inspect也可以获取到容器自定义名字:


[root@docker ~]# docker inspect -f "{{.Name}}" 4d58a9f6f324
/centos_1
[root@docker ~]#

注意:

容器的名称是唯一的。如果已经命名了一个web的容器,当再次使用web这个命名的时候会报错,如果一定要使用,需要先用docker rm删除之前创建的web容器。

在执行docker run的时候如果添加–rm参数,则容器终止后会立刻删除。–rm参数和-d参数不能同时使用。

2、容器互联

使用–link参数可以让容器之间安全地进行交互。

创建一个数据库容器:


[root@docker ~]# docker run -itd --name db --env MYSQL_ROOT_PASSWORD=example mariadb
b239b124946c99b7da63e00c22df802e9612fbe8bc636389205baf6c2f6963bd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b239b124946c mariadb "docker-entrypoint..." 3 seconds ago Up 2 seconds 3306/tcp db
[root@docker ~]#

创建一个web容器并将它连接到db容器:


[root@docker ~]# docker run -itd -P --name web --link db:db nginx:latest
42fa6662784010368b5e615d495e71920d85cc1bc089a5d181657514973ee90a
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86ef0f632ffe nginx:latest "nginx -g 'daemon ..." 44 seconds ago Up 43 seconds 80/tcp web