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解析的