惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

思有云 - IOIOX - docker compose

docker compose 部署配置 Awesome TTRSS 教程 - 思有云 docker 部署 dujiaoka 独角数卡自动售货系统 支持 X86 和 ARM 架构 - 思有云 Docker 安装 Gitea + Drone 开源代码仓库及 CI/CD 教程 - 思有云 Docker Compose 部署配置和使用 Registry 私有镜像仓库 - 思有云 分享收集,整合,编写常用和优秀服务的 Dockerfile 仓库 并已构建 docker 镜像直接使用 - 思有云 ARM 架构 Linux 使用 docker compose 教程 - 思有云 docker compose 部署迁移 Chevereto 图床程序教程 - 思有云
将 docker run 命令改为 docker-compose.yml 方便部署和维护 - 思有云
博主: Stille · 2021-01-22 · via 思有云 - IOIOX - docker compose

前言

使用docker run命令可以很方便的启动一个项目容器,加上一些参数能够实现所有需要的功能.但是当管理多个或者几十个容器时,可能会忘记部分参数,导致一些问题.我们可以使用docker-compose来启动容器.通过docker-compose.yml将所有参数记录到配置文件中,方便管理和排查问题.

本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.


docker run

当容器本身无需过多的参数,例如无需-v挂载目录,无需过多的-p映射端口,无需-e来指定环境.以及其他参数.完全可以使用最简单的docker run命令来启动容器.

示例

例如用于测试 VPS 速度的的 speedtestx 容器.其中启动命令如下:

docker run -d --name speedtestx --restart always -p 8080:80 badapple9/speedtest-x

此容器无需存储任何数据,也没有其他过多的参数.只需要简单配置容器名 --name,配置自动重启 --restart,加上端口-p 8080:80就可以方便的启动使用.

  

docker-compose

安装与使用

docker-compose 的安装请参考 CentOS 7 安装 docker compose 教程
在任意目录创建项目目录,并在该目录下创建docker-compose.yml配置文件,编写完毕执行启动命令.

mkdir serverstatus
# 创建项目目录
cd serverstatus
# docker-compose 命令需要进入目录执行
vi docker-compose.yml
# 创建编辑配置文件
docker-compose up -d
# 启动 docker-compose
docker-compose down
# 停止 docker-compose

当启动一个复杂的容器,需要-v,-p,-e等参数,可以将配置写入docker-compose.yml配置文件,之后只需要保存好此项目的目录就可以方便的启动,停止,迁移容器.也无需担心忘记参数,或者丢失数据.

docker run 示例

例如本站发布过的 ServerStatus 项目,需要保存配置文件和修改 Web 文件,还需要映射端口到宿主机使用,其命令如下:

docker run -d --name serverstatus --restart always \
    -p 8080:80 \
    -p 35601:35601 \
    -v ~/ServerStatus/config.json:/ServerStatus/server/config.json \
    -v ~/ServerStatus/web:/usr/share/nginx/html \
    stilleshan/serverstatus

转为 docker-compose.yml

将上述docker run命令转为docker-compose.yml配置文件.

version: "3"
services:
  serverstatus:
    image: stilleshan/serverstatus
    container_name: serverstatus
    ports:
      - 8080:80
      - 35601:35601
    volumes:
      - ./config.json:/ServerStatus/server/config.json 
      - ./web:/usr/share/nginx/html
    restart: always

根据上述模版,可以很方便的把各种容器启动命令转为docker-compose.

  • image - 对应镜像
  • container_name - 对应--name容器名
  • ports - 对应-p端口映射
  • volumes - 对应-v挂载文件和目录
  • restart - 对应--restart重启参数

值得注意的几点

container_name
大多数情况下的容器建议定义container_name容器名,但是有时候一台服务器中多个项目会同时使用例如nginx,redis,mysql等常用容器,此时容器名就可能重复,在后期维护时也不太方便迅速辨别.
所以container_name容器名称参数也可以删除,如果删除,容器将以docker-compose.yml所在文件夹的名称加上services名加上同样容器数量定义,以上述为例,容器名将会为serverstatus_serverstatus_1,更方便的一眼识别.

volumes
docker-compose.yml的规范参数中,volumes的命名有三种,本文不在详细解释.在没有特殊需求时,挂载目录建议使用./的相对目录,将一些需要存储的配置文件,数据文件直接存在容器项目目录下,docker-compose.yml同一层级.后期的维护和迁移,只需要在此目录下操作和备份.
但是一些特殊挂载,需要挂载系统文件供容器使用,此时就必须使用绝对路径.

  

docker-compose 更多常见参数.

以下示例使用了-v绝对路径,-e环境变量,command特殊命令参数.

docker run 示例

docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e TZ=Asia/Shanghai \
    -s "0 0 1 * * *" \
    --cleanup \
    containrrr/watchtower \
    nginx redis

转为 docker-compose.yml

version: '3'
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_SCHEDULE=0 0 1 * * *
    restart: always
    command: nginx redis

上述配置文件中volumes使用了绝对路径,使这个容器能访问系统docker.sock目录,用于方便监控容器镜像的版本以便更新.其他的一些环境变量,例如时区,清理旧镜像,定时任务都转换为environment,而特殊的command命令则定义了指定监控nginxredis两个容器.


结语

本文简单介绍了docker-compose的一些基本参数用法,但是docker-compose主要是为了编排多个容器运行使用,功能非常强大,本文的功能仅仅只是九牛一毛.关于更多的功能和用法可以参考官方文档.本站后续也会分享更多的相关使用经验.