docker中服务间的通信

1,262 阅读2分钟

同宿主机,docker中服务间的通信

docker中容器间的通信是使用bridge;

默认情况下,启动的容器是添加在名字为bridge中的network中,如果添加在其他的network中,那么默认是加入

--link的,即可以使用容器name通信;

同一个bridge中的容器是可以通信的,ping ip地址可以ping通,但是ping 容器name不能ping通,需要加--link 服务name;

不同bridge之间不能通信,只能ping同网关;

如何从宿主机访问到docker中的服务呢? -p 8080:8080, 通过宿主机的端口映射docker中的端口实现互通,另外一个就是,把服务的network设置为host;

docker run

--it(启动容器,并且进入到容器内部)

-d(后台运行,不占用命令行窗口)

--network network的Name(指定network,默认是添加在bridge中的)

--name mytomcat:指定容器的名字为mytomat

-p 8080:8080(主机和docker之间进行映射,用于从宿主机访问docker;宿主机端口:docker中的端口)

tomcat:1.0 (镜像名字:镜像的版本号)

命令:

docker network list : 查看network列表

docker network inspect network的Name: 查看network的信息,container中包含的服务是可以互相通信的,ping ip地址是可以ping通的,但是ping容器的名字是不能通的。

docker exec test1 ping ip地址:在test1中执行命令:ping ip地址。

docker container inspect 容器id: 查看容器的详细信息。

多宿主机,docker的通信

  1. 使用的是etcd用来通过主机间的设置
  2. 设置一个network,是overlay类型的, 这样能通过这个network实现通信

docker compose的使用

通过配置docker-compose.yml文件,整理应用中需要哪些服务,约定服务之间的通信方式。

可能用到的命令:

如果需要自己build镜像,需要先执行:docker-compose build

启动应用: docker-compose up

scale的使用

scale可以创建多个容器,docker-compose scale 容器名称=需要创建的个数

docker-compose scale web=5: 创建了5个名称是web的服务。