Docker 容器互联
要解决的问题:
- 从外部访问容器里的应用
- 容器与容器之间互联起来一起工作
Docker提供了两个方便的功能:
- 端口映射:允许映射容器内应用的服务端口到本地宿主主机
- 容器互联:互联机制实现多个容器间便捷访问,多个容器中应用进行快速交换
1. 端口映射实现容器应用访问 docker run -p
需要在启动容器的时候,就要指定相应参数。当容器运行一些网络应用,且需要外部访问这些应用时, 可以通过-P或者-p参数来指定端口映射。
#将宿主主机8081端口映射到容器的8080端口
docker run -d -p 8081:8080 tomcat:8.0.52
# 宿主主机端口去随机:容器里应用使用的端口号
docker run -d -P tomcat:8.0.52
# 可以通过docker ps查看随机分配的端口号
docker ps
docker run -p的延申用法:
- 可以写多组映射关系,同一个容器映射了两个端口
docker run -d -p 8081:8080 -p 8082:8080 tomcat:8.0.52
- 宿主主机端口号前还可以加上ip地址
docker run -d -p 127.0.2.11:8087:8080 tomcat:8.0.52
- 宿主机端口号可以不写,标识宿主机端口随机
docker r un -d -p 127.0.2.11::8080 --name tomcat22 tomcat:8.0.52
- 默认时tcp协议,还可以改成udp
docker run -d -p127.0.0.17:8085:8080/udp tomcat8.0.25
- 查看端口映射情况
docker port containerId
2. 容器互联docker run –link
容器互联(linking)是一种多个容器中的应用进行快速交互的方式,不需要把端口映射到宿主机,直接通过宿主机作为桥梁进行互联。
Docker通过两种方式实现容器互联:
- 更新容器的环境变量
- 更新容器/etc/hosts文件
先创建一个数据库容器:
#启动数据库
docker run --name db -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.7
#启动tomcat,完成于db的互联
docker run -d -p 80:8080 --name web --link db:mysqldb tomcat:8.0.52
–link 参数格式: –link name:alias ,其中name为要连接容器的名称,alias是给(web)容器里定义的别名
在启动db容器时,没有将端口映射到宿主主机上,避免了直接将数据库暴露在外网。
查看web容器的相关配置:
- env查看环境变量
- 查看host配置
可以将多个子容器连接到父容器,多个容器可以连接到同一个子容器上