技术博客 技术博客
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • JAVA
  • 仓颉
  • 设计模式
  • 人工智能
  • Spring
  • Mybatis
  • Maven
  • Git
  • Kafka
  • RabbitMQ
  • RocketMQ
  • Redis
  • Zookeeper
  • Nginx
  • 数据库套件
  • MySQL
  • Elasticsearch
  • MongoDB
  • Hadoop
  • ClickHouse
  • Hbase
  • Hive
  • Flink
  • Flume
  • SQLite
  • linux
  • Docker
  • Jenkins
  • Kubernetes
  • 工具
  • 前端
  • AI
GitHub (opens new window)
  • Docker

    • Docker 概念、命令及Dockerfile介绍
    • Docker-Compose 命令及基本使用
      • 简介
      • 安装与卸载
      • 命令
      • Compose文件编写
        • 示例1
        • 示例2
        • Compose 指令
        • 命令选项
        • 命令使用说明
        • up
        • down
        • exec
        • ps
        • restart
        • rm
        • start
        • stop
        • top
        • pause,unpause
        • logs
    • Docker私有库的开发
  • Jenkins

    • Jenkins(一) 持续集成及Jenkins介绍
    • Jenkins(二) Jenkins安装和环境配置
    • Jenkins(三) Jenkins用户管理及凭证
    • Jenkins(四) Maven安装和配置
    • Jenkins(五) Jenkins构建Maven项目
    • Jenkins(六) Jenkins项目构建细节
    • Jenkins(七) Jenkins+Docker+SpringCloud微服务持续集成(上)
    • Jenkins(八) Jenkins+Docker+SpringCloud微服务持续集成(下)
  • Kubernetes

    • kubernetes(一) 概念及介绍
    • kubernetes(二) 集群环境搭建
    • kubernetes(三) 资源管理
    • kubernetes(四) Namespace、Pod、Lable、Deployment、Service 的资源介绍
    • kubernetes(五) Pod 介绍及配置
    • kubernetes(六) Pod 生命周期
    • kubernetes(七) Pod 调度
    • kubernetes(八) Pod 控制器详解
    • kubernetes(九) Service介绍、类型及使用
    • kubernetes(十) Ingress介绍及使用
    • kubernetes(十一) 数据存储(挂载卷管理)
    • kubernetes(十二) 安全认证
    • kubernetes(十三) DashBoard
  • linux

    • linux 创建用户及权限操作
    • Linux 磁盘操作相关命令
    • Linux 文本数据处理工具awk命令
    • Linux 定时任务
    • Linux 命令总结
    • Linux 22端口对外攻击解决
目录

Docker-Compose 命令及基本使用

# 简介

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,帮助定义和运行多个 Docker 容器的应用,其前身是开源项目 Fig。所谓编排就是能把一个项目的依赖(如 mysql,redis,服务间的依赖等)按照有序的方式启动容器

DockerFile 可以让用户很方便的定义一个单独的应用容器,然而在日常工作中们经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 web 项目,除了 web 服务容器本身,往往还需要再加上后端的数据库服务器容器,甚至还包括负载均衡容器等。

Compose 恰好满足了这样的需求,它允许通过一个单独的 docker-compose.yml 模板文件,来定义一组相关联的应用容器为一个项目。

Compose 中有两个重要的概念

  1. 服务(service),一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  2. 项目(project),由一组关联的应用容器组成的一个完整业务单元,再 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以再其上利用 Compose 来进行编排管理。

# 安装与卸载

安装的话,可以安装 Docker Desktop ,它包含了 Docker 以及 Compose 和 K8s,也可以单独安装,但建议先了解清楚官方对 Compose 的一些安装限制。官方地址 (opens new window)

linux 安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
1
2
3

# 命令

命令 描述
version 版本目前 4 以下的都可以写,如 3.9,3.8 等,最好保持和 docker 版本兼容 (opens new window)
services 可以里面描述你的所有服务,以及依赖关系等
image 指定为镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像
ports 指定与宿主机与容器映射的端口,是一个数组,每个数组的元素建议用字符形式,如 "80:80"
volumes 挂载路径设置,类型为数组,可以挂载多个,在制作容器的时候可以显示的声明挂载路径,也可以在容器运行时直接使用 -v 命令。
networks 配置容器连接的网络 docker network ls 查看网络列表, docker network inspect <container id> 可以查看对应网络的配置
environment 设置环境变量。你可以使用数组或字典两种方式
env_file 从文件中获取环境变量,可以为单独的文件路径或列表,文件内必须是字典方式编写
command 覆盖容器启动后默认执行的命令
depends_on 解决容器的依赖、启动先后的问题,填写的值为 服务名,会等依赖的服务启动一定程度才启动自己
healthcheck 通过命令检查容器是否监控运行
sysctls 配置容器内核参数,如 ES 等都需要修改内核的环境参数
ulimits 指定容器的 ulimits 限制值,如 ES、Clickhouse 会有修改需求
build 用来将指定 Dockerfile 打包成对应镜像,然后再运行该镜像

这些命令其实就类似于我们在 Docker 中启动一个容器的命令。

# Compose 文件编写

# 示例 1

### 版本
version: "3.2"

services:
  ### 服务名称
  tomcat:
    ### 指定容器的名称 相当于 --name
    container_name: tomcat_1
    ### 使用哪个镜像 相当于 docket run image
    image: tomcat:8.0-jre8
    ### 指定宿主机与容器端口的映射 相当于 -p
    ports:
      ### 宿主机:容器
      - "8080:8080"
    ### 宿主机与容器的数据共享 挂载目录 相当于 -v
    volumes:
      ### 方式1:指定绝对明确(绝对路径)的挂载目录
      - /home/server:/user
      ### 方式2:声明了自定创建卷名的变量
      - tomcatwebapps:/user
    ### 代表当前服务处于那个网络,作用是网络隔离用,会把相网络名称相同的容器的网段统一。相当于 --network
    networks:
      - group1

  mysql:
    image: mysql:5.7.32
    container_name: mysql
    ports:
    - "3306:3306"
    volumes:
    - mysqldata:/var/lib/mysql
    - mysqlconf:/etc/mysql
    environment:
      -MYSQL_ROOT_PASSWORD=root
    networks:
      group1


### 描述 挂在卷里的变量
volumes:
  ### 指定变量 tomcatwebapps,如果不写 external,默认会是 docker-compose.yml 所在当前文件夹的名称(会自动创建)
  tomcatwebapps:
    ### 使用自定义卷毛
    external:
      ### true 确定使用指定卷名,注意:一旦使用外部自定义卷名,启动服务之前必须手动创建 docker volume create 卷名
      false
  mysqldata:
  mysqlconf:

### 定义服务用到的网络
networks:
  ### 定义上面的服务用到的网络的名称,默认是驱动属于 bridge,自定义的网络名称 group1,在实际中会变为 项目名(或所在文件目录名)
  group1:
    ### 使用外部指定的网络,为 true 就标识网络必须存在
    external:
      ### docker network create -d bridge 网络名称
      true
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

# 示例 2

### 指定版本,版本的关系和Docker 引擎有关
### https://docs.docker.com/compose/compose-file/compose-file-v3/#profiles 版本关系及说明
version: '3.7'

### 指定服务
services:
  ### 服务名称 唯一
  monitor-web-server-service:
    ### 构建镜像的项目路径
    build:
      ### 指定上下文路径,默认是微服务项目的根目录
      context: ./monitor-web/monitor-web-server/
      ### 指定
      dockerfile: monitor-web-server-service
    ### 指定镜像名称
    image: monitor-web-server-service
    ### .env的环境变量
    env_file:
      - ./.env
    ### 网络配置
    networks:
      - internal_access
      - external_access ### db access

  monitor-web-socket-service:
    build: ./monitor-web/monitor-web-socket/monitor-web-socket-service
    image: boboweike/monitor-web-socket-service
    env_file:
      - ./.env
    ### 依赖的项目,启动的时候根据依赖关系定义启动顺序
    depends_on:
      - monitor-web-server-service
    networks:
      - internal_access
      - external_access ### db access

  monitor-gateway:
    build: ./monitor-gateway
    image: boboweike/monitor-gateway
    ### 设置内部和外部端口
    ports:
    - 80:80
    env_file:
      - ./.env
    ### 依赖的项目,启动的时候根据依赖关系定义启动顺序
    depends_on:
      - monitor-web-server-service
      - monitor-web-server-service
    networks:
      - internal_access
      - external_access
    ### 心跳检查
    healthcheck:
      ### 访问 monitor-gateway 网关的命令
      test: [ "CMD","curl","-f","http://localhost:80" ]
      ### 间隔时间
      interval: 1m30s
      ### 超时时间
      timeout: 10s
      ### 重试次数
      retries: 3

  mysql:
    image: mysql:5.7.32
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - mysqldata:/var/lib/mysql
      - mysqlconf:/etc/mysql
    env_file:
      - ./mysql.env
    networks:
      - external_access
    ### 修改内核参数,也可以是数组的方式
    sysctls:
      net.core.somaxconn: 1024
      net.ipv4.tcp_syncookies: 0
    ### 指定容器的 ulimits 限制值,例如 ,
    ulimits:
      ### 指定最大进程数为 65535
      nproc: 65535
      ### 指定文件句柄数为
      nofile:
        ### 软限制 200000(软限制,应用可以随时修改,不能超过硬限制)
        soft: 20000
        ### 硬限制(系统硬限制,只能root用户提高)
        hard: 40000


  myaccount-service:
    build:
      context: ./frontend
      dockerfile: myaccount/Dockerfile
    image: boboweike/myaccount-spa
    networks:
      - internal_access


networks:
  internal_access:
    internal: true
  external_access:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

# Compose 指令

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到影响。

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
1

# 命令选项

  • -f -> --file FILE 指定使用的 Compose 模板把文件,默认为 docker-compose.yml,可以多次指定。
  • -p -> --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名
  • --x-networking 使用 Docker 可插拔网络后端特性
  • --verbose 输出更多调试信息。
  • -v -> --version 打印版本并退出。

# 命令使用说明

# up

docker-compose up [options] [SERVICE...]
1
  • 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
  • 连接的服务都将会被自动启动,除非已经处于运行状态
  • 大部分的时候都可以直接通过该命令来启动一个项目。
  • 默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
  • 当通过 Ctrl-c 停止命令时,所有容器将会停止
  • 如果使用 docker-compose up -d,将会再后台启动并运行所有的容器,一般推荐生产环境下使用该选项。
  • 默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。

# down

docker-compose down
1

此命令将会停止 up 命令所启动的容器,并移除网络

# exec

docker-compose exec 服务名
1

进入指定的容器

# ps

docker-compose ps [options] [SERVICE...]
1

列出项目中目前的所有容器。

  • -q ,可以以打印容器的 ID 信息

# restart

docker-compose restart [options] [service...]
1

重启项目中的服务,选项 -t 指定重启前停止容的超时时间(默认 10s)

# rm

docker-compose rm [options] [service...]
1

删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

  • -f 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
  • -v 删除容器所挂载的数据卷。

# start

docker-compose start [service...]
1

启动已经存在的服务容器

# stop

docker-compose stop [options] [service...]
1

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

  • -t 停止容器的超时时间(默认为 10s)

# top

docker-compose top
1

查看各个服务容器内运行的进程。

# pause,unpause

docker-compose pause [service...]
1

暂停处于运行中的服务。

docker-compose unpause [service...]
1

恢复处于暂停状态中的服务。

# logs

docker-compose logs [service...]
1

查看某个服务的日志

上次更新: 6/11/2025, 4:10:30 PM
Docker 概念、命令及Dockerfile介绍
Docker私有库的开发

← Docker 概念、命令及Dockerfile介绍 Docker私有库的开发→

Theme by Vdoing | Copyright © 2023-2025
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式