其实docker的端口映射应该在先前的网络部分进行讲述的,还记得docker0网络模式的原理吗?其实,在docker中,默认的选择是docker网桥模式,而实现网络通信也是依赖于NAT地址转换,简单而言就是外部网络可以通过访问宿主机的ip地址结合端口号对docker内部的容器进行访问通信获取数据信息。
端口映射有两种命令方式,一种是加入选项-P,另一种是使用-p。-P表示docker自己分配一个端口,适用于自己未规定而又避免与其他容器冲突端口的情况,-p则表示指定端口,适用于自定义的情况,节省资源和优化管理的情况。
下面看看实际案例:
[root@localhost ~]# docker run -d -P httpd Unable to find image 'httpd:latest' locally latest: Pulling from library/httpd 123275d6e508: Pull complete e984dd982a6e: Pull complete 963280e5cf81: Pull complete 6faf90d050b2: Pull complete 962b56984bb0: Pull complete Digest: sha256:d5dc0d279039da76a8b490d89a5c96da83a33842493d4336b42ccdfbd36d7409 Status: Downloaded newer image for httpd:latest e7a9cda3fea1904401b274a35b51d93a23b95cd0c8e548bb4982e21e8586d657 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7a9cda3fea1 httpd "httpd-foreground" 5 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp charming_ride我们测试一下这个Apache服务是否成功,从获取到成功差不多就30s
使用小写尝试一下:
[root@localhost ~]# docker run -d -p 54544:80 httpd 26d52f0d0a49a8c3b87aa4f4eb251eee080c9ba776902987e0173d7a290412d0 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26d52f0d0a49 httpd "httpd-foreground" 5 seconds ago Up 4 seconds 0.0.0.0:54544->80/tcp busy_khorana e7a9cda3fea1 httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:32768->80/tcp charming_ride测试验证:
看了都成功了。接下来说说容器的互联。
容器互联容器互联是指通过容器的名称在容器间建立一条专门的网络通信隧道从而实现容器的互联。在使用docker run 命令的时候使用--link选项就可以实现容器之间的互联通信。
格式为:--link name:alias
name——容器名
alias——这个连接的别名
需要注意的是:容器互联是通过容器的名称来执行的,--name选项可以给容器创建一个友好的名称,这个名称是唯一的,即不可重复。
具体案例演示:
1、创建容器
[root@localhost ~]# docker run -itd -P --name test1 CentOS /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos 8a29a15cefae: Pull complete Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700 Status: Downloaded newer image for centos:latest 9f2ce34c7867d8b159201f9a3521a28570a3843a8fca08a60f58b12ff75651882、创建接收容器
[root@localhost ~]# docker run -itd -P --name test2 --link test1:test1 centos /bin/bash f3c2974dcd19796cd8a48ecaf398370f891887cbfb92a192e8d7e706ccbefd623、进入一个容器中进行测试(ping)
[root@localhost ~]# docker exec -it test2 /bin/bash [root@f3c2974dcd19 /]# ping test1 PING test1 (172.17.0.2) 56(84) bytes of data. 64 bytes from test1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.089 ms 64 bytes from test1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from test1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.062 ms 64 bytes from test1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.065 ms 64 bytes from test1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.063 ms ^C --- test1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 13ms rtt min/avg/max/mdev = 0.062/0.069/0.089/0.014 ms需要注意的是,我们的容器需要是up的状态否则会遇到报错。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx