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

【Python运维】容器管理新手入门:使用Python的docker-py库实现Docker容器管理与监控

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界

随着容器技术的广泛应用,Docker已经成为开发和运维中的标准工具之一。使用Python语言管理Docker容器,不仅可以自动化繁琐的容器操作,还能为系统监控与资源管理提供灵活的方案。本文将详细介绍如何使用Python的docker-py库来管理和监控Docker容器,覆盖从容器的启动、停止、删除到容器状态的实时监控等功能。通过示例代码和中文注释,逐步引导读者掌握Docker容器管理工具的基本实现,并结合实际应用场景,帮助读者更好地理解Python在容器化管理中的应用。


1. 引言

Docker已经成为软件开发和部署的标配工具,它通过提供一个隔离的环境来运行应用程序,从而简化了开发和运维过程。容器化的最大优点是应用能够在任何地方运行,无论是在开发环境、测试环境还是生产环境。

然而,管理大量的容器、监控其状态、获取日志信息等任务,对于运维人员来说是一项繁琐且重复的工作。幸运的是,Python的docker-py库可以帮助我们实现自动化管理Docker容器的功能。本文将介绍如何使用docker-py库实现一个简单的容器管理工具,包括:

  • 启动、停止、重启容器
  • 查看容器的状态
  • 获取容器的日志
  • 获取系统的资源使用情况
  • 管理容器的网络和数据卷
  • 实现定时任务和健康检查

2. 安装docker-py库

在开始之前,我们需要安装docker-py库。可以通过pip命令进行安装:

pip install docker

docker-py是一个Python库,允许我们通过Python脚本与Docker引擎进行交互,创建和管理容器。安装完成后,我们可以在Python中导入docker模块,并开始使用它提供的API。


3. 配置Docker环境

在使用docker-py之前,确保你的系统中已经安装并配置了Docker。你可以通过以下命令检查Docker是否已经正确安装并正在运行:

docker --version

如果Docker未安装,可以参考官方文档进行安装。安装完成后,确保Docker服务正在运行,并且Python代码可以访问Docker守护进程。


4. 创建一个Docker客户端

docker-py库通过docker.DockerClient类与Docker守护进程进行交互。我们首先需要创建一个Docker客户端对象:

import docker# 创建Docker客户端对象
client = docker.from_env()

在上面的代码中,docker.from_env()方法会自动使用环境变量中的Docker配置信息(如Docker主机地址、端口等),从而连接到本地Docker守护进程。

如果Docker守护进程运行在远程主机上,可以通过指定base_url来连接到远程Docker主机,例如:

client = docker.DockerClient(base_url='tcp://<hostname>:<port>')

5. 启动和停止容器

在容器管理中,启动和停止容器是最常见的操作之一。使用docker-py库,我们可以非常方便地实现这些功能。

启动容器

要启动一个新的容器,我们可以使用client.containers.run()方法。这个方法会创建并启动一个新的容器。以下代码启动一个基于nginx镜像的容器:

# 启动一个nginx容器
container = client.containers.run("nginx", detach=True)
print(f"容器 {container.id} 启动成功")

detach=True参数表示容器将在后台运行。如果希望容器在前台运行并阻塞当前进程,可以将detach设置为False

停止容器

我们可以使用container.stop()方法来停止一个正在运行的容器:

# 停止容器
container.stop()
print(f"容器 {container.id} 已停止")

需要注意的是,container.stop()会向容器发送SIGTERM信号,然后等待容器停止。如果容器在规定的时间内没有停止,docker-py会发送SIGKILL信号强制停止容器。

重启容器

容器的重启操作也非常简单,只需要调用container.restart()方法即可:

# 重启容器
container.restart()
print(f"容器 {container.id} 已重启")

6. 查看容器的状态

docker-py提供了简单的方法来查看容器的状态。例如,使用container.status可以获取容器的当前状态(如runningexited等):

# 查看容器状态
status = container.status
print(f"容器 {container.id} 当前状态: {status}")

容器的状态包括:

  • running:容器正在运行
  • paused:容器已暂停
  • exited<

相关文章:

【Python运维】容器管理新手入门:使用Python的docker-py库实现Docker容器管理与监控

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器技术的广泛应用,Docker已经成为开发和运维中的标准工具之一。使用Python语言管理Docker容器,不仅可以自动化繁琐的容器操作,还能…...

SQL基础入门——SQL基础语法

1. 数据库、表、列的创建与管理 在SQL中&#xff0c;数据库是一个数据的集合&#xff0c;包含了多个表、视图、索引、存储过程等对象。每个表由若干列&#xff08;字段&#xff09;组成&#xff0c;表中的数据行代表记录。管理数据库和表的结构是SQL的基础操作。 1.1 创建数据…...

Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组

一、回顾统计函数 1、使用SUMIF函数 sumif(条件区域,求和条件,求和区域) 2、使用SUMIFS函数 SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...) 二、认识数组 1、数组生成原理 所谓数组&#xff0c;是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…...

第二节——计算机网络(四)物理层

车载以太网采用差分双绞线车载以太网并未指定特定的连接器&#xff0c;连接方式更为灵活小巧&#xff0c;能够大大减轻线束重量。传统以太网一般使用RJ45连接器连接。车载以太网物理层需满足车载环境下更为严格的EMC要求&#xff0c;100BASE-T1\1000BASE-T1对于非屏蔽双绞线的传…...

【接口封装】——11、Qt 的单例模式

宏定义&#xff1a; Q_GLOBAL_STATIC(NotifyManager,theInstance) 函数定义&#xff1a; class NotifyManager : public QObject {Q_OBJECTpublic:NotifyManager(QObject *parent nullptr);~NotifyManager();static NotifyManager*getInstance(); //单例模式 } 源代码&#…...

理解字母形状,从而获得含义

英文字母&#xff0c;都是象形符号&#xff0c;所以&#xff0c;理解其形象&#xff0c;所象之形&#xff0c;是一项重要的工作&#xff0c;和非常有意义事情。也是我们快速记住大量单词&#xff0c;将单词从底层逻辑开始理清&#xff0c;融会贯通扩展记忆容量的重要办法之一。…...

redis揭秘-redis01-redis单例与集群安装总结

文章目录 【README】【1】安装单机【1.1】安装环境【1.2】安装步骤 【2】redis集群主从模式配置【2.1】集群架构【2.2】redis集群主从模式搭建步骤【2.3】redis集群主从模式的问题&#xff08;单点故障问题&#xff09; 【3】redis集群哨兵模式配置【3.1】集群架构【3.2】redis…...

mini-spring源码分析

IOC模块 关键解释 beanFactory&#xff1a;beanFactory是一个hashMap, key为beanName, Value为 beanDefination beanDefination: BeanDefinitionRegistry&#xff0c;BeanDefinition注册表接口&#xff0c;定义注册BeanDefinition的方法 beanReference&#xff1a;增加Bean…...

RVO动态避障技术方案介绍

原文&#xff1a;RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题&#xff0c;当我们寻路的时候&#xff0c;其它人也在寻路&#xff0c;如何避免不从其它人的位置穿过。这个叫做动态避障&#xff0c;目前主流的解决方案就是RVO。本节我们来介绍…...

HTML CSS JS基础考试题与答案

一、选择题&#xff08;2分/题&#xff09; 1&#xff0e;下面标签中&#xff0c;用来显示段落的标签是&#xff08; d &#xff09;。 A、<h1> B、<br /> C、<img /> D、<p> 2. 网页中的图片文件位于html文件的下一级文件夹img中&#xff0c;…...

【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现

代码主要实现了以下功能&#xff1a; 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode&#xff0c;包含节点数据值&#xff08;字符类型&#xff09;以及指向左右子树的指针。 定义了顺序栈结构体 SqStack&#xff0c;用于存储二叉树节点指针&#xff0c;实现非递归遍历…...

MySQL Workbench 数据库建模详解:从设计到实践

目录 数据库建模基础概念MySQL Workbench 简介与安装 什么是 MySQL Workbench&#xff1f;安装与环境配置 MySQL Workbench 数据库建模功能详解 EER 图&#xff08;实体关系图&#xff09;数据库反向工程数据库正向工程模型同步与版本管理 MySQL Workbench 数据库建模实战教程…...

【字体】Fire Code连字效果开启

