当前位置: 首页 > news >正文

Docker Compose介绍

基本概念

Docker-Compose是Docker官方的开源项目,负责实现对docker容器集群的快速编排。

可以这么理解,docker compose是docker提出的一个工具软件,可以管理多个docker容器组成一个应用,只需要编写一个YAML格式的配置文件docker-compose.yml,这个配置文件中定义好多个容器之间的调用关系。接着,皆可以通过docker compose相关的命令来一起管理这些容器。

docker-compose的优势有如下几点

  • 通过声明式YAML文件统一管理所有的服务、网络、数据卷
  • 支持一键启动、停止整个应用栈
  • 内置服务依赖顺序控制(通过depends_on)

高阶功能

Docker-Compose常见的高阶功能如下

环境变量注入

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

通过系统变量来管理密码

资源限制

services:
  worker:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

通过配置可以限制容器使用cpu、内存等资源 
 

健康检查

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

web等应用容器可以通过执行curl等命令来检测服务的健康心跳 

安装流程

使用官方推荐的安装方式,不过在安装之前需要先安装docker引擎并启动docker。

一键安装脚本如下

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
docker-compose --version

常见的命令

命令作用示例

docker compose up

启动所有服务

#以后台方式启动所有的service

docker compose up -d

#以后台方式启动指定服务

docker compose up -d web

docker compose down

停止并删除所有容器、网络、数据卷

docker compose exec

进入容器执行命令

docker compose exec redis sh

docker compose config

验证 docker-compose.yml 语法

其他命令,还可以通过docker compose --help 来自助查看 

案例

这里来使用docker compose来安装一个nginx的容器,操作步骤如下

创建目录

创建如下层级的目录,nginx.conf是nginx的配置文件

html/index.html是一个简单的html静态资源文件

├── docker-compose.yml

├── nginx

│   ├── conf.d

│   │   └── nginx.conf

│   ├── html

│   │   └── index.html

│   └── logs

│   ├── access.log

│   └── error.log

└── redis

配置文件编写

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile        on;
  keepalive_timeout  65;

  # 包含子配置(若需拆分配置)
  include /etc/nginx/conf.d/*.conf;
}

编写docker compose的YAML文件

services:
  nginx:
    image: nginx:1.25-alpine
    container_name: my_nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/html:/usr/share/nginx/html              # 静态文件
      - ./nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf    # 主配置文件
      - ./nginx/logs:/var/log/nginx                     # 挂载日志目录
    restart: unless-stopped
    logging:  # 可选:限制日志大小(防止磁盘占满)
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

编写一个简单的html页面

<h1>Hello Docker Compose + Nginx!</h1>

检查yml文件格式

docker compose config

 检查格式没问题以后,运行docker compose配置文件

运行

docker compose up -d

运行成功后,可以在浏览器访问静态资源,能正常显示index.html内容说明nginx运行正常

总结

docker compose可以非常灵活的来管理docker容器,上手又简单,值得学!

通过docker compose运行起来的容器,使用的是自定义的docker网络,默认也是桥接模式,同一个service下的docker容器是在一个网段内,可以直接使用服务名来进行通信。

相关文章:

  • JavaPro
  • 【Java】readUnsignedShort()与readShort()
  • VS Code连接远程服务遇到的问题
  • 神奇的闹钟(算法题)
  • 蓝桥备赛(27)算法篇【二分算法】
  • 【赵渝强老师】达梦数据库的线程结构
  • 若依——基于AI+若依框架的实战项目(原理篇)
  • 23种设计模式-装饰器(Decorator)设计模式
  • C++类与对象-3.23笔记
  • 【Java】Springboot集成itextpdf制作pdf(内附pdf添加表格、背景图、水印,条形码、二维码,页码等功能)
  • 牛客春招刷题训练营 3月25日 Java 查找两个字符串a,b中的最长公共子串 构造C的歪
  • 基于docker-compose 部署可道云资源管理器
  • 系留无人机照明芯片迎来革新:80V耐压输入+FP7195千瓦级大功率调光IC方案落地
  • GitLab 中文版17.10正式发布,27项重点功能解读【三】
  • html方法收集
  • Java 集合操作详解与使用指南
  • UE4学习笔记 FPS游戏制作14 发射抛物线子弹
  • 多维动态规划 力扣hot100热门面试算法题 面试基础 核心思路 背题
  • 第四届能源、电力与电气国际学术会议(ICEPET 2025)
  • 后缀表达式 | 第十届蓝桥杯省赛C++B组
  • 2025年新季夏粮收购量将达到2000亿斤左右
  • 痴情与真爱
  • 63岁微波遥感领域著名专家李春升参加学术会议期间病逝
  • 媒体:多家国有大行存款利率即将迎来新一轮下调
  • 多家国有大行存款利率即将迎来新一轮下调
  • 夜读丨为萤火虫哭泣的夜晚