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

Docker 容器自动化管理之脚本(Script for Docker Container Automation Management)

Docker 容器自动化管理之脚本

简介

Docker‌是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其依赖项打包到一个可移植的容器中,使得开发人员能够在不同的环境中以一致的方式构建、打包和分发应用程序‌。

Docker的核心概念

  1. ‌容器(Container)‌:容器是Docker的基本部署单元,是一个轻量级的、独立的运行时环境,包含应用程序及其相关依赖。容器利用Linux内核的命名空间和控制组技术,实现了隔离性和资源管理‌。
  2. ‌镜像(Image)‌:镜像是一个只读的模板,包含创建Docker容器的指令。它类似于虚拟机的快照,可以从Docker Hub下载或自己创建‌。
  3. ‌Dockerfile:用于构建Docker镜像的文本文件,包含构建镜像所需的所有命令,如安装软件、拷贝文件等‌。
  4. ‌‌Docker Registry:用于存储Docker镜像的仓库,Docker Hub是最常用的公共仓库‌。

Docker的历史背景和开发者

Docker最初是由dotCloud公司开发的内部项目,后来开源并更名为Docker Inc。Docker于2013年首次发布,基于Google的Go语言实现。项目代码在GitHub上进行维护,并遵从Apache 2.0协议‌。

Docker的主要版本

Docker主要有两个版本:

  • Docker CE(Community Edition)‌:免费版本,适合个人开发者和小型团队,包含核心Docker功能‌。
  • Docker EE(Enterprise Edition)‌:付费版本,面向企业级用户,提供额外的安全、管理和支持功能‌。

Docker的应用场景和优势

Docker的应用场景包括简化不同环境配置差异、代码流水线管理和提升开发效率。其优势在于轻量级、可移植和高效的工作方式,能够快速部署应用程序,实现弹性扩展和服务编排。通过使用Docker,开发人员可以更轻松地创建一个可靠的开发环境,并管理多容器应用程序‌

每个示例都附带功能代码和详细解释。

1. 自动启动所有容器

有时在系统重启或维护后,您可能希望一次性启动所有停止的容器。

#!/bin/bash
# 启动所有停止的容器
docker start $(docker ps -aq)

  • 'docker ps -aq' 列出所有容器 ID(停止和运行)。

  • 'docker start' 通过传递 ID 作为参数来启动容器。

2. 停止所有运行中的容器

快速停止所有当前运行的容器。

#!/bin/bash
# 停止所有运行中的容器
docker stop $(docker ps -q)

  • 'docker ps -q' 列出仅运行中的容器 ID。

  • 'docker stop' 停止这些容器。

3. 删除停止的容器

通过清理停止的容器来释放空间。

#!/bin/bash
# 删除所有停止的容器
docker rm $(docker ps -aq -f "status=exited")

  • docker ps -aq -f "status=exited" 过滤停止的容器。

  • 'docker rm' 删除它们。

4. 删除dangling的镜像

清除未使用的 Docker 镜像以节省磁盘空间。

#!/bin/bash
# 删除dangling 镜像
docker rmi $(docker images -q -f "dangling=true")

  • docker images -q -f "dangling=true" 列出无标签的镜像 ID(悬空)。

  • 'docker rmi' 删除这些镜像。

5. 备份容器的数据

将运行中的容器的文件系统导出到 tar 文件。

#!/bin/bash
# 备份容器的数据
CONTAINER_ID=$1
BACKUP_FILE="${CONTAINER_ID}_backup_$(date +%F).tar"
docker export $CONTAINER_ID > $BACKUP_FILE
echo "备份保存到 $BACKUP_FILE"

  • 'docker export' 导出容器的文件系统。

  • 将容器 ID 作为参数传递给脚本。

6. 从备份恢复容器

从 tar 备份文件中重新创建容器。

#!/bin/bash
# 从 tar 备份恢复容器
BACKUP_FILE=$1
docker import $BACKUP_FILE restored_container:latest
echo "容器恢复为 'restored_container:latest'"

  • 'docker import' 从 tar 文件创建新镜像。

  • 该镜像可用于启动新容器。

7. 监控容器的资源使用情况

显示所有运行中容器的实时统计信息。

#!/bin/bash
# 监控所有运行中容器的资源使用情况
docker stats --all

  • 'docker stats' 显示实时的 CPU、内存和网络统计信息。

  • '--all' 包括停止的容器。

