这里做一下日常学习的记录,代码运行效果在最后

#!/usr/bin/python
# -*- coding: utf-8 -*-
# -- author : valecalida --
# edit_time: 2020/2/24 下午6:36
from subprocess import getoutput as shell
import systotal_docker_id = "docker ps -a -q"
unalive_docker_id = "docker ps -a | grep Exited | awk -F ' ' '{print $1}' "
unalive_docker_name = "docker ps -a | grep Exited | awk -F ' ' '{print $NF}'"alive_docker_id = "docker ps -q"get_name_part1 = "docker ps -a | grep "
get_name_part2 = " | awk -F ' ' '{print $NF}' | grep -v NAMES"get_ip_part1 = "docker inspect "
get_ip_part2 = " | grep 'IPAddress' | tail -n 1 | awk -F ':' '{print $2}' | cut -b 3-12"get_port = " | grep HostPort | head -n 1 | awk -F ':' '{print$2}' | cut -c 3-6"
start_ins = "docker start "
stop_ins = "docker stop "def alive_instance_info():"""这是当前存活的实例的个数"""alive_instances = shell(alive_docker_id).split('\n')return alive_instances, len(alive_instances)def get_alive_instances_infos():"""显示当前正在运行的docker实例"""containers_id, _ = alive_instance_info()containers, containers_ip, containers_name, containers_port, ins_code = [], [], [], [], []for i in containers_id:containers_name.append(shell(get_name_part1 + str(i) + get_name_part2))containers_ip.append(shell(get_ip_part1 + str(i) + get_ip_part2))containers_port.append(shell(get_ip_part1 + str(i) + get_port))for k in range(len(containers_id)):containers.append([str(k + 1),containers_id[k],containers_name[k], containers_ip[k], containers_port[k]])ins_code.append(k + 1)return containers, ins_codedef show_alive_instance():containers, _ = get_alive_instances_infos()# print(containers)print("\tNow,the instances running are list as follows: ")print("\t\t实例编号\t容器的ID\t\t容器的名字\t容器的IP\t\t容器的端口")for container in containers:print("\t\t", end="")for info in container:print("%4s\t" % info, end="\t")print("\t")print()def unalive_instances():"""当前没有运行的实例的ID"""unalive_instance = shell(unalive_docker_id).split('\n')return unalive_instance, len(unalive_instance)def get_unalive_instances_infos():container_id, _ = unalive_instances()containers_name = shell(unalive_docker_name).split('\n')containers_ip, containers, ins_code = [], [], []for i in container_id:containers_ip.append("未运行,无IP")for k in range(len(containers_ip)):containers.append([str(k + 1), container_id[k], containers_name[k], containers_ip[k]])ins_code.append(k + 1)return containers, ins_codedef show_unalive_instance():containers, _ = get_unalive_instances_infos()print("\tNow,the instances not running are list as follows: ")print("\t\t实例编号\t容器的ID\t\t容器的名字\t容器的IP")for container in containers:print('\t', end="")for info in container:print("\t%4s" % info, end="\t ")print()print()def start_instance(value):containers = valuefor container in containers:try:shell(start_ins + container[1])print("start %s successful" % container[1])except BaseException as e:print("开启实例的时候好像出了点问题...")def stop_instance(value):containers = valuefor container in containers:try:shell(stop_ins + container[1])print("stop %s successful" % container[1])except BaseException as e:print("关闭实例的时候好像出了点问题...")def docker_menu():print(">>" * 5, "Docker managemet program by valecalida", "<<" * 5)print("\t\t1 >> 查看当前docker的运行状态")print("\t\t2 >> 开启指定(全部)容器")print("\t\t3 >> 关闭指定(全部)容器")print("\t\tq >> 退出程序(q)")def main():while True:docker_menu()len_alive = len(shell(alive_docker_id).split())total = len(shell(total_docker_id).split('\n'))len_unalive = total - len_aliveuser_choice_1 = input("输入您想要进行的操作的序号 >> ")if user_choice_1 == 'q':sys.exit()elif user_choice_1 == '1':if len_alive == 0 and len_unalive != 0:show_unalive_instance()elif len_unalive == 0 and len_alive != 0:show_alive_instance()elif len_alive != 0 and len_unalive != 0:show_unalive_instance()show_alive_instance()elif user_choice_1 == '2':if len_unalive == 0:print("\t当前没有未开启的docker容器\n")else:show_unalive_instance()containers, ins_code = get_unalive_instances_infos()user_choice_2 = input("请输入您想要启动的docker实例编号(a all) >> ")try:if user_choice_2 == 'a':start_instance(containers)elif user_choice_2 == 'q':print("\t正在返回上级菜单...")elif int(user_choice_2) in ins_code:for i in range(len(ins_code) + 1):if int(user_choice_2) == i + 1:start_instance([containers[i]])breakelse:continueelse:print("\t看起来您的输入好像有点问题...")except BaseException as e:print("\t看起来您的输入好像有点问题...")elif user_choice_1 == '3':flag = len(shell(alive_docker_id).split())if flag == 0:print("当前没有在运行的实例,无需执行关闭操作")else:show_alive_instance()containers, ins_code = get_alive_instances_infos()user_choice_2 = input("请输入您想要关闭的docker实例编号(a all) >> ")try:if user_choice_2 == 'a':stop_instance(containers)elif user_choice_2 == 'q':print("\t正在返回上级菜单...")elif int(user_choice_2) in ins_code:for i in range(len(ins_code) + 1):if int(user_choice_2) == i + 1:stop_instance([containers[i]])breakelse:continueelse:print("\t看起来您的输入好像有点问题...")except BaseException as e:print("\t看起来您的输入好像有点问题...")else:print("\t您的输入好像不太符合要求")if __name__ == '__main__':main()

