一站式掌握 Docker Compose:部署多容器应用

1.docker-compose

1.1.什么是docker-compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

它使用一个 YAML 格式的配置文件(通常称为 docker-compose.yml)来配置应用程序的服务。通过这个配置文件,可以指定每个服务使用的 Docker 镜像、环境变量、端口映射、数据卷挂载等信息,然后使用一个命令来创建并启动所有服务。

主要有三个步骤:
①使用 Dockerfile 定义应用程序的环境和依赖。
②使用 docker-compose.yml 定义构成应用程序的服务和它们之间的关系。
③使用 docker-compose up 命令来启动并运行整个应用程序。

使用 Docker Compose 可以方便地一键启动、停止和管理整个应用程序的多个相关容器,简化了复杂应用的部署和管理过程,提高了开发和运维的效率。

以下是 Docker Compose 的一些主要特点和用途:

  1. 单机多容器应用定义:Docker Compose 允许您在单个 YAML 文件中定义一个多容器应用的所有服务。
  2. 环境隔离:通过定义不同的环境配置,可以在隔离的环境中运行相同的服务。
  3. 简化启动过程:通过一条命令即可启动所有服务,不需要逐一启动每个容器。
  4. 服务管理:可以启动、停止、重建服务,甚至可以查看运行服务的日志。
  5. 依赖管理:Docker Compose 会根据配置文件中的依赖关系,按顺序启动服务。
  6. 环境变量管理:可以在配置文件中设置环境变量,便于在不同环境中配置应用程序。
  7. 卷管理:可以定义用于持久化数据的卷,这些卷可以在服务之间共享。

**docker compose官网地址:**https://github.com/docker/compose/releases?page=3

1.2.安装

对于 Linux 系统

1.2.1.安装 Docker

确保你的系统上已经安装了 Docker。可以通过以下命令来安装 Docker:

对于 Ubuntu/Debian 系统:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

对于 CentOS 系统:

#安装 `yum-utils`  软件包(提供`yum-config-manager` 实用程序)并设置**稳定的**存储库。
sudo yum install -y yum-utils

# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 使用国内镜像 , 国外连接不上
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io

启动 docker

docker version  # 查看安装版本 
systemctl start docker		# 启动
systemctl enable docker		# 设置开机启动

1.2.2.远程仓库连接不上

error pulling image configuration: download failed after attempts=6: dial tcp 74.86.17.48:443: connect: connection refused

这个错误通常意味着Docker在尝试从远程仓库拉取镜像配置时遇到了网络问题。

可以通过设置国内镜像来解决

1.创建/etc/docker目录
sudo mkdir -p /etc/docker
2.创建docker镜像配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'

 {
  "registry-mirrors": [
          "https://ox288s4f.mirror.aliyuncs.com",
          "https://registry.docker-cn.com",
          "http://hub-mirror.c.163.com",
          "https://mirror.ccs.tencentyun.com"
  ]
}
EOF
3.重启
sudo systemctl daemon-reload
sudo systemctl restart docker

或者

sudo service docker restart

1.2.3.下载 Docker Compose

安装docker-compose ( 现在上不去 )

**官网:**https://docs.docker.com/compose/install/standalone/#on-linux

1.下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

请确保将 v2.18.0 替换为你想要的 Docker Compose 版本,

可以使用上面的命令在服务器下载docker-compose的安装文件,但是这种方式比较慢,需要一定的时间

可以访问下面的地址使用外网下载好上传到服务器上

https://github.com/docker/compose/releases/download/v2.18.0/docker-compose-linux-x86_64

下载好之后 上传到系统 /usr/local/bin 目录 并改名为 docker-compose

2.增加Docker Compose 可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
3.验证:

使用测试并执行docker-compose命令

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

2.配置文件

docker-compose.yml 是一个 YAML 文件,用于定义多容器 Docker 应用程序的配置。

2.1.基本结构

