(二)端口映射与容器互联

发布于 2018-09-07  2 次阅读


Docker 提供了两个很方便的功能来实现服务访问的基本需求
1.允许映射容器内应用的服务端口到本地宿主主机
2.互联机制实现容器之间通过容器名来快速访问

外部访问容器应用

-P 随机映射一个49000~49900的端口到内部容器开放的网络端口

    docker run -id --rm --name  -P web  docker.io/http
[root@Service ~]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                                         NAMES
6d58d1ed2913        docker.io/busybox                      "sh"                     4 seconds ago       Up 1 second         0.0.0.0:->49155/5000tcp   
                                              web

此时可以看到已经随机
-p 指定要映射的端口 支持的格式: IP:HostPort:ContainerPort / IP::ContainerPort / HostPort:ContainerPort

2.映射所有接口地址
使用HostPort:ContainerPort格式将本地的5000端口映射到容器的5000端口

    docker run -id --rm --name  -p 5000:5000 web  docker.io/http

此时默认会绑定本地所有接口上所有地址.多次使用-p 标记可以绑定多个端口

    docker run -id --rm -p 5000:5000 -p 3000:80 --name web docker.io/http

3.映射到指定地址的指定端口
使用IP:HostPort:ContainerPort绑定localhost的任意端口到容器的5000端口

    docker run -id --rm -p 127.0.0.1:5000:5000  --name web docker.io/http

4.映射到指定地址的任意端口
使用IP::ContainerPort绑定localhost的任意端口到容器的5000端口

    docker run -id --rm -p 127.0.0.1::5000  --name web docker.io/http

也可以使用udp

    docker run -id --rm -p 127.0.0.1:5000:5000/udp  --name web docker.io/http

5.使用dokcer port 命令来查看当前映射的端口配置,也可以查看到绑定端口的地址

互联机制实现快速访问

--name 自定义容器名
--link 容器互联
link 参数: --link link:alias ,name是要连接的容器名称,alias是这个连接的别名

1.容器互联
先创建一个新容器

    docker run -itd --name db docker.io/busybox

然后创建另一个新容器,并将它连接到db容器

    docker run -itd --name web --link db:db docker.io/busybox

查看一下状态

[root@Service ~]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                                         NAMES
8c13c1972c26        docker.io/busybox                      "sh"                     4 seconds ago       Up 2 seconds                                                      web
879807d526c0        docker.io/busybox                      "sh"                     2 seconds ago      Up 2 seconds                                                     db

进去web中,看下/etc/hosts 和ping 一下db,此时容器已经互联

[root@Service ~]# docker exec  -it web /bin/sh
/ # cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    db 879807d526c0
172.17.0.3    8c13c1972c26
/ # ping db
PING db (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.283 ms
^C

可以看到在web容器中的/etc/hosts 已经添加了db的解析
但在db中,是没有关于web解析的

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 

富强 民主 文明 和谐 自由 平等 公正 法治 爱国 敬业 诚信 友善