docker背后的基本原理是“链接”订单

我有一个Docker中的Redis – Elasticsearch – Logstash – Kibana栈,我使用docker编写了这个栈。 Redis将从远程位置接收日志,将它们转发到Logstash,然后是通常的Elasticsearch,Kibana。

在docker-compose.yml中,我对“链接”的顺序感到困惑,

Elasticsearch链接到任何人,而logstash链接到redis和elasticsearch

elasticsearch: redis: logstash: links: - elasticsearch - redis kibana: links: - elasticsearch 

这个命令是否正确? select“链接”方向的理由是什么? 我们为什么不说弹性search与logstash相关?

而不是使用传统容器链接方法,您可以改为使用Docker用户定义的networking。 基本上,您可以为您的服务定义一个networking,然后在docker-compose文件中指出您希望容器在该networking上运行。 如果您的容器都在同一个networking上运行,则可以通过容器名称访问对方(DNSlogging会自动添加)。

1):创build用户定义的networking

docker network create pocnet

2):更新docker-compose文件

您想要将您的容器添加到刚刚创build的networking中。 你的docker-compose文件看起来是这样的:

 version: '2' services: elasticsearch: image: elasticsearch container_name: elasticsearch ports: - "{your:ports}" networks: - pocnet redis: image: redis container_name: redis ports: - "{your:ports}" networks: - pocnet logstash: image: logstash container_name: logstash ports: - "{your:ports}" networks: - pocnet kibana: image: kibana container_name: kibana ports: - "5601:5601" networks: - pocnet networks: pocnet: external: true 

3):启动服务

docker-compose up

注意:您可能想要打开一个新的shell窗口来运行第4步。

4):testing

进入Kibana容器,看看是否可以ping弹性search容器。

your__Machine:/ docker exec -it kibana bash
kibana@123456:/# ping elasticsearch

首先Docker中的LinksUnidirectional

有关链接的更多信息:有旧链接和用户定义networking中的链接。

传统链路为默认桥接networking提供了4个主要function。

  • 名称parsing
  • 链接容器的名称别名使用–link = CONTAINER-NAME:ALIAS
  • 安全的容器连接(通过–icc = false隔离)
  • 环境variables注入

将上述4个function与非默认的用户自定义networking进行比较,不需要任何额外的configuration

  • 使用DNS自动名称parsing
  • 自动保护networking中容器的隔离环境
  • dynamic连接和分离到多个networking的能力
  • 支持–link选项为链接的容器提供名称别名

在你的情况:自动DNS将帮助你在用户定义的networking。 首先创build一个新的networking:

 docker network create ELK -d bridge 

使用这种方法,您不需要在同一个用户定义的networking上链接容器。 你只需要把你的elk stack + redis容器放在ELKnetworking中,并从composer文件中删除链接指令。

你的订单对我来说很好。 如果您对订单有任何问题,或者正在等待服务启动依赖容器,则可以使用类似下面的内容:

 version: "2" services: web: build: . ports: - "80:8000" depends_on: - "db" entrypoint: ./wait-for-it.sh db:5432 db: image: postgres 

这将使Web容器等待,直到它可以连接到数据库。 你可以从这里得到等待脚本。