一个 docker-compose.yml 文件通常包含以下部分:

  1. 版本(version):指定 Compose 文件的格式版本。这是必须的,因为它告诉 Compose 使用哪个版本的 API 来解析文件,因为不同版本的 Compose 支持不同的特性和选项。
  2. 服务(services):定义应用程序中要运行的服务(容器)。这是文件中最关键的部分,因为它描述了每个容器的配置。
  3. 网络(networks)(可选):定义网络设置,允许容器之间进行通信。如果未指定,Compose 会自动创建一个默认网络, 可以配置如网络类型(bridge、overlay 等)和网络名称。
  4. 卷(volumes)(可选):定义卷设置,用于将数据持久化到宿主机或跨容器共享数据。
  5. 配置( configs )(可选,自 3.3 版本起可用):定义配置文件,这些文件可以在多个服务之间共享。
  6. 机密( secrets )(可选,自 3.1 版本起可用):定义敏感数据,如密码或证书,这些数据在运行时会被注入到服务中。

2.2.文件结构示例

version: '3'  # 指定 Compose 文件格式版本

services:
  web:           # 定义一个名为 web 的服务
    image: nginx:latest  # 使用 nginx:latest 镜像
    ports:
      - "80:80"  # 将容器内的 80 端口映射到宿主机的 80 端口
    volumes:
      - ./web:/usr/share/nginx/html  # 将当前目录下的 web 文件夹挂载到容器的 /usr/share/nginx/html
    networks:
      - my-network  # 将服务连接到 my-network 网络

  db:            # 定义一个名为 db 的服务
    image: postgres:latest  # 使用 postgres:latest 镜像
    environment:
      POSTGRES_DB: mydb  # 设置环境变量,定义数据库名
      POSTGRES_USER: user
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data  # 将 db-data 卷挂载到容器内数据存储位置
    networks:
      - my-network

networks:
  my-network:  # 定义一个名为 my-network 的网络

volumes:
  db-data:     # 定义一个名为 db-data 的卷

2.3.版本(version)

指定 Compose 文件的版本号,不同版本的 Docker 可能支持不同的 Compose 文件格式版本。这有助于确保兼容性。

version: '3'

Version 1:此版本是最早的Docker Compose版本,使用YAML v1语法。它提供了最基本的功能,适用于简单的应用场景。

Version 2:此版本引入了一些新功能,如服务(service)和网络(network),并使用YAML v2语法。它支持容器的扩展性、网络连接和卷挂载等特性。

Version 3:这是当前广泛使用的版本,它引入了更多功能和选项。它支持服务发现、密钥管理、配置文件和扩展性等特性。此版本可以通过Docker Swarm进行部署。

除了上述常见的版本之外,还有一些其他的版本,如Version 2.1、Version 2.2、Version 3.1等,它们在常规版本的基础上添加了一些额外的功能和选项。

2.4.服务(services)

services 部分下,可以定义多个服务,每个服务都有自己的配置。以下是服务配置中常用的选项:

2.4.0.service-name服务名

service-name : 每个服务都有一个唯一的名称,用于在 Compose 中引用。

services:
  mysql:

2.4.1.image 镜像

image:指定容器使用的镜像。如果镜像不存在,Compose 会尝试从远程仓库拉取。

    image: mysql:8.0.31

2.4.9.container_name容器名称

container_name: 为容器指定一个名称。

    container_name: mysql

2.4.2.build 构建路径

build:指定 Dockerfile 的路径,用于构建自定义镜像。配置构建时使用的上下文路径。如果提供了 imagebuild,则 build 优先。

	build:
  		context: .
 		dockerfile: Dockerfile

2.4.3.ports 映射端口

ports:映射容器端口到宿主机。

    ports:
      - "3307:3306"

2.4.4.volumes 挂载卷

volumes:挂载宿主机路径或命名卷到容器内。

    volumes:
      # 数据挂载
      - /docker/mysql/data/:/var/lib/mysql/
      # 配置挂载
      - /docker/mysql/conf/:/etc/mysql/conf.d/

2.4.5.environment设置环境变量

environment:设置容器内的环境变量。

    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: xxxxxx
      # 初始化数据库(后续的初始化sql会在这个库执行)
      MYSQL_DATABASE: db_name

2.4.5.networks 网络

networks:将容器加入指定网络。

	networks:
  		- front_net

2.4.6.depends_on依赖

depends_on:定义服务之间的依赖关系,确保依赖的服务先启动。

	depends_on:
  		- db
  		- redis

2.4.7.command指定

command:覆盖容器启动时默认执行的命令。

    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1

2.4.8.restart重启策略

restart: 定义容器退出时的重启策略。