Vscode 开启方法 1、设置字体Fire Code 放在最前面的即可&#xff1a; 2、启用连字 继续往下找到“在 settings.json 中编辑”&#xff0c;然后设置"editor.fontLigatures": true &#xff1a; 保存即可。 Sublime 开启方法 设置中设置字体后&#xff0c;启…...

springboot kafka在kafka server AUTH变动后consumer自动销毁

前言 笔者使用了kafka用来传输数据&#xff0c;笔者在今年10月写了文章&#xff0c;怎么使用配置化实现kafka的装载&#xff1a;springboot kafka多数据源&#xff0c;通过配置动态加载发送者和消费者-CSDN博客 不过在实际运行中&#xff0c;kafka broker是加密的&#xff0c…...

第六届国际科技创新(IAECST 2024)暨第四届物流系统与交通运输(LSTT 2024)

重要信息 会议官网&#xff1a;www.lstt.org 大会时间&#xff1a;2024年12月6-8日 大会地点&#xff1a;中国-广州 简介 第六届国际科技创新暨第四届物流系统与交通运输国际&#xff08;LSTT 2024&#xff09;将于2024年12月6-8日在广州举办&#xff0c;这是一个集中探讨…...

【Vue3】【Naive UI】< a >标签

【Vue3】【Naive UI】< a >标签 超链接及相关属性其他属性 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;n-button&#xff1e; 标签 【VUE3】【Naive UI】&#xff1c;a&#xff1e; 标签 <a> 标签HTML中的一个锚&…...

Fortran mpi在Linux的安装

最近编译一个程序需要需要 Fortran mpi 编译器&#xff0c;则需要安装 Fortran编辑器和MPI库&#xff0c;以下是具体的安装步骤&#xff1a; 一、安装 Fortran 编译器&#xff08;gfortran&#xff09; 在conda环境中安装&#xff1a; conda install -c conda-forge gfortra…...

蓝桥-希尔排序模板题

第一眼看到这个题还在想希尔排序模板不记得了&#xff0c;于是去网上了搜了一个&#xff0c;但是考虑到这种题只看测试点能不能通过&#xff0c;于是用Arrays方法试了一下&#xff0c;发现也可以。 1.希尔排序模板ac代码 package yunkePra;import java.util.Scanner;public cl…...

深入学习指针(5)!!!!!!!!!!!!!!!

文章目录 1.回调函数是什么&#xff1f;2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递…...

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…...

nodejs相关知识介绍

1、nodejs官方文档&#xff1a; https://nodejs.org/zh-cn nodejs可以用nvm进入安装&#xff1b; 2、npm说明&#xff1a; npm官方教程&#xff1a;https://npm.p2hp.com/ npm是 Node.js 的标准包管理器&#xff0c;也就是说nodejs安装好&#xff0c;npm也就安装好了&#…...

How to monitor Spring Boot apps with the AppDynamics Java Agent

本文介绍如何使用 AppDynamics Java 代理监视 Azure Spring Apps 中的 Spring Boot 应用程序。 使用 AppDynamics Java 代理可以&#xff1a; 监视应用程序使用环境变量配置 AppDynamics Java 代理 在 AppDynamics 仪表板中检查所有监视数据 How to monitor Spring Boot app…...

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是&#xff1a;当前操作系统版本为Windows Server 2016 Standard版本&#xff0c;其自带的Microsoft .NET Framework 版本为4.6太低&#xff0c;不满足要求。 根据报错的提示&#xff0c;点击链接…...

TypeScript核心语法(5)——函数

简介​ 函数的类型声明&#xff0c;需要在声明函数时&#xff0c;给出参数的类型和返回值的类型。 function hello(a: string): void {console.log("hello " txt); } 上面示例中&#xff0c;函数hello()在声明时&#xff0c;需要给出参数a的类型&#xff08;stri…...

【MyBatis】验证多级缓存及 Cache Aside 模式的应用

文章目录 前言1. 多级缓存的概念1.1 CPU 多级缓存1.2 MyBatis 多级缓存 2. MyBatis 本地缓存3. MyBatis 全局缓存3.1 MyBatis 全局缓存过期算法3.2 CacheAside 模式 后记MyBatis 提供了缓存切口&#xff0c; 采用 Redis 会引入什么问题&#xff1f;万一遇到需强一致场景&#x…...

