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

news2025/1/9 5:32:16

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.coloradmin.cn/o/2273589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 数据库源码分析

Redis 数据库源码分析 我们都知道Redis是一个 <key,value> 的键值数据库&#xff0c;其实也就是一个 Map。如果让我来实现这样一个 Map&#xff0c;我肯定是用数组&#xff0c;当一个 key 来的时候&#xff0c;首先进行 hash 运算&#xff0c;接着对数据的 length 取余&…

【海南省】乡镇界arcgis格式shp数据乡镇名称和编码gis矢量数据

《海南省乡镇界GIS矢量数据详解》 GIS&#xff08;Geographic Information System&#xff09;是一种强大的地理信息系统&#xff0c;它结合了地图、数据库和计算机技术&#xff0c;用于管理和分析空间数据。在本篇中&#xff0c;我们将聚焦于一个特定的GIS数据集——“最新海…

JVM 核心知识点总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

嵌入式系统 (5.嵌入式Linux网络应用开发)

5.嵌入式 Linux 网络应用开发 5.1相关概念 客户端程序与服务端程序 在网络编程中,客户端程序与服务端程序是网络通信的两个基本角色。客户端发起请求,服务端响应请求并提供服务。 IP 地址与端口号 IP 地址用于标识网络设备的位置,而端口号标识运行在计算机上的具体进程…

语义SEO全解析:如何在搜索引擎中脱颖而出?

在过去十年中&#xff0c;搜索格局发生了巨大变化&#xff0c;语义 Web 技术成为一项关键功能。用户现在希望搜索引擎比以往任何时候都更好地掌握自然语言。是的&#xff0c;Google 在语言处理方面取得了一些非凡的成就。 当搜索引擎不那么先进时&#xff0c;很少需要一键就能…

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…

Maven在不同操作系统上如何安装?

大家好&#xff0c;我是袁庭新。Maven是一个重要的工具&#xff0c;还有很多初学者竟然不知道如何安装Maven&#xff1f;这篇文章将系统介绍如何在Windows、macOS、Linux操作系统上安装Maven。 Maven是一个基于Java的项目管理工具。因此&#xff0c;最基本的要求是在计算机上安…

【C语言】_冒泡排序及其优化思路

目录 1. 第一版代码&#xff1a;无忧化版 2. 第二版代码&#xff1a;添加逐趟判断有序的优化版 核心思想&#xff1a;两两相邻的元素进行比较 1. 第一版代码&#xff1a;无忧化版 #include<stdio.h> void bubble_sort(int* arr, int sz) {// 确定趟数: // (对于目标升…

通过gradle发布aar或jar携带sources-jar到maven nexus

找了很久&#xff0c;没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp&#xff0c;fastjson等项目&#xff0c;纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …

Java SpringBoot使用Apache POI导入导出Excel文件

点击下载《Java SpringBoot使用Apache POI导入导出Excel文件(源代码)》 1. Apache POI 简介 Apache POI 是一个强大的 Java 库&#xff0c;用于处理 Microsoft Office 文档&#xff0c;包括 Excel 文件&#xff08;.xls 和 .xlsx&#xff09;。在 Java Spring Boot 项目中&am…

unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔&#xff0c;是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名&#xff0c;要求更严…

网站常用功能模块-鉴权

一&#xff1a;JWT是什么&#xff1f; 常用鉴权方式有很多种&#xff0c;今天主要介绍基于token的鉴权方式JWT&#xff08;Json JSON Web Token&#xff09;。因为这种方式实现起来方便快捷。整体实现逻辑如下 第一次登陆时&#xff0c;前端携带账号和密码请求登录接口。服务…

Tableau数据可视化与仪表盘搭建-数据连接

目录 连接本地文件 课程操作 连接方式&#xff08;实时/数据提取&#xff09; 保存工作簿 筛选器 数据处理 连接数据有三种类型 第一种&#xff0c;连接到本地文件&#xff0c;例如Excel&#xff0c;csv&#xff0c;JSON等 第二种&#xff0c;连接到数据库&#xff0c;例…

AI人工智能大数据技术解锁竞彩足球分析软件准确率的密钥

AI 人工智能大数据技术解锁竞彩足球分析软件准确率的密钥 在信息爆炸的时代&#xff0c;竞彩足球愈发风靡&#xff0c;球迷们不再满足于单纯观赛&#xff0c;更渴望凭借精准预测&#xff0c;投身这场数字与激情交织的博弈。而大数据、人工智能技术催生出的专业软件&#xff0c;…

基于物联网疫苗冷链物流监测系统设计

1. 项目开发背景 随着全球对疫苗运输要求的提高&#xff0c;特别是针对温度敏感型药品&#xff08;如疫苗&#xff09;的冷链管理&#xff0c;如何保证疫苗在运输过程中的温度、湿度、震动等环境因素的稳定性已成为亟需解决的问题。疫苗运输过程中&#xff0c;任何温度或湿度的…

深入浅出Node.js-1(node.js入门)

全新专栏带你快速掌握node.js Node.js入门 html,css,js 30年了 nodejs环境 09年出现 15年 nodejs为我们解决了2个方面的问题&#xff1a; 【锦上添花】让我们前端工程师拥有了后端开发能力&#xff08;开接口&#xff0c;访问数据库&#xff09; - 大公司BFF&#xff08;5…

【线性代数】通俗理解特征向量与特征值

这一块在线性代数中属于重点且较难理解的内容&#xff0c;下面仅个人学习过程中的体会&#xff0c;错误之处欢迎指出&#xff0c;有更简洁易懂的理解方式也欢迎留言学习。 文章目录 概念计算几何直观理解意义 概念 矩阵本身就是一个线性变换&#xff0c;对一个空间中的向量应用…

Java-JVM详解

Java-JVM ①JVM概述 ❶基本介绍 JVM&#xff1a;全称 Java Virtual Machine&#xff0c;一个虚拟计算机&#xff0c;Java 程序的运行环境&#xff08;Java二进制字节码的运行环境&#xff09; 特点&#xff1a; Java 虚拟机基于二进制字节码执行&#xff0c;由一套字节码指…

【网络协议】开放式最短路径优先协议OSPF详解(三)

前言 在第一部分和第二部分&#xff0c;我们了解了OSPF操作背后的概念。在第三部分&#xff0c;我们将讨论多区域OSPF。我们将了解它与单区域OSPF的不同&#xff0c;并探讨其操作背后的各种概念。 【网络协议】开放式最短路径优先协议OSPF详解&#xff08;一&#xff09; 【…

【C语言】_指针与数组

目录 1. 数组名的含义 1.1 数组名与数组首元素的地址的联系 1.3 数组名与首元素地址相异的情况 2. 使用指针访问数组 3. 一维数组传参的本质 3.1 代码示例1&#xff1a;函数体内计算sz&#xff08;sz不作实参传递&#xff09; 3.2 代码示例2&#xff1a;sz作为实参传递 3…