docker-compose 设计用于 单机(单个 Docker 引擎)编排,不负责把同一套服务分布到多个物理结点上;它没有集群调度、跨节点网络、自动迁移/自愈等能力。要跨节点,就得用 Kubernetes
使用(同一个)Compose启动的容器们会被放到一个分组里面
比如:compose.yaml(这个命名应该不是固定的吧)
# 最常用的 compose 命令 # -f 指定配置文件 # up 表示启动 OR 更新 # -d 表示后台运行 docker compose -f docker-compose.yaml up -d
使用 docker compose 启动一个集群是很好理解的。但是实际上,在集群启动后,再编辑文件(比如修改一些参数),重新执行上述命令(和启动集群时用的命令一样),集群就会被更新(而不是创建一个新的集群出来)。难道是这份 yaml 文件和集群绑定了吗?并非如此,因为实际上把这份 yaml 文件复制到其他位置,还是可以一样使用。
实际上的工作原理是:
docker compose启动一个集群的时候,集群会有一个名字。
如果再次执行compose up的时候,发现同一个名字的集群已经存在了,那么Docker就会尝试去更新它,而不是创建一个新的集群出来。
同理,如果执行compose up的时候,没有同名的集群(比如第一次执行,或者使用参数指定了新名字),那么Docker就会创建新的集群。
那么容器是如何更新的呢?(这个更新肯定是增量更新的,全量更新也太笨了)
前面我们提到compose集群内的每一个容器,都有一个名字(<project>_*<*service*>_c*ontainer_name_<index>)。那么根据这个名字,我们就能判断一个容器是:新加入的、被删除的、要更新的。
# 在 compose 的 yaml 文件中,声明网络(network)和卷(volume) # 这些网络和卷会被自动创建,并且作为 compose 内部的资源使用 # 命名上也会自动加上前缀,类似:project_name_cb_var volumes: cb_var: # 空的 networks: cb_net: driver: bridge # 使用方式 # 这里使用的参数值,都是指向 yaml 文件内部声明的网络和卷 # 如果一定要使用外部的资源,需要单独声明 external couchbase: image: couchbase:community-7.6.2 volumes: - cb_var:/opt/couchbase/var networks: - cb_net
# 好像是自动 pull compose.yaml 文件内需要的镜像?
docker compose pull