组合服务是如何实现的?
how are compose services implemented?
我想知道compose是如何实现服务的。据我了解,compose 所做的每一件事都可以使用 docker CLI 完成。例如,创建容器、绑定卷、公开端口并将它们加入网络。
在我的理解中,有一个黑盒子是 compose 如何实现服务作为一个单元的概念。因此,当您在 deploy
键下指定 replicas
时,您将获得 DNS 循环式负载平衡,类似于当您在 swarm 中指定 --endpoint-mode dnsrr
时。
这实际上可以通过 CLI 命令实现吗,或者 compose 是否对 SDK 做了一些技巧?在这两种情况下,我的问题是那里究竟发生了什么?
所以这里的关键是网络别名。
# create a network
docker network create services
# create 2 apps
docker run --name app1 --rm -d nginx
docker run --name app2 --rm -d nginx
# the magic happens here, both container
# are connected to the network with the same alias
docker network connect --alias app services app1
docker network connect --alias app services app2
# finally make a dns query for app and get two A records back
docker run --network services --rm tutum/dnsutils dig app
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33977
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;app. IN A
;; ANSWER SECTION:
app. 600 IN A 172.30.0.2
app. 600 IN A 172.30.0.3
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Fri Jan 28 23:11:48 UTC 2022
;; MSG SIZE rcvd: 59
我想知道compose是如何实现服务的。据我了解,compose 所做的每一件事都可以使用 docker CLI 完成。例如,创建容器、绑定卷、公开端口并将它们加入网络。
在我的理解中,有一个黑盒子是 compose 如何实现服务作为一个单元的概念。因此,当您在 deploy
键下指定 replicas
时,您将获得 DNS 循环式负载平衡,类似于当您在 swarm 中指定 --endpoint-mode dnsrr
时。
这实际上可以通过 CLI 命令实现吗,或者 compose 是否对 SDK 做了一些技巧?在这两种情况下,我的问题是那里究竟发生了什么?
所以这里的关键是网络别名。
# create a network
docker network create services
# create 2 apps
docker run --name app1 --rm -d nginx
docker run --name app2 --rm -d nginx
# the magic happens here, both container
# are connected to the network with the same alias
docker network connect --alias app services app1
docker network connect --alias app services app2
# finally make a dns query for app and get two A records back
docker run --network services --rm tutum/dnsutils dig app
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33977
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;app. IN A
;; ANSWER SECTION:
app. 600 IN A 172.30.0.2
app. 600 IN A 172.30.0.3
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Fri Jan 28 23:11:48 UTC 2022
;; MSG SIZE rcvd: 59