docker-compose

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

Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)**

Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境(使用Dockerfile构建webAPP)。

  • 使用 docker-compose.yml 定义构成应用程序的服务(webAPP、db、Redis等的镜像),这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

docker-compose命令

  • docker-compose up,构建并运行容器。

    • docker-compose up -d,构建,后台运行容器

  • docker-compose pull/push,拉取/推送服务镜像

  • docker-compose down,停止和删除容器、网络、卷、镜像。

  • docker-compose ps,查看运行的所有容器

  • docker-compose ps。查看容器日志

  • docker-compose build,构件或重新构建服务

  • docker-compose start/stop,运行/停止容器

  • docker-compose rm,删除所有停止的容器

docker-compose安装

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

运行以下命令以下载 Docker Compose 的当前稳定版本:

$ 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

要安装其他版本的 Compose,请替换 1.24.1。

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

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

创建软链:

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

测试是否安装成功:

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

docker-compose.yml配置

Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分

  • version:指定本 yml 按照哪个版本的 compose 制定

  • services;指定服务。多个容器集合

  • build:使用路径下的Dockerfile构件镜像

    • context:上下文路径。

    • dockerfile:指定构建镜像的 Dockerfile 文件名。

    • args:添加构建参数,这是只能在构建过程中访问的环境变量。

    • labels:设置构建镜像的标签。

    • target:多层构建,可以指定构建哪一层。

  • command:覆盖容器启动的默认命令。

  • container_name:指定自定义容器名称,而不是生成的默认名称。

  • depends_on:设置依赖关系。docker-compose up启动时,先启动 依赖服务,再 主服务,停止也是先停止 依赖服务,再停止 主服务

  • entrypoint:覆盖容器默认的 entrypoint。

  • environment:添加环境变量。可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False

  • expose:暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数

  • image:指定容器运行的镜像

  • logging:服务的日志记录配置。

    • driver:指定服务容器的日志记录驱动程序,默认值为json-file。有三个值可选,json-file,syslog,none

    # 仅在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小
    logging:
    driver: json-file
    options:
      max-size: "200k" # 单个文件大小为200k
      max-file: "10" # 最多10个文件
  • networks,配置容器连接的网络

    • aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。

  • restart:重启策略

    • no:是默认的重启策略,在任何情况下都不会重启容器。

    • always:容器总是重新启动。

    • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。

    • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

  • volumes:将主机的数据卷或着文件挂载到容器里。

  • ports:主机、容器的端口映射

version: '1.24.1'
services:
mysql:
  image: mysql:5.7
  restart: unless-stoppped
  environment:
    TZ: 'Asia/Shanghai'
    MYSQL_DB: test
    MYSQL_USER: root
    MYSQL_PASSWORD: 123456
  volumes:
    - '/home/mysql/data:/var/lib/mysql/data'
  ports:
    - '3306:3306'
  net-works:
    default:
      aliases:
        - mysql
redis:
  image: redis:6.0
  restart: unless-stoppped
  environment:
    TZ: 'Asia/Shanghai'
  ports:
    - '6379:6379'
  net-works:
    default:
      aliases:
        - redis
webapp:
  build:
    context: ./dir
    target: webapp
  depends_on:
    - mysql
    - redis
  environment:
    TZ: 'Asia/Shanghai'
  ports:
    - '8080:8080'
  net-works:
    default:
      aliases:
        - webapp
net-works:
default:          
posted @ 2022-02-16 22:31  hjy1995  阅读(158)  评论(0编辑  收藏  举报