在实践中经常需要多个服务组件容器共同协作的情况,这往往需要多个容器之间能够互相访问到对方的服务,Docker除了通过网络访问外还提供了两个很方便的功能来满足服务访问的基本需求:
Ⅰ、允许映射容器内应用的服务端口到本地宿主机上
Ⅱ、互联机制实现多个容器间通过容器名进行快速访问
1、端口映射实现容器访问
① 从外部访问容器应用
在容器启动时如果不指定对应参数,在容器外部是无法通过网络访问容器内的网络应用和服务的
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p来指定端口映射
参数 | 映射范围 |
---|---|
-P | 随机映射49000-49900端口 |
-p | 指定要映射的端口,一个指定端口只能绑定一个容器 格式 IP:HostPort:ContainerPort |
# 本地5000端口映射到容器5001端口
docker container run -it -d --name nginx_server1 -p 5000:5001 646f1785266a
# 可以通过多个-p绑定多个端口
docker container run --name webapp -d -p 5000:5000 -p 5001:5001 646f1785266a
# 映射指定地址的指定端口
docker container run --name webapp -d -p 127.0.0.1:5000:5000 646f1785266a
# 映射指定地址的任意端口
docker container run --name webapp -d -p 127.0.0.1::5000 646f1785266a
# 还可以使用udp来标记指定udp端口
docker container run --name webapp -d -p 127.0.0.1:5000:5000/udp 646f1785266a
进入容器nginx_server1 安装nginx并修改其相关配置
查看容器ip
在外部通过容器ip端口进行访问
2、互联机制实现便捷互访
在源和接收容器上创建连接关系,接收容器可通过容器名访问源容器,而不需要指定具体的ip地址
① 创建容器名
通过 --name 参数指定容器名,且此容器名称是唯一的
② 容器互联
通过 --link 参数使容器之间安全的交互
# --link name:alias 【name为要连接容器的名称 alias为别名】
# 先创建一个docker_a容器
docker container run --name docker_a -d 646f1785266a
# 创建一个docker_b容器并连接到docker_a容器
docker container run --name docker_b -d -P --link docker_a:docker_a 646f1785266a
# 此时docker_b容器将可以访问docker_a容器的信息