博客
关于我
Docker 入门系列(6)- Docker 互联
阅读量:498 次
发布时间:2019-03-07

本文共 4333 字,大约阅读时间需要 14 分钟。

容器互联机制

容器的互联 (linking) 是一种让多个容器中应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的 IP 地址。

1. 自定义容器命名

连接系统依据容器的名称来执行。虽然当创建容器的时候,系统默认会分配一个名字,但自定义容器名字有两个好处:

  • 自定义的命名比较好记
  • 当要连接其他容器时,即便重启,也可以使用容器名而不用改变

使用 --name 标记可以为容器自定义命名:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker run -d -P --name web training/webapp python app.py57043fa975a05bf03bb9f590a57432dfb06977c70f9ea6b15ede665537b199bdwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS                     NAMES57043fa975a0        training/webapp     "python app.py"     5 seconds ago       Up 3 seconds                0.0.0.0:32769->5000/tcp   web4233fd67e97c        training/webapp     "python app.py"     22 hours ago        Up 22 hours                 0.0.0.0:32768->5000/tcp   reverent_blackburnwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

也可以使用 docker inspect 来查看容器的名字:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker inspect -f "{   { .Name }}" 57/webwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

容器的名称是唯一的。如果已经命名了一个叫 web 的容器,当你要再次使用 web 这个名称的时候,需要先用 docker rm 来删除之前创建的同名容器。在执行 docker run 的时候如果添加 --rm 标记,则容器在终止后会立刻删除。注意,–rm 和 -d 参数不能同时使用。

2. 容器互联

使用 --link 参数可以让容器之间安全地进行交互。下面先创建一个新的数据库容器:

docker run -d --name db training/postgres

删除之前创建的web容器:

docker rm -f web

然后创建一个新的 web 容器,并将它连接到 db 容器:

docker run -d -P --name web --link db:db training/webapp python app.py

此时,db 容器和 web 容器建立互联关系:

  • –link参数的格式为 --link name:alias,其中name是要连接的容器名称,alias是这个连接的别名。

使用docker ps来查看容器的连接,如下所示:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMESed5b3fdd48f0        training/webapp     "python app.py"          8 seconds ago       Up 7 seconds        0.0.0.0:32770->5000/tcp   webbcfcc084bd07        training/postgres   "su postgres -c '/us…"   18 seconds ago      Up 18 seconds       5432/tcp                  db4233fd67e97c        training/webapp     "python app.py"          22 hours ago        Up 22 hours         0.0.0.0:32768->5000/tcp   reverent_blackburnwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

Docker 相当于在两个互联的容器之间创建了一个虚机通道,而且不用映射它们的端口到宿主主机上。在启动 db 容器的时候并没有使用 -p 和 -P 标记,从而避免了暴露数据库服务端口到外部网络上。

Docker 通过两种方式为容器公开连接信息:

  • 更新环境变量;
  • 更新/etc/hosts文件;

使用 env 命令来查看 web 容器的环境变量:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker run --rm --name web2 --link db:db training/webapp envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=0c192de8f674DB_PORT=tcp://172.17.0.3:5432DB_PORT_5432_TCP=tcp://172.17.0.3:5432DB_PORT_5432_TCP_ADDR=172.17.0.3DB_PORT_5432_TCP_PORT=5432DB_PORT_5432_TCP_PROTO=tcpDB_NAME=/web2/dbDB_ENV_PG_VERSION=9.3HOME=/rootwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

其中 DB_ 开头的环境变量是供 web 容器连接 db 容器使用的,前缀采用大写的连接别名。

除了环境变量之外,Docker 还添加 host 信息到父容器的 /etc/hosts 文件。下面是父容器web的hosts文件:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker run -t -i --rm --link db:db training/webapp /bin/bash root@00c0b5ac4599:/opt/webapp# cat /etc/hosts 127.0.0.1	localhost::1	localhost ip6-localhost ip6-loopbackfe00::0	ip6-localnetff00::0	ip6-mcastprefixff02::1	ip6-allnodesff02::2	ip6-allrouters172.17.0.3	db bcfcc084bd07172.17.0.5	00c0b5ac4599root@00c0b5ac4599:/opt/webapp# exitexitwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

这里有两个 hosts 信息,第一个是 web 容器,web 容器用自己的 id 作为默认主机名,第二个是 db 容器的 IP 和主机名。可以在 web 容器中安装 ping 命令来测试与 db 容器的连通:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker exec -it web /bin/bashroot@ed5b3fdd48f0:/opt/webapp# cat /etc/hosts 127.0.0.1	localhost::1	localhost ip6-localhost ip6-loopbackfe00::0	ip6-localnetff00::0	ip6-mcastprefixff02::1	ip6-allnodesff02::2	ip6-allrouters172.17.0.3	db bcfcc084bd07172.17.0.4	ed5b3fdd48f0root@ed5b3fdd48f0:/opt/webapp# ping dbPING db (172.17.0.3) 56(84) bytes of data.64 bytes from db (172.17.0.3): icmp_seq=1 ttl=64 time=0.111 ms64 bytes from db (172.17.0.3): icmp_seq=2 ttl=64 time=0.075 ms64 bytes from db (172.17.0.3): icmp_seq=3 ttl=64 time=0.093 ms64 bytes from db (172.17.0.3): icmp_seq=4 ttl=64 time=0.093 ms^C--- db ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 2998msrtt min/avg/max/mdev = 0.075/0.093/0.111/0.012 msroot@ed5b3fdd48f0:/opt/webapp# exitexitwohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

用 ping 来测试 db 容器,它会解析成 172.17.0.3。用户可以连接多个子容器到父容器,比如可以连接多个 web 到同一个 db 容器上。

转载地址:http://sckjz.baihongyu.com/

你可能感兴趣的文章
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现update数据实时同步_实际操作05---大数据之Nifi工作笔记0044
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>