ARIMA-神经网络混合模型在时间序列预测中的应用

ARIMA-神经网络混合模型在时间序列预测中的应用 1. 引言 1.1 研究背景与意义 时间序列预测在现代数据科学中扮演着越来越重要的角色。从金融市场的价格走势到工业生产的需求预测,从气象数据的天气预报到用电量的负荷预测,时间序列分析无处不在。传统的统计方法和现代深度学习…...

Scala关于成绩的常规操作

score.txt中的数据&#xff1a; 姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语 张伟&#xff0c;87&#xff0c;92&#xff0c;88 李娜&#xff0c;90&#xff0c;85&#xff0c;95 王强&#xff0c;78&#xff0c;90&#xff0c;82 赵敏&#xff0c;92&#xff0c;8…...

【Maven】项目创建

3. Maven的应用 本章主要内容&#xff1a; 使用 Maven 创建 JavaSE 项目使用 Maven 创建 JavaWeb 项目&#xff0c;在本地部署 Tomcat 测试导入 Maven 项目 3.1 基于Maven开发JavaSE的项目 3.1.1 流程 1、File—>new—>Project—>Empty Project Location&#xff1…...

基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现

背景 LlamaFactory 的 LoRA 微调功能非常便捷&#xff0c;微调后的模型&#xff0c;没有直接支持 vllm 推理&#xff0c;故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署&#xff0c;调用 API 时的响应速度&#xff0c;仍然没有vllm批量推理的速度快。 …...

Vue进阶之单组件开发与组件通信

书接上篇&#xff0c;我们了解了如何快速创建一个脚手架&#xff0c;现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时&#xff0c;要在新建文件夹中打开终端创建一个基本的脚手架&#xff0c;可在脚手架中原有的文件中修改或在相应路径重新创建&#xf…...

HCIE IGP双栈综合实验

实验拓扑 实验需求及解法 本实验模拟ISP网络结构&#xff0c;R1/2组成国家骨干网&#xff0c;R3/4组成省级网络&#xff0c;R5/6/7组成数据中 心网络。 配置所有ipv4地址&#xff0c;请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…...

Unity 超链接文本类

注&#xff1a;该脚本在文本显示不全时会有问题。 HyperlinkText.cs using System; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;namespace MYT…...

Vim小白学习指南

博客 Vim编辑器简介 Vim是一个非常高效的文本编辑器&#xff0c;最初源于Vi编辑器。它以其强大的文本编辑能力和快捷键而闻名于程序员和系统管理员。Vim的特别之处在于它提供了多种模式&#xff0c;每种模式都有不同的功能。 Vim的基本模式 1. 普通模式&#xff08;Normal …...

【微服务】Nacos配置管理

一、统一配置管理 1、配置统一管理 2、微服务获取配置 ①引入Nacos的配置管理客户端依赖(usersevice下) <!--nacos的配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-confi…...

从单机缓存到分布式缓存那些事

作者&#xff1a;秦怀 1 缓存前世今生 1.1 故事从硬件开始 Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义&#xff0c;用于电脑工程领域。当时没有 Cache&#xff0c;CPU 和内存都很慢&#xff0c;CPU 直接访…...

华为新手机和支付宝碰一下 带来更便捷支付体验

支付正在变的更简单。 11月26日&#xff0c;华为新品发布会引起众多关注。发布会上&#xff0c;华为常务董事余承东专门提到&#xff0c;华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”&#xff0c;并且表示经过华为和支付宝的共同优化&#xff0c;使用“碰…...

element ui select绑定的值是对象的属性时,显示异常.

需要声明 value-key"value",如果还不行可能是数据类型不一致数字0和字符串0是不一致的. el-select v-model"value" clearable placeholder"Select" value-key"value" style"width: 240px"><!-- <el-option v-for&…...

基于Springboot开发的时光兼职网

一、功能介绍 时光兼职网包含管理员、用户、商家三个角色以及前后台系统。 前台系统功能 首页、兼职信息推荐、查看更多等 职位申请、申请日期、上传简历、点击下载简历、留言反馈等 个人中心、上传图片、更新信息等 后台系统功能 用户登录&#xff1a; 个人中心、修改密码…...

