Docker-Compose
Docker-Compose
Docker Compose
https://docs.docker.com/compose/
docker / compose
https://github.com/docker/compose
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-常用命令
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: