【docker集群应用】Docker Compose

文章目录

  • [Docker Compose](#Docker Compose)
    • [Docker Compose 文件结构](#Docker Compose 文件结构)
    • [Docker Compose的使用](#Docker Compose的使用)
    • [Docker Compose部署安装指南](#Docker Compose部署安装指南)
      • [Docker Compose 环境安装](#Docker Compose 环境安装)
      • [YAML 文件格式及编写注意事项](#YAML 文件格式及编写注意事项)
      • [Docker Compose 配置常用字段](#Docker Compose 配置常用字段)
      • [Docker Compose 常用命令](#Docker Compose 常用命令)
      • [Docker Compose 文件结构与实践](#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 二进制文件。

    bash 复制代码
    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
    给予执行权限并查看版本。

    bash 复制代码
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version

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

  • YAML 基础

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

    • 对象映射(键值对):animal: pets

    • 序列数组(列表):

      yaml 复制代码
      pets:
        - Cat
        - Dog
        - Goldfish

      yaml 复制代码
      pets: ["Cat", "Dog", "Goldfish"]
    • 布尔值:debug: truedebug: false

  • 示例

    yaml 复制代码
    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 文件结构与实践

准备依赖文件
bash 复制代码
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 服务。

    bash 复制代码
    #!/bin/bash
    /usr/local/nginx/sbin/nginx
  • Dockerfile:构建 Nginx 镜像。

    Dockerfile 复制代码
    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"]
准备站点网页
bash 复制代码
echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html
编写 docker-compose.yml
yaml 复制代码
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
部署与验证
bash 复制代码
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
相关推荐
骷大人12 分钟前
mysql开启配置binlog
数据库·mysql
Yolo_nn13 分钟前
MySQL_第14章_存储过程与函数
数据库·mysql·存储过程·函数
GDDGHS_22 分钟前
Flink自定义数据源
大数据·数据库·flink
CC大煊44 分钟前
【Linux】vi/vim 使用技巧
linux·运维·vim
Milk夜雨44 分钟前
数据库进阶教程:结合编程实现动态数据操作
数据库·python·adb
weisian1511 小时前
Redis篇-5--原理篇4--Lua脚本
数据库·redis·lua
weixin_399380691 小时前
Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)
服务器·网络协议·ssl
是十一月末1 小时前
Linux的基本功能和命令
linux·服务器·开发语言·数据库
聚名网1 小时前
什么叫中间件服务器?
运维·服务器·中间件
MavenTalk1 小时前
Spring Cloud Alibaba:一站式微服务解决方案
java·数据库·spring boot·spring cloud·微服务·netflix