说明

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

Compose 使用的三个步骤

  • 使用 Dockerfile 定义应用程序的环境
  • 使用 docker-compose.yaml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  • 最后,执行 docker compose up 命令来启动并运行整个应用程序
  • docker compose up -d 启动并于后台运行

注意

  • docker-compose up -d:这是 Docker Compose 的旧版命令格式,适用于使用 Docker Compose 作为单独的可执行文件安装的情况,通常是较早的 Docker 环境或手动安装 Docker Compose 时。这里的 docker-compose 是一个独立的命令行工具。
  • docker compose up:这是 Docker 20.10.0 及以后版本中引入的新版命令格式,随着 Docker Desktop 和 Docker Engine 集成了 Docker Compose 作为子命令。这意味着你不再需要单独安装 Docker Compose,直接通过 docker 命令即可调用 Compose 功能。

安装

Linux

从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases

1
2
# 下载 Docker Compose 的当前稳定版本。要安装其他版本的 Compose,请替换 1.24.1
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

1
$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

1
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

1
2
$ docker-compose --version
cker-compose version 1.24.1, build 4667896b

注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。

macOS

Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。Docker 安装说明可以参阅 MacOS Docker 安装

windows PC

Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Windows 用户不需要单独安装 Compose。Docker 安装说明可以参阅 Windows Docker 安装

示例

docker-compose.yml

docker compose up -d //根据 docker-compose.yml ,创建服务和镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '2'
services:
jimureport-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: root
restart: always
container_name: jimureport-mysql
image: jimureport-mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
ports:
- 3307:3306

jimureport:
build:
context: .
restart: always
container_name: jimureport
image: jimureport
ports:
- 8085:8085

jimureport-mysql 服务

db 目录下有 Dockerfile 和 jimureport.mysql5.7.create.sql 文件

  • Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    FROM mysql:8.0.19

    MAINTAINER jeecgos@163.com

    ENV TZ=Asia/Shanghai

    RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    COPY ./jimureport.mysql5.7.create.sql /docker-entrypoint-initdb.d
  • jimureport.mysql5.7.create.sql

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    CREATE database if NOT EXISTS `jimureport` default character set utf8mb4 collate utf8mb4_unicode_ci;
    use `jimureport`;

    /*
    Navicat Premium Data Transfer

    Source Server : mysql5.7
    Source Server Type : MySQL
    Source Server Version : 50727
    Source Host : 127.0.0.1:3306
    Source Schema : jimureport

    Target Server Type : MySQL
    Target Server Version : 50727
    File Encoding : 65001

    Date: 11/10/2021 17:48:45
    */

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;

    # 建表语句和数据

jimureport

当前目录是SpringBoot 根目录,有 Dockerfile文件

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER jeecgos@163.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /jimureport

WORKDIR /jimureport

EXPOSE 8085

ADD ./target/jimureport-example-1.4.jar ./

CMD java -DMYSQL-HOST=jimureport-mysql -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jimureport-example-1.4.jar

部署MongoDB

  1. 编写docker-compose.yml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// docker-compose.yml
// command:启动是的命令行参数,添加认证auth
version: '2'
services:
mongodb:
image: mongo
restart: always
ports:
- 27017:27017
volumes:
- "./data/configdb:/data/configdb"
- "./data/db:/data/db"
command: mongod --auth
environment:
- MONGO_INITDB_ROOT_USERNAME=root #初始化管理员用户名和密码
- MONGO_INITDB_ROOT_PASSWORD=123456
tty: true
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
  1. 运行 docker-compose up -d生成容器并后台启动