当前位置 : 首页 » 文章分类 :  开发  »  Docker-Compose

Docker-Compose

Docker-Compose

Docker Compose
https://docs.docker.com/compose/

docker / compose
https://github.com/docker/compose

Compose安装
https://containerization-automation.readthedocs.io/zh_CN/latest/docker/compose/Compose%E5%AE%89%E8%A3%85/


docker compose 命令

从 Docker 20.10.0 版本开始,将 docker-compose 集成到了 docker 命令中,docker 命令内开始包含了 compose 子命令
compose 用于定义和运行由多个 docker 镜像组成的 service,可通过配置文件配置 service 由哪些镜像组成,然后通过一个命令一次性将这些 docker 镜像启动。

命令说明 - 《Docker — 从入门到实践》
https://yeasy.gitbook.io/docker_practice/compose/commands

指定配置文件

如果你使用默认配置文件名称,不需要显式指定 -f docker-compose.yml
如若需指定配置文件,必须在 docker-compose 后面指定,不能在 up 等子命令后面指定,否则无效;

up

构建,(重新)创建,启动,链接一个服务相关的容器。
docker compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
可以说,大部分时候都可以直接通过该命令来启动一个项目。

-d, --detach 后台启动
默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
当通过 Ctrl-C 停止命令时,所有容器将会停止。
如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。

--no-recreate 默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate 这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果需要的话,这样将会启动已经停止的容器。

指定 service
如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

链接的服务都将会启动,除非他们已经运行。

start
启动一个已经存在的服务容器。

stop

停止一个已经运行的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

ps

查看容器,在 docker-compose.yml 所在目录中执行 docker-compose ps 只查看此 compose.yml 描述的容器状态

# docker-compose ps
   Name                  Command               State                     Ports
-------------------------------------------------------------------------------------------------
zookeeper_1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp
zookeeper_2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp, 2888/tcp, 3888/tcp
zookeeper_3   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp, 2888/tcp, 3888/tcp

当然也可以直接 docker ps 查看所有容器的状态

# docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                        NAMES
936ca6a90d3f        zookeeper:3.4.10                "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes       2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   zookeeper_1
475f0ec7ef1b        zookeeper:3.4.10                "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes       2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp   zookeeper_2
d8b28308b6eb        zookeeper:3.4.10                "/docker-entrypoint.…"   27 minutes ago      Up 27 minutes       2888/tcp, 3888/tcp, 0.0.0.0:2183->2181/tcp   zookeeper_3

安装 docker-compose

1、下载二进制可执行文件,命名为 docker-compose

sudo mv curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

2、sudo chmod +x /usr/local/bin/docker-compose

3、查看版本,有输出就是安装成功

$ docker-compose -v
docker-compose version 1.26.2, build eefe0d31

Install Docker Compose
https://docs.docker.com/compose/install/


docker-compose.yml 配置文件

compose 文件包含了 4 个顶级键:
version:指定文件规范版本
services:指定要操作的容器
networks:指定共用的网络配置
volumes:指定共用的存储配置

可以使用 docker-compose config 验证和查看待操作的Compose文件

docker-compose.yml 格式版本和 docker 兼容对照表

compose配置文件格式版本 Docker版本
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

Compose and Docker compatibility matrix
https://docs.docker.com/compose/compose-file/

depends_on

解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web

version: '3'

services:
  web:
    build: .
    depends_on:
      - db
      - redis

  redis:
    image: redis

  db:
    image: postgres

注意:web 服务不会等待 redis db 「完全启动」之后才启动。


docker compose 网络

默认情况下,Compose 会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。

默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml所在目录的名称。如需修改工程名称,可使用–project-name标识或COMPOSE_PORJECT_NAME环境变量。

举个例子,假如一个应用程序在名为myapp的目录中,并且docker-compose.yml如下所示:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

当我们运行 docker-compose up时,将会执行以下几步:

创建一个名为myapp_default的网络;
使用web服务的配置创建容器,它以“web”这个名称加入网络myapp_default;
使用db服务的配置创建容器,它以“db”这个名称加入网络myapp_default。

Networking in Compose
https://docs.docker.com/compose/networking/

network_mode 使用默认 docker 网络

等于 docker 命令的 --network 参数

network_mode: "host" # 使用主机网络
network_mode: "bridge"
network_mode: "none"

network_mode
https://docs.docker.com/compose/compose-file/#network_mode


上一篇 Docker-安装

下一篇 Docker-常用命令

阅读
评论
1.5k
阅读预计6分钟
创建日期 2025-08-05
修改日期 2025-08-05
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论