运行基本情况如下:

$ python3 docker_opetation.py
>>>>>>>>>> Docker managemet program by valecalida <<<<<<<<<<1 >> 查看当前docker的运行状态2 >> 开启指定(全部)容器3 >> 关闭指定(全部)容器q >> 退出程序(q)
输入您想要进行的操作的序号 >> 1Now,the instances not running are list as follows: 实例编号 容器的ID       容器的名字   容器的IP1      9ad0dd958cc7        webug       未运行,无IP  2      2d3586a30e7e        mysql       未运行,无IP  Now,the instances running are list as follows: 实例编号    容器的ID       容器的名字   容器的IP       容器的端口1      03f1ca1331c7        dvwa        172.17.0.2      8001            >>>>>>>>>> Docker managemet program by valecalida <<<<<<<<<<1 >> 查看当前docker的运行状态2 >> 开启指定(全部)容器3 >> 关闭指定(全部)容器q >> 退出程序(q)
输入您想要进行的操作的序号 >> 2Now,the instances not running are list as follows: 实例编号 容器的ID       容器的名字   容器的IP1      9ad0dd958cc7        webug       未运行,无IP  2      2d3586a30e7e        mysql       未运行,无IP  请输入您想要启动的docker实例编号(a all) >> 1
start 9ad0dd958cc7 successful
>>>>>>>>>> Docker managemet program by valecalida <<<<<<<<<<1 >> 查看当前docker的运行状态2 >> 开启指定(全部)容器3 >> 关闭指定(全部)容器q >> 退出程序(q)
输入您想要进行的操作的序号 >> 3Now,the instances running are list as follows: 实例编号 容器的ID       容器的名字   容器的IP       容器的端口1      9ad0dd958cc7        webug       172.17.0.3      8002            2       03f1ca1331c7        dvwa        172.17.0.2      8001            请输入您想要关闭的docker实例编号(a all) >> 1
stop 9ad0dd958cc7 successful
>>>>>>>>>> Docker managemet program by valecalida <<<<<<<<<<1 >> 查看当前docker的运行状态2 >> 开启指定(全部)容器3 >> 关闭指定(全部)容器q >> 退出程序(q)
输入您想要进行的操作的序号 >> q

