Docker-Compos(未完成)

Docker-Compose

Docker Compose官方文档:Docker Compose overview | Docker Docs

1.简述

​ 部分应用由多个服务组件构成,也意味着要运行多个不同的容器。docker-compose 提供了使用一个(yaml)文件描述多个容器的容器定义和编排方式。

docker-compose的主体内容,就是命令行工具和对应项目的配置文件,docker-compose自身没有服务进程。

​ 项目的配置文件docker-compose.yml指定了那个项目要运行的容器的参数、环境变量,以及这些容器的健康检测和依赖关系等。

2.安装docker-compose

​ 在 Docker 旧版本中,docker-compose是独立插件,需要单独安装,使用单独命令docker-compose管理。在较新版本的 Docker 中,docker-compose 已经集成到 docker-cli 中,安装时同docker套件一同安装,且使用docker compose子命令管理compose。

# 发行版安装
yum install docker-compose-plugin

apt install docker-compose

#二进制安装 - github docker 官方项目
https://github.com/docker/compose/releases

3.概念

  • 项目(project)

    compose项目是一个项目目录,目录中应包含项目的compose文件和构建依赖文件。

  • compose文件

    compose文件是compose项目的核心文件,它使用yaml语言格式描述了该项目所需容器如何配置和运行。

  • service

    compose文件描述中services顶级标签所描述的容器叫做service,与Swarm无关。

4.compose定义文件:compose.yaml

​ 食用前请先自行简单了解yaml格式。yaml是一个相比json更易于书写的文本数据结构格式。

Compose文件撰写规范 官方文档:Compose Specification Overview | Docker Docs

一个docker run命令和docker-compose定义互相转换的项目

命令转compose:composerize - run to compose

compose转命令:decomnposerize - compose to run

​ 以下面kodbox的compose文件为例:

# cat docker-compose.yaml
version: '3.5'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env

  app:
    image: kodcloud/kodbox
    restart: always
    ports:
      - 80:80                       #左边80是使用端口,可以修改
    volumes:
      - "./site:/var/www/html"      #./site是站点目录位置,可以修改
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  redis:
    image: redis:alpine
    restart: always

​ 这是从kodbox的github项目中copy的,kodbox部署简单,用docker部署也简单,因此我认为适合作为初步了解compose文件的示例。这个compose文件有两个顶级标签,分别是version,和services

versionname

Version and name top-level elements | Docker Docs

version标签已经淘汰。version并不类似于gcc编译器的-std=选项,仅仅是一个声明,如果版本不匹配将会收到提示信息,而compose并不会按照标签指定的版本来检查和运行compose文件。

name标签用来在指定项目的名称,当未显式指定运行时的项目名称时用此作为名称。compose提供了重写项目名称的方法,且如果没有使用name顶级标签则项目使用目录为默认的名称。

services

services顶级标签下就是容器列表(说是列表,实际是字典)。

Services top-level elements | Docker Docs

services:
  <service_name>: # 名称顶级标签,容器在compose文件中的识别名,在未显式声明容器名称时使用该名称识别
    image: <NAME>[:TAG]
    build: <PATH>  # 不是使用现有镜像而是从项目中的Dockerfile构建镜像,此处指定的是构建项目路径
    container_name: <容器名>
    # 该容器名覆盖名称顶级标签中的定义,若不指定则容器管理显示的容器名格式为"项目名_容器名_#n"
    # 容器名是上面的识别名,运行的第多少个项目实例则n为多少
    hostname: <HOSTNAME>
    ports: 
      - [HOST:]CONTAINER[/PROTOCOL] # 端口分配的短语法
    volumes:
      - <挂载源>:<容器路径> # 挂载的短语法,用法同命令行
    environment:
      - <KEY>=<VAL>
    env_file:
      - <文件路径>
      # 根据文件提供环境变量
    command: <CMD> # 覆盖dockerfile中定义的CMD,可以用shell格式
    networks:
      # 网络列表
      - <网络>
      # 如果要指定详细参数,则使用下面这样的字典进行配置而不使用列表
      <网络>:
        aliases:
          - <别名> # 设置该网络下的别名
        ipv4_address: <IP> # 指定静态IP
        mac_address: <MAC>
        priority: <#n>
        # 网络分配优先级,在一个容器分配多个网络时,按照数值从大到小先后分配,默认值为0
    dns:
      - <DNSIP>
    restart: 自动重启策略
    depends_on: 
      - <容器>
    # 依赖容器,会在这些容器启动后才启动
network

