简介
Docker-Compose,是基于 Docker 容器的指令编排技术,当你的某个应用需要用到数个容器时,可以使用 Docker-Compose,一键拉取、启动所有所需的 Docker 容器,非常方便
简单来说,Docker 的命令是作用到单个 Docker 容器的,Docker-Compose 是作用到一批 Docker 容器的
本文介绍如何配置 Docker-Compose 环境
Windows
Windows 系统最简单的方式,是下载一个 Dockers-Desktop(docs.docker.com/desktop/set…)
安装该软件,会在 Windows 系统中装一个 Linux 子系统(wsl),在这里面就配备了 Docker-Compose 环境
如下
Linux
配置 Docker-Compose 的前提,是需要有 Docker 环境,安装 Docker 参考下面这篇博客
敲下面的命令,下载 Docker-Compose 命令,并放到环境变量中
curl -SL https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
设置可执行权限
chmod +x /usr/local/bin/docker-compose
这就装好了,试下
docker-compose -v
如下
另外
以上的单独的 Docker-Compose 是旧版的使用方式,docker-compose 命令作为单独的可执行程序进行配置
新版本的 Docker,内置了 Docker-Compose,敲下面的命令验证你的 Docker 是否有 Docker-Compose 环境
docker compose version
如下
使用
接下来使用一波,并整理一下 Docker-Compose 的一些命令
以博主之前介绍过的个人博客网站 Halo 为例(官网:docs.halo.run/getting-sta…)
将 Halo 提供的 Docker-Compose 文件(docker-compose.yml)下载下来
该文件中定义了所需要的容器、容器使用的镜像和版本、挂载的数据卷、开放的端口、环境变量等信息
这就是所谓的编排
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo-pro:2.23
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:
在文件所在目录,敲 docker compose up -d 启动文件中配置的容器
敲 docker compose ps 查看容器情况,文件中定义了两个容器,如下,都跑起来了
敲 docker compose logs 查看容器的日志信息,和 docker 命令一样
访问一下,能访问到应用界面,没得问题
命令列表
以下命令,docker-compose 与 docker compose 可等同使用
# 拉取镜像
docker compose pull
# 启动
docker compose up -d
# 停止容器,并删除容器,不会删除挂载的数据卷
docker compose down
# 查看状态
docker compose ps
# 实时看日志,所有容器合并的日志
docker compose logs -f
# 服务名,即 docker-compose.yml 中定义的某个名称的容器
docker compose exec 服务名 bash
# 重启所有容器
docker compose restart