前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >管理 Docker 容器的快捷脚本与经验分享

管理 Docker 容器的快捷脚本与经验分享

原创
作者头像
若海
发布2025-01-30 12:38:33
发布2025-01-30 12:38:33
981
举报
文章被收录于专栏:云原生拾遗云原生拾遗

容器化技术极大地简化了工作流程,但同时也带来了一些挑战。例如,容器的依赖管理、数据持久化以及容器的启动和停止等问题都需要我们仔细处理。最近,在群里看到一些朋友在使用各种方法来管理自己的容器服务,也遇到了一些奇怪的问题,比如升级失败、数据丢失等。本文和大家简单探讨一下管理容器的一些小经验。

避坑经验

本文内容仅适用于个人开发者,大型容器集群管理不在本文讨论范围内。

  • 资源管理:合理配置容器的资源限制(如 CPU 和内存)可以避免资源争用,确保系统的稳定运行。
  • 数据备份:虽然容器化技术提供了数据持久化的解决方案,但定期备份数据仍然是一个好习惯,以防万一。
  • 定期更新镜像:定期更新容器镜像是保持容器安全的重要步骤,防止被一些高危漏洞影响,导致不可挽回的损失。
  • 监控和日志管理:可以使用 Prometheus 和 Grafana 进行监控,ELK Stack 进行日志管理。这样能帮助我们及时发现和解决问题,但这些工具对于个人开发者来说都很重,非必要不推荐。

简化管理

以下是一个简单的脚本,用于管理一个名为 discuz 的容器,读者可以将脚本保存到 /srv/discuz/docker,并赋予执行权限。

  • 数据持久化:将 /srv/discuz 中的三个子目录挂载到容器中,确保数据的持久化,避免数据丢失的问题。
  • 安装:当执行 /srv/discuz/docker install 命令时,脚本会依次拉取最新的镜像、创建新容器。
  • 更新:当执行 /srv/discuz/docker update 命令时,脚本会依次拉取最新的镜像、删除容器、创建新容器。
  • 移除:当执行 /srv/discuz/docker remove 命令时,脚本会依次执行自定义命令、停止容器、强制删除容器。
代码语言:shell
复制
#!/bin/sh
#
# @Author  Rehiy <wang@rehiy.com>
# @Website https://www.rehiy.com/post/583/
#

APP_NAME=discuz
APP_FROM=rehiy/webox

# 资源限制
APP_CPU_LIMIT=2
APP_MEMORY_LIMIT=1g

# 数据目录
APP_PATH=$(cd `dirname $0`; pwd)

########################################################################

# 拉取镜像
if [ "$1" = "install" ] || [ "$1" = "update" ]; then
    docker pull $APP_FROM
fi

# 删除容器,请根据业务情况改写
if [ "$1" = "remove" ] || [ "$1" = "update" ]; then
    docker exec -it $APP_NAME wkit stop # 自定义命令
    docker stop -t 600 $APP_NAME # 尽量优雅的停止
    docker rm -f $APP_NAME
fi

# 创建容器,请根据业务情况改写
if [ "$1" = "install" ] || [ "$1" = "update" ]; then
    docker run --name $APP_NAME -d \
        --restart unless-stopped \
        --cpus $APP_CPU_LIMIT \
        --memory $APP_MEMORY_LIMIT \
        --network host \
        --volume $APP_PATH/etc:/var/config \
        --volume $APP_PATH/htdoc:/var/www/default \
        --volume $APP_PATH/mysql:/var/lib/mysql \
        --env TZ=Asia/Shanghai \
        $APP_FROM
fi

扩展使用

/srv/xxx/docker 目录下创建不同的脚本,可以方便地管理多个容器服务。数据也保存在不同的目录中,如果需要迁移到其他服务器时,只要将数据目录拷贝到新服务器即可。创建不同的服务时,请注意修改 APP_NAMEAPP_FROM 等变量,确保不同的服务不会互相冲突。

备注:本文首发自若海の技术写真 ,欢迎原文留言

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 避坑经验
  • 简化管理
  • 扩展使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档