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.rhkb.cn/news/504043.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Mac使用VSCode连接虚拟机

1. 下载插件 输入Remote - SSH下载下图两个插件。 2. 配置虚拟机信息 按图示步骤点击完成后,进入到虚拟主机的配置页面。 其中Host可以自定义主机名,HostName是虚拟机ip,可以通过ifconfig eth0查看ip,User是虚拟机的用户名。…

细说STM32F407单片机以轮询方式读写外部SRAM的方法

目录 一、实例的功能 二、工程配置 1、KEYLED 2、时钟、DEBUG、USART6、NVIC、GPIO、CodeGenerator 3、FSMC (1) 模式设置 (2) Bank 1子区3参数设置 1) NOR/PSRAM control组,子区控制参数 2) NOR/PSRAM timi…

Eclipse配置Tomcat服务器(最全图文详解)

前言: 本章使用图文讲解如何在Eclipse开发工具中配置Tomcat服务器、如何创建和启动JavaWeb工程,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标: 一、配置Tomcat服务器 1. 切换Eclipse视图 2. 打开菜单 3. 找到服务选项 4. 选择…

uniapp vue2版本如何设置i18n

如何设置i18n在该软件设置过语言的情况下优先选择所设置语言,在没有设置的情况下,获取本系统默认语言就,将系统默认语言设置为当前选择语言。 1、下载依赖: npm install vue-i18n --save 2、创建相关文件(在最外层&…

QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?

QPS 和 TPS 的区别是什么?QPS 大了会有什么问题,怎么解决? QPS(Queries Per Second)和 TPS(Transactions Per Second)都是衡量系统性能的重要指标,尤其是在 Web 服务、数据库和分布…

《Spring Framework实战》4:Spring Framework 文档

欢迎观看《Spring Framework实战》视频教程 概述 历史, 设计理念, 反馈, 开始。 核心技术 IoC 容器、事件、资源、i18n、 验证、数据绑定、类型转换、SpEL、AOP、AOT。 测试 Mock 对象、TestContext 框架、 Spring MVC 测试,…

经典多模态模型CLIP - 直观且详尽的解释

对比语言-图像预训练(CLIP),这是一种创新的多模态建模策略,能够创建视觉和语言的联合表示。CLIP 的效果非常出色,可以用于构建高度特定且性能卓越的分类器,而无需任何训练数据。本文将深入探讨其理论基础&a…

vulnhub靶场【DC系列】之7

前言 靶机:DC-7,IP地址为192.168.10.13 攻击:kali,IP地址为192.168.10.2 都采用VMWare,网卡为桥接模式 对于文章中涉及到的靶场以及工具,我放置在网盘中,链接:https://pan.quark…

内网基础-防火墙-隧道技术

内网对抗-网络通讯篇&防火墙组策略&入站和出站规则&单层双层&C2正反向上线 关闭第一个防火墙: 第一个上线就走反向或者正向 第二个上线走反向(第二个防火墙阻止入站) 关闭第二个防火墙: 第一个上线就走反向&a…

BGP的local_preference本地优先级属性

一、BGP的local preference属性简介 1、local preference公认任意属性 当一条BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由属性进行比较,从而筛选出最佳到达目标网络的通达路径。本地优先属性,只在IBGP对等体之间…

从零手写线性回归模型:PyTorch 实现深度学习入门教程

系列文章目录 01-PyTorch新手必看:张量是什么?5 分钟教你快速创建张量! 02-张量运算真简单!PyTorch 数值计算操作完全指南 03-Numpy 还是 PyTorch?张量与 Numpy 的神奇转换技巧 04-揭秘数据处理神器:PyTor…

如何让用户在网页中填写PDF表格?

在网页中让用户直接填写PDF表格,可以大大简化填写、打印、扫描和提交表单的流程。通过使用复选框、按钮和列表等交互元素,PDF表格不仅让填写过程更高效,还能方便地在电脑或移动设备上访问和提交数据。 以下是在浏览器中显示可填写PDF表单的四…

【和春笋一起学C++】文本输入与读取(二)

目录 使用cin.eof()或cin.fail()检测EOF 使用cin.get(ch)的返回结果检测EOF 使用cin.get()的返回结果检测EOF 上篇文章《文本输入与读取》学习了遇到某个字符时停止读取,那如果要读取键盘输入的所有字符该怎么做呢。答案是检测文件尾(EOF)…

Ungoogled Chromium127 编译指南 MacOS篇(八)- 开始编译

1. 引言 完成了所有依赖包的安装后,我们终于来到了最关键的编译阶段。在开始编译之前,有一些重要的配置信息需要了解。本文将指导您完成整个编译过程。 2. 签名相关说明 虽然在我们的测试编译中不需要进行签名操作,但了解官方的签名要求仍…

Jenkins内修改allure报告名称

背景: 最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些 本地修改方法&am…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网的基础知识(二&a…

应急响应——Windows / Linux 排查笔记

一、基本思路流程 收集信息:收集客户信息和中毒主机信息,包括样本判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等抑制范围:隔离使受害⾯不继续扩⼤深入分析:日志分析、…

Git撤销指定commit并更新远端仓库

Git撤销指定commit并更新远端仓库 一、撤销指定commit 1.首先执行git log 命令,查看git历史提交以及commit信息: 由于需要脱敏,所以截图可能看得马赛克比较多,需要关注的就是上面的commit后跟的id,以及HEAD当前指定…

C 语言奇幻之旅 - 第16篇:C 语言项目实战

目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…

2025最新解决方案:新买的mac鼠标和这个触控板反向

solution1 :1.打开设置,搜索 触控 点击 自然滚动 ----->解决的是 触控板 但是还是解决不了鼠标反向的问题 solution1 ultra: 下载一个免费 且纯净的 软件 Scroll Reverser for macOS 这是给出的链接,非常简单,…