Docker 容器互联


要解决的问题:

  1. 从外部访问容器里的应用
  2. 容器与容器之间互联起来一起工作

Docker提供了两个方便的功能:

  1. 端口映射:允许映射容器内应用的服务端口到本地宿主主机
  2. 容器互联:互联机制实现多个容器间便捷访问,多个容器中应用进行快速交换

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的延申用法:

  1. 可以写多组映射关系,同一个容器映射了两个端口
    docker run -d -p 8081:8080 -p 8082:8080 tomcat:8.0.52
  2. 宿主主机端口号前还可以加上ip地址
    docker run -d -p 127.0.2.11:8087:8080 tomcat:8.0.52
  3. 宿主机端口号可以不写,标识宿主机端口随机
    docker r    un -d -p 127.0.2.11::8080 --name tomcat22 tomcat:8.0.52
  4. 默认时tcp协议,还可以改成udp
    docker run -d -p127.0.0.17:8085:8080/udp tomcat8.0.25
  5. 查看端口映射情况
    docker port containerId

2. 容器互联docker run –link

容器互联(linking)是一种多个容器中的应用进行快速交互的方式,不需要把端口映射到宿主机,直接通过宿主机作为桥梁进行互联。

Docker通过两种方式实现容器互联:

  1. 更新容器的环境变量
  2. 更新容器/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容器的相关配置:

  1. env查看环境变量
  2. 查看host配置

可以将多个子容器连接到父容器,多个容器可以连接到同一个子容器上

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注