前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 最佳实战:定制 Docker compose 通用模板

Docker 最佳实战:定制 Docker compose 通用模板

原创
作者头像
运维有术
发布2024-02-23 13:57:46
2720
发布2024-02-23 13:57:46
举报
文章被收录于专栏:运维有术运维有术

Docker 最佳实战:定制 Docker compose 通用模板

2024 年云原生运维实战文档 99 篇原创计划 第 003 篇 |Docker 最佳实战「2024」系列 第 003 篇

前言

你好,欢迎来到运维有术

今天分享的内容是 Docker 最佳实战「2024」 系列文档中的 定制 Docker compose 通用模板

内容导图

实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)

主机名

IP

CPU(核)

内存(GB)

系统盘(GB)

数据盘(GB)

用途

docker-node-1

192.168.9.81

4

16

40

100

Docker 节点 1

docker-node-2

192.168.9.82

4

16

40

100

Docker 节点 2

docker-node-3

192.168.9.83

4

16

40

100

Docker 节点 3

合计

3

12

48

120

300

实战环境涉及软件版本信息

  • 操作系统:openEuler 22.03 LTS SP3
  • Docker:24.0.7
  • Containerd:1.6.27

1. 为什么要做模板?

Docker 容器的创建启动方式有两种:

  1. 通过 docker run 直接运行
  2. 编写 docker-compose.yml 文件,通过 docker-compose 或是 docker compose 命令运行

说明: docker compose 的方式只有使用 Docker 官方提供的软件源安装 Docker 引擎并且安装了 docker-compose-plugin 才支持

我们分享的内容都是基于 docker-compose.yml 创建并管理容器,为了提高工作效率,有必要定义一套标准的初始化模板。

2. 规划创建标准化模板

本文以 Nginx 服务为例,创建标准化的 docker-compose.yml 文件通用模板。

2.1 创建容器存储根目录

本文使用 /data/containers 目录作为所有容器的根目录。

代码语言:bash
复制
mkdir /data/containers

2.2 创建容器常用目录

以 Nginx 为例,创建 Nginx 容器数据的常用基本目录,实际使用中可根据需求调整。

代码语言:bash
复制
mkdir -p /data/containers/nginx/{data,config,templates,logs}
  • data 目录:建议, 存储容器持久化数据
  • config 目录:建议, 存储容器使用的配置文件
  • logs 目录:建议, 存储容器的持久化日志
  • templates 目录:可选, 属于 Nginx 服务专属 ,用于存放配置文件模板

2.3 创建 docker-compose 文件模板

最小化的标准配置模板 docker-compose.yml

代码语言:yaml
复制
version: '3.5'

services:
  nginx:
    container_name: nginx
    image: nginx:1.25.4
    environment:
      - NGINX_HOST=foobar.com
      - NGINX_PORT=80
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/usr/share/nginx/html
      - ${DOCKER_VOLUME_DIRECTORY:-.}/config/nginx.conf:/etc/nginx/nginx.conf
      - ${DOCKER_VOLUME_DIRECTORY:-.}/templates:/etc/nginx/templates
    ports:
      - "80:80"
networks:
  default:
    name: nginx

重点说明: 一个最小化的模板包含以下基本内容,其他服务按模板修改套用即可。

  • services.nginx:服务名称,用于 docker-compose 管理控制,一个 docker-compose.yml 中可以配置多个服务
  • services.nginx.container_name:nginx 服务对应的容器名称
  • services.nginx.image: ngin x 服务对应的容器使用的镜像,建议带上特定的 tag,不建议使用 latest
  • services.nginx.environment:nginx 服务对应的容器运行时使用的环境变量
  • services.nginx.volumes:nginx 服务对应的容器运行时挂载的目录或文件,本文使用了 shell 默认变量,定义了一个变量 DOCKER_VOLUME_DIRECTORY 并设置该变量的默认值为当前目录
  • services.nginx.ports:nginx 服务对应的容器运行时需要暴露的端口
  • networks:所有服务容器运行时创建的网络名称,同一个 docker-compose.yml 配置文件定义的服务可以使用相同的 networks

2.4 创建并启动服务

启动 Docker 服务,并设置开机自启。

代码语言:bash
复制
cd /data/containers/nginx

# 下载 docker-compose 二进制的方式,使用下面的命令
# docker-compose up -d

# Docker 官方 RPM 包安装的 Docker,使用下面的命令
docker compose up -d

2.5 验证服务

  • 查看 Docker 信息
代码语言:bash
复制
 cd /data/containers/nginx
 docker compose ps -a

3. 自动化 Shell 脚本

全文所有的操作,我都整理成了自动化脚本:

  • 自动化脚本 deploy-nginx.sh
代码语言:bash
复制
#!/bin/bash
set -e

mkdir -p /data/containers/nginx/{data,config,templates,logs}
cd /data/containers/nginx

cat > docker-compose.yml << "EOF"
version: '3.5'

services:
  nginx:
    container_name: nginx
    image: nginx:1.25.4-alpine
    environment:
      - NGINX_HOST=foobar.com
      - NGINX_PORT=80
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data:/usr/share/nginx/html
      #- ${DOCKER_VOLUME_DIRECTORY:-.}/config/nginx.conf:/etc/nginx/nginx.conf
      - ${DOCKER_VOLUME_DIRECTORY:-.}/templates:/etc/nginx/templates
    ports:
      - "80:80"
networks:
  default:
    name: nginx

EOF

docker compose up -d
docker compose ps

注意: 自动化脚本中 volumes 小节注释了一段内容,实际使用中可以提前准备好该文件,并取消注释。

4. 课后作业

根据本文所学,请完成以下实战任务。

  1. 定制一套适合自己的 docker-compose.yml 自动初始化模板
  2. 使用模板部署 Nginx 服务

5. 总结

本文分享了定制最小化 docker-compose.yml 文件标准模板的详细流程及注意事项。主要内容概括如下:

  • docker-compose.yml 模板的定制
  • 利用模板创建 Nginx 服务
  • 编写 docker-compose.yml 模板自动化部署服务的脚本

Get 本文实战视频(请注意,文档视频异步发行,请先关注)

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

结束语

如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @ 运维有术,及时收看更多好文!

欢迎加入 「运维有术·云原生实战训练营」 ,获取更多的 KubeSphere、Kubernetes、云原生运维实战技能。

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker 最佳实战:定制 Docker compose 通用模板
    • 前言
      • 1. 为什么要做模板?
        • 2. 规划创建标准化模板
          • 2.1 创建容器存储根目录
          • 2.2 创建容器常用目录
          • 2.3 创建 docker-compose 文件模板
          • 2.4 创建并启动服务
          • 2.5 验证服务
        • 3. 自动化 Shell 脚本
          • 4. 课后作业
            • 5. 总结
              • 结束语
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档