restart: always

2.4.10.entrypoint入口点

entrypoint: 覆盖容器的入口点。

entrypoint: ["sh", "-c"]

2.4.11.healthcheck健康检查

healthcheck: 定义健康检查命令和参数。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 30s
  timeout: 10s
  retries: 3

2.4.12.元数据

labels: 为容器添加元数据。

labels:
  com.example.description: "This service is a web application"
privileged: true
network_mode: "host"

2.5.网络(networks)

networks 部分中,可以定义应用的网络。这些网络在 services 部分被引用。网络配置可以指定驱动类型和其他网络选项。

  • driver:指定网络驱动程序,如 bridge(默认)或 host

  • ipam:配置 IP 地址分配策略。

networks:
  default:
    ipam:
      config:
        - subnet: 172.18.0.0/16

2.6.卷(volumes)

volumes 部分中,可以定义或命名卷,这些卷可以在不同的服务之间共享数据。

  • driver:指定卷驱动程序,如 local(默认)。
  • driver_opts:设置卷驱动程序的选项。
volumes:
  data:
    driver: local

2.7.configs 配置文件

configs : 引用配置文件

configs:
  - my_config

2.8.secrets 机密

secrets: 引用 Docker secrets。

secrets:
  - my_secret

3.常用指令

3.1. 启动和停止服务

  • docker-compose up:启动所有服务。可以添加-d参数在后台运行。

  • docker-compose start:启动已经存在的服务容器。

  • docker-compose stop:停止正在运行的容器,可以通过docker-compose start再次启动。停止并重新启动服务

    • docker-compose stop && docker-compose start
      
  • docker-compose restart:重启项目中的服务。

  • docker-compose kill: 强制终止容器。这个命令用于立即停止容器的运行,通常在正常关闭命令无效时使用。

3.2. 构建和重构服务

  • docker-compose build:构建(或重新构建)项目中的服务容器。如果服务镜像不存在,则构建镜像并启动服务。
  • docker-compose up --force-recreate:强制重新创建容器并启动服务。

3.3. 查看状态和信息

  • docker-compose ps:列出项目中所有的容器。
  • docker-compose logs:查看服务容器的输出日志。可以通过-f参数跟踪日志输出。
  • docker-compose config:验证docker-compose.yml文件配置,当配置正确时,不输出任何内容,当文件配置错误时,输出错误信息。

3.4. 操作容器镜像

  • docker-compose down:停止和删除容器、网络、卷、镜像(可选)。可以通过--rmi--volumes选项删除镜像和卷。
  • docker-compose rm:删除所有(停止状态的)服务容器。可以使用-f--force参数强制删除非停止状态的容器。
  • docker-compose pull : 拉取服务依赖的镜像。
  • docker-compose push : 推送服务的镜像。
  • docker-compose top : 显示容器内的进程列表。

3.5. 扩容缩容

  • docker-compose scale:设置指定服务运行的容器个数,通过service=num的参数来设置数量。

    docker-compose up --scale [SERVICE]=NUM
    

3.6.执行指令

  • docker-compose exec:在指定服务容器上执行一个命令。例如,docker-compose exec nginx bash可以登录到nginx容器中。

    docker-compose exec [service_name] [command]
    

    进入容器内部

    docker-compose exec [service_name] /bin/sh
    
  • docker-compose run:在指定服务上执行一次性命令。这个命令会启动一个新的容器来执行指定的命令,然后停止容器。

3.7. 其他常用指令

  • docker-compose pause:暂停一个或多个服务容器。

  • docker-compose unpause:恢复一个或多个服务容器。

  • docker-compose help : 显示命令帮助信息。

  • docker-compose version : 显示 Docker Compose 的版本信息。

  • docker-compose plugin : 管理 Docker Compose 插件。

  • docker-compose inspect : 查看服务的详细信息

  • docker-compose create network : 创建网络

3.8.注意事项

  • 所有上述命令(除非特别说明)都需要在包含docker-compose.yml文件的目录下执行。
  • 可以通过-f--file选项指定Compose模板文件,如果文件名不是docker-compose.yml
  • 使用Docker Compose时,请确保已经安装了Docker Compose,并且Docker服务正在运行。
  • 使用命令时,可以通过添加 --help 参数来获取每个命令的详细帮助信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值