Linux下Python3对Docker进行基本的管理(包含显示端口,显示IP,一键启动,一键关闭)相关推荐

  1. linux下python3源码安装及卸载

    Linux下Python3的源码编译安装和卸载方法 [日期:2019-06-21] 来源:博客园  作者:wuli潇萧 [字体:大 中 小] (一)Linux下软件的源码编译安装和卸载方法 Linux ...

  2. linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题

    linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题 参考文章: (1)linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 M ...

  3. Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页

    QUESTION:Linux下的Tomcat服务器修改server.xml中的8080端口号后出现不能访问首页 ANSWER: 简单直接的有效方法:重装tomcat服务器.

  4. Linux下eMMC,SD卡格式化和分区管理

    Linux下eMMC,SD卡格式化和分区管理 一.Linux下查看eMMC设备是否正确识别 在命令行终端,输入ls /dev/mmc* -l,查看eMMC是否成功识别 dev目录下成功识别到了eMMC ...

  5. linux进入gbase数据库命令,Linux下Python3通过PYODBC连接到GBase 8s数据库

    操作系统:CentOS 7.8 64-bit 软件需求: GBase 8s CSDK 2.0.1A2_2 Python 3.6.8 及Python-devel 3.6.8 unixODBC 2.3.1 ...

  6. Linux下Python3编程中shebang的正确设置

    Linux下一般情况下输入python或者python2会出现python2.7的IDLE,输入python3会出现python3.x的交互式界面,这些都是以软链接的形式存在于PATH中的,但是我们的 ...

  7. Linux下简单使用docker的图文教程(完整版)

    一.Docker简介 1.概念 Docker里面有三个概念分别是:镜像,仓库,容器. 二.Docker安装 1.安装需要的安装包 命令:sudo yum install -y yum-utils de ...

  8. linux可以使用的远程管理,linux下可以使用以下()方法进行远程管理

    linux下可以使用以下()方法进行远程管理 更多相关问题 1013的倒数是______:______和14互为倒数. 12的倒数是______,______的倒数为47. 试说明按年度计划分配率分配 ...

  9. linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...

    级别: 初级 燚 杨 (), 计算机科学硕士 2006 年 2 月 16 日 本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数.模块参数 ...

  10. Linux下:文件与路径、用户管理、常用命令、vim

    文章目录 第一章: Linux文件与路径 1.1 文件结构 1.2 基本概念 1.3 基本命令信息 1.3.1 查看linux 系统信息(修改主机名) 1.3.2 ls 1.3.3 cd/pwd 1. ...

最新文章

  1. Java开发中文件读取方式总结
  2. 【收藏】基于QGIS的Google Earth Engine插件已发布
  3. 用于matplotlib对齐很有用的算法,可用于面试笔试
  4. log4j2.xml
  5. ARP、Tracert、Route 与 NBTStat命令详解
  6. 【web前端开发】介绍div+css的6个优点
  7. 史上最全MySQL锁机制
  8. GoogLenet网络解读及代码实现(Pytorch)
  9. oracle数据库通过SQL profile 绑定SQL最优执行计划(个人实践)
  10. 转载《数据的olap模式》
  11. 网易云播放器外链插入html,Wordpress网易云外链音乐播放调用
  12. 用PHP查看微信撤回的消息,vbot微信聊天机器人微信聊天消息详解(9):撤回消息和防撤回消息...
  13. MIPS中addi指令被分成三条指令的问题
  14. 将靠父id的层级关系处理成编码形式
  15. 电脑蓝屏的几种状况处理
  16. ThingWorx公开课圆满结束
  17. C++的替代:微软如何使用rust?
  18. 最新Android框架排行榜。
  19. 哪个求职App最容易找到好工作?2019在线求职招聘市场研究报告
  20. 四足机器人并联腿足端轨迹Matlab仿真

热门文章

  1. 区块链开源框架 HyperLedger Fabric 学习思路分享
  2. Cocos2d-x 3.X手游开发实例详解
  3. 深入灵魂的共鸣 (《梦断代码》读后感)
  4. Coursera视频无法观看的三种不同解决方法(亲测有效)
  5. C/C++中static与const的区别与联系
  6. matplotlib绘图实例:pyplot、pylab模块及作图参数
  7. 澳洲大学计算机本科课程,澳洲留学 澳洲大学的本科课程分为6大类
  8. js base64图片太大_JS实现base64图片下载 简易方法
  9. python分支结构基础实训_python-002基础——分支结构
  10. Win10装Ubuntu双系统步骤做法