​ 如果要在多个服务间使用同一网络,应当在network顶级标签中显示声明该网络,且顶级标签下可为网络指定配置。

Networks top-level elements | Docker Docs

network:
  - <网络名称>
  # 自动分配网络资源,使用bridge驱动,要指定参数则使用字典而不使用列表
  <网络名称>:
    driver: <网络类型>
    # 可指定为host 和 none
    internal: ture
    # 默认为外部网络,若指定internal为true则创建一个与外部隔离的网络
    ipam:
    # 使用ipam管理网络参数
      driver: <ipam驱动>
      config:
      - subnet: <网络地址>/<网络位长>
        ip_range: <自动分配范围>
        gtateway: <网关>
        aux_address: 
          <主机名>: <IP>
          # 网络驱动使用的辅助地址,作为主机名到IP的映射
    name: <网络名称>
    # 使用该名称创建docker网络
    external: true
    # 如果external指定为true,则这是一个生命周期由外部而非compose管理的网络
    # 除name外其他参数都不做数,compose不会主动创建该网络,若该网络不存在则返回错误信息
volumes

​ 若要在多个服务间使用同一存储卷,应当在volume顶级标签中下声明该卷。

docker文档 docker-compose services

volumes:
  <存储卷名称>:
    external: true
    # external指定为true,表示该卷生命周期由外部而非compose管理
    name: <卷名称>
    # 使用该名称创建存储卷
configs

Configs top-level elements | Docker Docs

5.docker-compose命令行

cli reference - docker compose | Docker Docs

​ 旧版的docker compose需要单独安装,并且其命令为docker-compose CMD形式,而新版compose则作为docker-cli插件,命令形式变为docker子命令docker compose CMD。以新版的docker compose进行演示。

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

-f, --file <docker-compose-file>   # 指定compose文件,可以使用多个-f选项指定多个文件
-p, --project-name <project-name>  # 指定项目名称
    --dry-run                      # 干燥运行,演习,检验而不实际执行

compose文件分析

docker compose config

格式分析、配置解析并以规范格式输出

docker compose config [OPTIONS] [SERVICE...]

`常用选项:
-q, --quiet     # 仅验证配置,不输出规范格式
    --services  # 打印所有服务名称,一个一行
    --images    # 打印所有镜像名,一个一行
    --volumes   # 打印所有存储卷,一个一行
    --profiles  # 打印所有profile,一个一行

项目生命周期管理

docker compose up

创建项目容器并启动容器

docker compose up [OPTIONS] [SERVICE...]

`常用选项:
-d, --detach    # detach模式:容器在后台运行
    --scale <service=NUM> # 将service扩充到指定规模(容器个数)

docker compose down

停止并删除项目容器

docker compose down [OPTIONS] [SERVICES]

`常用选项:

docker compose build

构建或重新构建compose文件中指定要构建的镜像

docker compose build [OPTIONS] [SERVICE...]

`常用选项:

docker compose create

为项目services创建容器而不启动

docker compose create [OPTIONS] [SERVICE...]

`常用选项:

docker compose start

启动service容器

docker compose start [SERVICE...]

docker compose stop

停止service容器

docker compose stop [OPTIONS] [SERVICE...]

`常用选项:

docker compose restart

重启service容器

docker compose restart [OPTIONS] [SERVICE...]

`常用选项:

docker compose rm

删除已停止的service容器

docker compose rm [OPTIONS] [SERVICE...]

`常用选项:

docker compose kill

强制停止service容器

docker compose kill [OPTIONS] [SERVICE...]

`常用选项:


查看compose信息

docker compose ls

列出运行中的compose项目

docker compose ls [OPTIONS]

`常用选项:

docker compose ps

根据compose文件列出容器

docker compose ps [OPTIONS] [SERVICE...]

`常用选项:

docker compose images

列出创建的容器使用的镜像

docker compose images [OPTIONS] [SERVICE...]

`常用选项:

docker compose port

显示端口绑定的公共端口

docker compose port [OPTIONS] SERVICE PRIVATE_PORT

`常用选项:

docker compose top

显示运行中的进程

docker compose top [SERVICES...]

docker compose logs

浏览容器的前台输出

docker compose logs [OPTIONS] [SERVICE...]

`常用选项:


service容器内执行命令

docker compose run

在一个service容器内执行一次性命令

docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]

`常用选项:

docker compose exec

在一个service容器中执行一个命令

docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...]

`常用选项:

posted @ 2025-03-09 17:58  好坏会红平个  阅读(42)  评论(0)    收藏  举报