8. 自动重启容器

确保关键容器在失败后自动重启。

#!/bin/bash
# 使用重启策略重启容器
CONTAINER_NAME=$1
docker update --restart always $CONTAINER_NAME
echo "$CONTAINER_NAME 现在将在失败后自动重启。"

  • 'docker update --restart always' 配置重启策略。

  • 将容器名称作为参数传递。

9. 运行容器并在退出后清理

在容器停止后自动删除。

#!/bin/bash
# 运行容器并清理
IMAGE_NAME=$1
docker run --rm $IMAGE_NAME

  • '--rm' 在容器停止时删除容器。

  • 适用于一次性任务。

10. 检查所有容器的日志

将多个容器的日志合并到一个输出中。

#!/bin/bash
# 显示所有容器的日志
docker ps -q | xargs -I {} docker logs {}

  • 'docker ps -q' 列出运行中的容器 ID。

  • 'xargs' 将这些 ID 传递给 'docker logs'。

11. 自动清理未使用的资源

安排自动清理未使用的 Docker 资源。

#!/bin/bash
# 清理未使用的资源
docker system prune -f --volumes

  • 'docker system prune' 删除未使用的容器、网络和镜像。

  • '--volumes' 还删除未使用的卷。

12. 更新运行中的容器

使用最新版本的镜像重新创建容器。

#!/bin/bash
# 更新运行中的容器
CONTAINER_NAME=$1
IMAGE_NAME=$(docker inspect --format='{{.Config.Image}}' $CONTAINER_NAME)
docker pull $IMAGE_NAME
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
docker run -d --name $CONTAINER_NAME $IMAGE_NAME

  • 'docker inspect' 获取容器的镜像名称。

  • 脚本拉取最新镜像并重新创建容器。

13. 从容器复制文件

将文件或目录从容器提取到主机。

#!/bin/bash
# 从容器复制文件
CONTAINER_ID=$1
SOURCE_PATH=$2
DEST_PATH=$3
docker cp $CONTAINER_ID:$SOURCE_PATH $DEST_PATH
echo "从 $CONTAINER_ID 复制 $SOURCE_PATH 到 $DEST_PATH"

  • 'docker cp' 在容器和主机之间复制文件。

  • 将容器 ID、源路径和目标路径作为参数传递。

14. 重启所有容器

快速重启所有运行中的容器。

#!/bin/bash
# 重启所有容器
docker restart $(docker ps -q)

  • 'docker restart' 通过 ID 重启容器。

15. 列出所有暴露的端口

检查运行中容器的暴露端口。

#!/bin/bash
# 列出所有暴露的端口
docker ps --format '{{.ID}}: {{.Ports}}'

  • 'docker ps --format' 自定义输出以显示容器 ID 和端口。

请随意调整、实验和根据您的需求进行定制.


http://www.kler.cn/a/472649.html

相关文章:

  • 优化提示词改善答疑机器人回答质量
  • NRC优先级中比较特殊的—NRC0x13和NRC0x31
  • spring mvc源码学习笔记之九
  • Leffa 虚拟试衣论文笔记
  • Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能
  • 炸弹 (boom.c)
  • 【linux系统之redis6】redis的安装与初始化
  • 如何隐藏 Nginx 版本号 并自定义服务器信息,提升安全性
  • 联邦学习LoRA:推理合并权重公式:以及变体
  • 如何让用户在网页中填写PDF表格?
  • 【HTML+CSS+JS+VUE】web前端教程-1-VScode开发者工具快捷键
  • uniapp使用sm4加密
  • 创建管理表
  • Linux vi/vim 编辑器:功能强大的文本处理工具
  • 力扣刷题:数组OJ篇(上)
  • C++编程等级认证学习计划day1-1
  • [python3]Excel解析库-xlwt
  • 创建型模式-工厂模式
  • 继承(6)
  • C++ 中的 const 和 constexpr: 深入对比与最佳实践
  • HTML基础入门——简单网页页面
  • 电致变色和电泳技术在低功耗显示器中大放异彩
  • 一次完成Win10下MySQL 9.1 的安装
  • 算法的五个重要特性和4个基本标准
  • 医疗可视化大屏 UI 设计新风向
  • el-tree拖拽光标错位问题