Docker网络基础配置
容器默认与主机网络联通,与外网隔离,不同容器处于同一网桥,默认也可以进行通信,在容器对外提供服务和容器间通信docker提供了两种方法:端口映射和容器间互联。
端口映射
在启动容器时不指定参数默认是无法从容器外部服务内部的网络应用服务的。
容器对外提供服务需要在创建时使用-p(小写)或-P(大写)进行端口映射,使得外部可以通过宿主机的端口访问容器内部服务。
# 参数用法
-p, --publish list Publish a container‘s port(s) to the host
-P, --publish-all Publish all exposed ports to random ports
# -p(小写) 容器端口:宿主机端口,只能进行端口一对一映射
docker run -it -d -p 80:5000 --name nginx-1 nginx
# -P(大写)不能指定端口,将容器内部的EXPOSE的端口随机映射到宿主机49000-49900
docker run -it -d -P --name nginx-1 nginx
默认-p或-P是映射所有地址的端口,也可以指定映射到指定地址的指定端口或者端口类型(TCP/UDP),服务器可能是多个网卡。
# 将本地192.168.1.1的5000端口映射为容器80tcp端口
docker run -it -d -p 192.168.1.1:5000:80/tcp --name nginx-1 nginx
# 查看容器映射端口.docker port 容器名称或ID
docker port nginx
容器间互联
第二种是通过容器间互联实现数据通信。
# 通过--link参数在创建容器时指定链接到目标容器
# 下面创建一个web容器与一个mysql容器为例
docker run -it -d --name mysql mysql /bin/bash
# 创建一个容器连接到mysql,在创建容器时指定容器名称,容器名称也是唯一的。
# --link 格式为:--link 容器名称:容器别名,可以将多个容器连接到数据库容器里。
docker run -it -d --name web --link mysql:mysql nginx