Docker 容器互联-Link(十一)

Docker 容器互联-Link(十一)

Scroll Down

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

image.png

1. 自定义容器命名

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

  • 自定义的命名,比较好记,比如一个Web应用容器我们可以给它起名叫web,一目了然;
  • 当要连接其他容器时候(即便重启),也可以使用容器名而不用改变,比如连接web容器到db容器。

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

docker run -itd -P --name dongzao nginx:latest

如果容器已经建立,想修改还可以使用docker rename 来修改名称

docker rename newname  oldname 

image.png

注:容器的名称具有唯一性!

2. 容器互联

2.1 基础知识

通过docker run命令的--link参数可以让容器之间通过连接(linking)系统进行交互。
参数格式:--link name:alias ,name是要链接的容器名称, alias是此连接的别名。

容器的连接系统会依据容器的名称,创建容器之间一个安全隧道,在启动容器的时候不使用-p和-P参数(不用映射端口到宿主主机),从而避免了暴露端口到外部网络。

通过link方式创建容器,然后我们可以使用被link容器的别名进行访问。从而解除应用对IP的依赖。
但是,link方式只能解决单机容器间的互联。多机情况下,容器的互联需要其他的方式。

2.2 实验案例

实验案例,我们新建两个容器:web和MySQL ,然后使用web连接mysql容器。使用--link 命名参数就可以使应用容器可以访问数据库容器。

  1. 创建MySQL容器
docker run -idt  -P --name  mysql  -e MYSQL_ROOT_PASSWORD=123456  mysql:latest

注:创建MySQL容器 没有配置密码时无法运行的!

  1. 然后创建web容器,使用link连接到MySQL容器。
docker run -itd -P --name web --link mysql:web-mysql  nginx:latest

image.png

查看连接信息,在web的hosts文件中记录了web和MySQL的对应信息!

image.png

然后,我们在通过ping 测试,但是你因为我们pull下来的镜像都是精简过的系统,因此需要先安装ping命令!
但是,在真实生产环境不建议这样操作!

  1. 使用web ping MySQL。

pull下来的镜像是基于debian制作的。

docker exec -it web bash           # 登陆web

apt-get update                     # 更新系统
apt-get install iputils-ping       # 安装ping

image.png

  1. 使用MySQL ping web

image.png

这时候我们就发现,当启动容器web的时候使用--link命令去连接MySQL容器的时候,实际上连接是单向的,只能web去ping MySQL,而不能在MySQL容器内ping web。

illust_77619648_20191110_102359.jpg