Vue3 Ts 如何获取组件的类型

vue3 Ts ref 子组件 1、默认写法 typeof&#xff1a;获取ts类型 InstanceType&#xff1a;获取模版的实例 <tempolate><myComponent ref"myCompRef"> </tempolate><script setup lang"ts"> import { ref } from "vue&quo…...

Unity类银河战士恶魔城学习总结(P146 Delete Save file-P147 Encryption of save data删除数据和加密数据)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了快速删除存档和加密存档 以下是加密前和加密后的对比 SaveManager.cs using System.Collections; using System.Collection…...

Uniapp 使用自定义字体

技术栈&#xff1a;Uniapp 简介 为了更好的还原UI图片效果&#xff0c;往往需要使用特殊字体&#xff0c;引入字体包。 因实际业务运行平台在微信小程序上&#xff0c;对发布包的项目文件大小有限制&#xff0c;项目中某些比较大的静态资源需要放在服务器上来远程加载&#x…...

Scala

统计成绩练习 1.计算每个同学的总分和平均分 2.统计每个科目的平均分 3.列出总分前三名和单科前三名&#xff0c;并保存结果到文件中 解题思路如下&#xff1a; 1.读入txt文件&#xff0c;按行读入 2.处理数据 &#xff08;1&#xff09;计算每个同学的总分…...

fnOS中安装HAOS,集成haier

只作为自己记录重要事项&#xff0c;不做详细教程。大致流程 安装飞牛OS&#xff0c;简称fnosfnos中有集成Docker在docker中安装haos在haos中安装hacs在hacs中添加haier 在docker中安装haos 安装好fnos后&#xff0c;docker里面找到haos&#xff0c;里面下载最多的&#xff0c…...

基于群晖搭建个人图书架-TaleBook based on Docker

前言 在群晖Container Manager中部署失败&#xff0c;转通过ssh部署。 一、准备工作 名称备注群晖SSH“终端机和SNMP”中启用SSH软件secureCRT等docker-compose.ymlGithub下载并修改 二、过程 2.1 创建本地文件夹 本地路径为&#xff1a; /docker/Calibre/data 2.2 下载d…...

spring导出多个文件,要求打包成压缩包

背景 业务要求我们批量生成一批excel&#xff0c;并将这些excel压缩成一个压缩包导出给前端。 实现 java自带了ZipOutputStream&#xff0c;可以直接生成压缩包&#xff0c;因此&#xff0c;我们直接使用这个&#xff0c;在内存中生成压缩包&#xff0c;直接返回给前端。&am…...

Vue 3中实现多个自定义组件之间的切换

在 Vue 3 中&#xff0c;如果你想在 HTML 页面中实现多个自定义组件之间的切换&#xff0c;你可以使用 Vue 的条件渲染功能&#xff0c;比如 v-if、v-else-if 和 v-else 指令&#xff0c;或者使用 <component> 标签结合 is 属性来动态绑定组件。 1. 打开HBuilder X 图1 …...

opengl 三角形

最后效果&#xff1a; OpenGL version: 4.1 Metal 不知道为啥必须使用VAO 才行。 #include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream> #include <vector>void framebuffer_size_callback(GLFWwindow *window, int width, int heigh…...

shell脚本练习(2)

1. 使用case实现成绩优良差的判断 2. for创建20用户 用户前缀由用户输入 用户初始密码由用户输入 例如&#xff1a;test01,test10 3. for ping测试指网段的主机 网段由用户输入&#xff0c;例如用户输入192.168.2 &#xff0c;则ping 192.168.2.10 --- 192.168.2.2…...

JS数组的一些方法

前言 忘了在哪里听说JS是用来处理各种各样的数据的&#xff0c;所以掌握一些数组的处理方法极其重要 而最近学校要进行测试&#xff0c;本着复习回顾的想法&#xff0c;决定将一些我所知道的数组处理方法整理整理 不过难免有遗漏与错误&#xff0c;还望各位大佬指正 forEac…...

学习threejs,使用CubeCamera相机创建反光效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️CubeCamera 立方体相机 二、…...