1.端口映射
为什么要端口映射?
在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,
因为没有端口,所以需要进行端口映射。
端口映射的两个关键词:
端口映射有两个关键词-P -p 一个是大写一个是小写 通过run --help也可以看到
大写的P是随机映射一个49000-49900的端口到内部容器开放的网络端口。
小写的p可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。
##过滤出所有容器的id
[root@foundation52 docker]# pwd
/tmp/docker
[root@foundation52 docker]# docker ps -aq
049e851d4838
40e24d2caceb
64a0c831be4e
ef6698f919db
##批量删除不使用的容器
[root@foundation52 docker]# docker rm -f `docker ps -aq`
049e851d4838
40e24d2caceb
64a0c831be4e
ef6698f919db
[root@foundation52 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
## -p 指定映射端口
[root@foundation52 docker]# docker run -d --name vm1 nginx -p 8080:80 nginx
f1373ba2cfccc47e950577fcaa48271d99b482b7acad8e5e8794c6503dfe921d
[root@foundation52 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17e7cd21a165 nginx "nginx -g 'daemon ..." 55 seconds ago Up 54 seconds 0.0.0.0:8080->80/tcp vm1
[root@foundation52 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17e7cd21a165 nginx "nginx -g 'daemon ..." 59 seconds ago Up 58 seconds 0.0.0.0:8080->80/tcp vm1
35f367c5bcb7 nginx "-P 8080:80 nginx" About a minute a
##查看DNAT
[root@foundation52 docker]# iptables -t nat -nL
测试:
2.容器互联
在实际应用中往往需要多个容器交互,比如一个数据库容器来提供db服务,多个应用容器来部署应用,
使用端口访问就会暴露端口,这样不太安全。故需要容器互联。
在同一宿主机下,docker容器通过docker网桥进行连接,默认情况下,同一宿主机下的所有容器都可以连接。
但是容器的ip可能随着容器重启而变化,所以docker提供了link选项提供可靠连接。
##根据ubuntu镜像启动一个名为vm2的容器并将其连接到vm1容器上的连接起一个别名nginx
[root@foundation52 ~]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@3d5192959d1a:/# 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 nginx 466a27e29165 vm1
172.17.0.3 3d5192959d1a
root@3d5192959d1a:/# ping nginx