仅需2小时-让你轻松学会使用docker-网络管理篇(6)
Docker 网络很重要,重要的,我们在容器中部署的所有东西都依赖于网络才能工作。
端口映射
默认情况下,容器和宿主机之间网络是隔离的,我们可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上。这样我们就可以通过 宿主机的ip+port的方式来访问容器里的内容
端口映射的种类
随机映射 -P(大写)
指定映射 -p(小写) 宿主机端口:容器端口
注意:生产场景一般不使用随机映射,但是随机映射的好处就是由docker分配,端口不会冲突,不管哪种映射都会影响性能,因为涉及到映射。
随机映射实践
默认随机映射
命令格式
1 | docker run -d -P [镜像名称] |
命令演示
启动一个nginx镜像
1 | Tony-iMac:diandian_blog tony$ docker run -d -P nginx |
查看容器运行状态
1 | Tony-iMac:diandian_blog tony$ docker ps |
从运行状态可以看出宿主机的32768倍映射到了容器的80端口。
-P 动绑定所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中自动随机选择,但是如果连续启动多个容器的话,则下一个容器的端口默认是当前容器占用端口号+1
宿主机访问测试
在宿主机浏览器访问http://localhost:32768
或127.0.0.1:32768,甚至是宿主机ip:32768,y因为映射的ip是0.0.0.0。效果如下
指定主机随机映射
命令格式
1 | docker run -d -p [宿主机ip]::[容器端口] --name [容器名称] [镜像名称] |
命令演示
启动一个nginx镜像
并且指定了宿主机的ip
1 | Tony-iMac:diandian_blog tony$ docker run -d -p 192.168.10.184::80 --name mynginx nginx |
查看容器运行状态
1 | Tony-iMac:diandian_blog tony$ docker ps |
可以看到映射的ip不在是0.0.0.0,而是127.0.0.1了
宿主机访问
此时使用宿主机ip加端口,可以正常访问nginx容器,而是用localhost或者127.0.0.1均无法访问该nginx了。
指定映射实践
指定端口映射
命令格式
1 | docker run -d -p [宿主机ip]:[宿主机端口]:[容器端口] --name [容器名字] [镜像名称] |
注意,如果不指定宿主机ip的话,默认使用0.0.0.0,容器端口必须清除,而且必须写出来
命令演示
运行容器并制定映射端口
给容器一个指定的访问端口8999
1 | docker run -d -p 8999:80 --name mynginx nginx |
查看新容器ip
1 | Tony-iMac:diandian_blog tony$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx |
进入容器查看ip
1 | Tony-iMac:diandian_blog tony$ docker exec -it mynginx /bin/bash |
查看端口映射
1 | Tony-iMac:diandian_blog tony$ docker ps |
查看宿主机开启端口
我这里宿主机是mac,linux命令还是常用的netstat -tunlp。
1 | Tony-iMac:diandian_blog tony$ lsof -n -P -i TCP -s TCP:LISTEN |grep docke |
浏览器访问
不管是用宿主机ip,或者localhost和127.0.0.1都可以正常访问docker中应用了。
多端口映射
命令格式
1 | docker run -d -p [宿主机端口1]:[容器端口1] -p [宿主机端口2]:[容器端口2] --name [容器名称] [镜像名称] |
命令演示
运行容器并开启多端口映射
1 | Tony-iMac:diandian_blog tony$ docker run -d -p 6868:443 -p 9899:80 --name myos nginx |
查看容器状态
1 | Tony-iMac:diandian_blog tony$ docker ps |