自学内容网 自学内容网

【docker集群应用】Docker Compose

Docker Compose

Docker Compose 是 Docker 官方提供的一个工具,旨在简化多容器 Docker 应用程序的创建、配置和运行过程。通过 YAML 格式的配置文件(默认为 docker-compose.yml),用户可以轻松定义多个容器、它们之间的依赖关系、网络配置、环境变量等,并使用 docker-compose 命令来管理这些容器。

Docker Compose 文件结构

Docker Compose 文件通常包含以下关键部分:

  • version: 指定使用的 Compose 文件格式版本。

  • services: 定义一组服务,每个服务都对应一个或多个容器。

    • 服务名称: 自定义的服务标识。
    • image: 指定容器使用的镜像。
    • container_name: 可选,为容器指定一个名称。
    • environment: 定义环境变量。
    • ports: 端口映射,将主机的端口映射到容器的端口。
    • networks: 指定容器使用的网络。
    • volumes: 定义卷,用于数据持久化或共享数据。
    • depends_on: 定义服务之间的依赖关系。
    • 其他配置: 如构建参数、日志配置等。
  • networks: 定义自定义网络,允许容器之间进行通信。

  • volumes: 定义数据卷,用于存储数据或共享数据。

Docker Compose的使用

  • 安装 Docker Compose: 可以通过官方文档提供的步骤来安装 Docker Compose。
  • 编写 docker-compose.yml 文件: 根据应用程序的需求,编写 YAML 格式的配置文件。
  • 启动服务: 使用 docker-compose up 命令启动所有服务。该命令会创建网络、卷、服务容器,并根据依赖关系按顺序启动它们。
  • 停止服务: 使用 docker-compose down 命令停止并移除所有容器、网络和卷(除非在配置文件中指定了 volumes 的外部存储)。
  • 其他常用命令:
    • docker-compose start: 启动已停止的服务。
    • docker-compose stop: 停止正在运行的服务。
    • docker-compose restart: 重启服务。
    • docker-compose logs: 查看服务日志。
    • docker-compose ps: 列出当前正在运行的服务容器。

Docker Compose 的优势

  • 简化配置: 通过 YAML 文件集中管理所有容器的配置,减少了配置的复杂性。
  • 依赖管理: 轻松定义服务之间的依赖关系,确保服务按顺序启动。
  • 可移植性: Compose 文件可以在任何支持 Docker 的平台上使用,提高了应用程序的可移植性。
  • 扩展性: 支持通过扩展配置来管理更多的服务或容器。

注意

  • 版本兼容性: 确保 Docker 和 Docker Compose 的版本兼容。
  • 配置安全性: 不要在 Compose 文件中存储敏感信息,如密码,可以使用环境变量或外部配置文件来管理这些信息。
  • 资源限制: 根据实际需求为容器配置合理的资源限制,如 CPU、内存和磁盘空间。

Docker Compose部署安装指南

Docker Compose 环境安装

  • 下载 Docker Compose
    GitHub Docker Compose Releases 页面下载对应版本的 Docker Compose 二进制文件。
    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
  • 安装 Docker Compose
    给予执行权限并查看版本。
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version
    

YAML 文件格式及编写注意事项

  • YAML 基础

    • 大小写敏感。
    • 使用空格缩进表示层级关系,不支持制表符(Tab)。
    • 缩进空格数目相同层级对齐,通常开头缩进2个空格。
    • 使用 # 号注释。
    • 符号字符后缩进1个空格,如冒号 :、逗号 ,、横杠 -
    • 单引号 '' 引起来作为普通字符串处理,双引号 "" 内的特殊字符作为本身含义。
  • 数据结构

    • 对象映射(键值对):animal: pets
    • 序列数组(列表):
      pets:
        - Cat
        - Dog
        - Goldfish
      
      pets: ["Cat", "Dog", "Goldfish"]
      
    • 布尔值:debug: truedebug: false
  • 示例

    languages:
      - Java
      - Golang
      - Python
    
    websites:
      cpu:
        name:
          - inter
          - amd
        core: 2
      memory: 1024M
      swap: 2048M
      disk: 60G
    

Docker Compose 配置常用字段

  • build:指定 Dockerfile 路径或构建上下文。
  • dockerfile:在 build 下指定 Dockerfile 名称。
  • context:构建镜像的上下文路径或 Git 仓库 URL。
  • image:指定镜像名称。
  • command:覆盖容器启动后的默认命令。
  • container_name:指定容器名称(唯一性限制)。
  • environment:添加环境变量。
  • networks:加入网络。
  • network_mode:设置容器的网络模式。
  • ports:暴露容器端口。
  • volumes:挂载宿主机目录或命名卷。
  • volumes_from:从另一个服务或容器挂载卷(版本 ‘2’ 支持)。
  • hostname:容器主机名。
  • sysctls:在容器内设置内核参数。
  • links:连接到另一个容器(不推荐使用)。
  • privileged:给予容器 root 权限(不安全)。
  • restart:设置重启策略。
  • depends_on:解决服务依赖和启动顺序问题。

Docker Compose 常用命令

  • build:重新构建服务。
  • ps:列出容器。
  • up:创建和启动容器。
  • exec:在容器内执行命令。
  • scale:指定服务容器启动数量。
  • top:显示容器进程。
  • logs:查看容器输出。
  • down:停止并删除容器、网络、数据卷。
  • stop/start/restart:停止/启动/重启服务。

Docker Compose 文件结构与实践

准备依赖文件
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./
编写脚本
  • run.sh:启动 Nginx 服务。
    #!/bin/bash
    /usr/local/nginx/sbin/nginx
    
  • Dockerfile:构建 Nginx 镜像。
    FROM centos:7
    MAINTAINER this is nginx image <wl>
    RUN yum -y update && yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
    ADD nginx-1.12.0.tar.gz /usr/local/src/
    WORKDIR /usr/local/src/nginx-1.12.0
    RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
    ENV PATH /usr/local/nginx/sbin:$PATH
    EXPOSE 80 443
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    CMD ["/run.sh"]
    
准备站点网页
echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html
编写 docker-compose.yml
version: '3'
services:
  nginx:
    container_name: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - "1216:80"
      - "1217:443"
    networks:
      lnmp:
        ipv4_address: 172.18.0.10
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
部署与验证
cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d

-f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
-p, --project-name NAME :指定项目名称,默认使用目录名称
-d :在后台运行

docker ps -a
#输出示例
CONTAINER ID   IMAGE                 COMMAND     CREATED              STATUS              PORTS                                         NAMES
b48dceee248f   compose_nginx_nginx   "/run.sh"   About a minute ago   Up About a minute   0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1
  cd /opt/compose_nginx/
  docker-compose ps#必须在docker-compose.yml所在目录执行此命令
  • 访问网站
    在浏览器中访问 http://192.168.80.15:1216

原文地址:https://blog.csdn.net/Karoku/article/details/144346074

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!