当前位置:首页 > 群晖专栏 > 运维部署 > 正文内容

将 docker run 命令改为 docker-compose.yml 方便部署和维护

admin4年前 (2021-01-22)运维部署231

前言

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



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主要是为了编排多个容器运行使用,功能非常强大,本文的功能仅仅只是九牛一毛.关于更多的功能和用法可以参考官方文档.本站后续也会分享更多的相关使用经验.

本站提供免费和付费的技术支持.你可以通过留言,邮件,QQ的方式来进行技术交流和免费咨询.同时也可以付费支持的方式获得相关的技术支持,项目部署配置等服务.具体相关详情请点击查看 技术支持页面



扫描二维码推送至手机访问。

版权声明:本文由梦魁网络资源站发布,如需转载请注明出处。

本文链接:https://family.monkui.com:39/?id=197

标签: 运维部署
分享给朋友:

相关文章

腾讯云申请免费SSL证书教程

腾讯云申请免费SSL证书教程

前言本文将详解如何为你的域名申请腾讯云免费SSL证书,SSL证书能使你的网站支持https协议.申请流程登录腾讯云SSL证书管理购买证书选择域名型免费版(DV)填写域名,邮箱,证书备注名默认选择自动DNS验证如果你的域名不是在腾讯云购买和解...

梅林固件路由器部署SSL证书支持HTTPS访问

梅林固件路由器部署SSL证书支持HTTPS访问

前言本文将详解如何在梅林固件路由器上部署SSL证书,实现域名远程访问路由器管理页面支持HTTPS协议.部署流程登录路由器系统管理系统设置上传上传域名SSL证书文件上传成功设置HTTP和HTTPS的端口应用设置现在可以使用HTTPS协议来安全...

Apache设置301重定向到www和强制跳转https教程

Apache设置301重定向到www和强制跳转https教程

前言本文将详解如何配置Apache的.htaccess文件来使域名跳转到www和强制跳转到https首先在建站之前,需要确认今后网站是使用类似ioiox.com一级域名,还是www.ioiox.com二级域名,根据域名长度,使用场景,域名视...

Apache设置Typecho伪静态去掉index.php教程

Apache设置Typecho伪静态去掉index.php教程

前言Typecho博客初始安装完成后,博客的任何内页面,地址栏都会有index.php(例如https://www.ioiox.com/index.php/archives/about.html)非常影响美观和网站结构,本文将详解在Apac...

Oracle Cloud VPS CentOS 7 升级内核并开启官方原版BBR加速

Oracle Cloud VPS CentOS 7 升级内核并开启官方原版BBR加速

前言Oracle VPS 注册了一个多月也没有时间折腾,正好昨天能够有库存创建VPS了,于是升级了内核,开启了原版BBR,记录一下流程,新手顺着命令一步步来执行即可.重要提示由于甲骨文 CentOS 7 系统更新频繁,请参考以下日期来使用2...

Typecho博客全站部署腾讯云CDN教程

Typecho博客全站部署腾讯云CDN教程

前言建站大半年一直没有太过注重网站的速度.主要是因为新站访问量过低,没有部署的必要,其次就是本人实在是不太了解CDN相关的知识.现在访问量逐渐增加,为了保证网站的访问体验,在网上查找了相关教程,同时也咨询了热心网友后,正式把本站部署到了腾讯...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。