owershell,docker,cli,命令,docker ps,docker image

第一章 在linux中搭建docker环境

目的:
在任意版本的linux(物理机,虚拟机,节点机)中,安装docker服务。

动作:
教程=略,不是本文主要目的。请参考官网。

ubuntu
https://docs.docker.com/install/linux/docker-ce/ubuntu/

centos
https://docs.docker.com/install/linux/docker-ce/centos/

第二章 安装linux版powershell

目的:
在linux发行版上,安装powershell。

动作:
教程=略,不是本文主要目的。请参考官网。
https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md

系统需求:
问:目前哪些版本linux能安装上powershell?
答:
◦Windows 10 IoT Core(arm32的cpu,本质上是win,树莓派硬件上的win10) 
◦Raspbian Stretch(arm32的cpu,树莓派官方操作系统Raspbian,基于大便,所以叫树莓便。)
◦MAC OS X 10.11
◦Ubuntu 14.04/16.04/17.10
◦Debian8.x/9.x 
◦CentOS 7.x/RHEL 7.x/Fedora25/Fedora26/Fedora27
◦open SUSE 42及以上/SUSE Linux Enterprise Server 12 SP2
◦Docker。LINUX发行版中,安装容器dockerd,docker中运行powershell。
◦Arch Linux (archl inux 没有版本号)
◦Linux AppImage 容器(portable application single binary)  https://github.com/probonopd/AppImageKit
◦Kali Linux

centos7及以上,安装powershell:
curl -o /etc/yum.repos.d/microsoft.repo  https://packages.microsoft.com/config/rhel/7/prod.repo 
sudo yum remove -y powershell #删除旧版 
yum install -y powershell-6.0.5
pwsh -c 'mkdir -p "$env:HOME/.config/powershell" '
pwsh -c 'Add-Content  -Value "Set-PSReadlineOption -EditMode Windows" -LiteralPath $profile '
pwsh -c 'Add-Content  -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '

第三章 升级psreadline(此步骤非必要)

目的:
升级powershell的psreadline模块。

动作:
1 请把终端软件的键盘,的BACKSPACE,设置成 ascii127(ctrl + ?)
2 pwsh
3 Install-Module -Name PSReadLine -AllowPrerelease -Force -SkipPublisherCheck

第四章 安装powershell的,docker命令模块

目的:
给linux版powershell,安装docker模块。完成后,就有了马甲docker命令。

官网在:
https://github.com/Microsoft/Docker-PowerShell/

动作:
pwsh
Register-PSRepository -Name DockerPS-Dev -SourceLocation https://ci.appveyor.com/nuget/docker-powershell-dev
Install-Module Docker -Repository DockerPS-Dev

注意:

此模块在官网已经绝种   ;(

我现把 docker-for-powershell绝种模块.tar.gz 放出。这个模块微软已经不维护了,这篇文章作者改了ps 6.0.4版本,有人能接手这个docker模块,欢迎联系作者继续开发

由于ps 6.1稳定版升级改变了功能。此模块支持ps core 6.04 稳定版。不支持ps core 6.1 稳定版。

你或许需要:

yum remove powershell

rpm -ivh https://packages.microsoft.com/rhel/7/prod/powershell-6.0.4-1.rhel.7.x86_64.rpm

模块的用法:
解压到$env:psmodulepath即可。
对于linux,原来存放模块的路径为:
/usr/local/share/powershell/Modules/

查看有哪些马甲docker命令:
get-command -module docker

CommandType     Name                                               Version    Source      -------------------------------------------------------------------------------------Alias           Attach-Container                                   0.1.0.111  Docker                                                              Alias           Build-ContainerImage                               0.1.0.111  Docker                                                             Alias           Commit-Container                                   0.1.0.111  Docker                                                             Alias           Exec-Container                                     0.1.0.111  Docker                                                             Alias           Load-ContainerImage                                0.1.0.111  Docker                                                             Alias           Pull-ContainerImage                                0.1.0.111  Docker                                                             Alias           Push-ContainerImage                                0.1.0.111  Docker                                                             Alias           Run-ContainerImage                                 0.1.0.111  Docker                                                             Alias           Save-ContainerImage                                0.1.0.111  Docker                                                             Alias           Tag-ContainerImage                                 0.1.0.111  Docker                                                             Cmdlet          Add-ContainerImageTag                              0.1.0.111  Docker                                                             Cmdlet          ConvertTo-ContainerImage                           0.1.0.111  Docker                                                             Cmdlet          Copy-ContainerFile                                 0.1.0.111  Docker                                                             Cmdlet          Enter-ContainerSession                             0.1.0.111  Docker                                                             Cmdlet          Export-ContainerImage                              0.1.0.111  Docker                                                             Cmdlet          Get-Container                                      0.1.0.111  Docker                                                             Cmdlet          Get-ContainerDetail                                0.1.0.111  Docker                                                             Cmdlet          Get-ContainerImage                                 0.1.0.111  Docker                                                             Cmdlet          Get-ContainerNet                                   0.1.0.111  Docker                                                             Cmdlet          Get-ContainerNetDetail                             0.1.0.111  Docker                                                             Cmdlet          Import-ContainerImage                              0.1.0.111  Docker                                                             Cmdlet          Invoke-ContainerImage                              0.1.0.111  Docker                                                             Cmdlet          New-Container                                      0.1.0.111  Docker                                                             Cmdlet          New-ContainerImage                                 0.1.0.111  Docker                                                             Cmdlet          New-ContainerNet                                   0.1.0.111  Docker                                                             Cmdlet          Remove-Container                                   0.1.0.111  Docker                                                             Cmdlet          Remove-ContainerImage                              0.1.0.111  Docker                                                             Cmdlet          Remove-ContainerNet                                0.1.0.111  Docker                                                             Cmdlet          Request-ContainerImage                             0.1.0.111  Docker                                                             Cmdlet          Start-Container                                    0.1.0.111  Docker                                                             Cmdlet          Start-ContainerProcess                             0.1.0.111  Docker                                                             Cmdlet          Stop-Container                                     0.1.0.111  Docker                                                             Cmdlet          Submit-ContainerImage                              0.1.0.111  Docker                                                             Cmdlet          Wait-Container                                     0.1.0.111  Docker   

其中:
Request-ContainerImage===Request-ContainerImage
Start-ContainerProcess===Exec-Container
Invoke-ContainerImage===Run-ContainerImage
Enter-ContainerSession===Attach-Container
Export-ContainerImage===Save-ContainerImage

简单使用:
Import-Module Docker
Get-Container  #这个命令就是 docker ps的马甲

第五章 正式讲解powershell,在管理docker方面的好处

目的1:
使用镜像名,或镜像名内包含的【字符串】来匹配容器,

动作1:
Get-Container | Where-Object {$_.Image -eq 'nginx'} |Stop-Container  #Get-Container相当于docker ps

讲解:
Get-Container,相当于docker ps。但是Get-Container返回的是对象。

【|】是管道。powershell的管道,是世界上唯一可以传输对象的。

Where-Object {} 是过滤语法。

Container的属性是:
$_.Image 是镜像名属性,其他属性是
$_.ID     字符串
$_.Command  字符串
$_.Created  日期型
$_.Status   字符串                 
$_.Names   字符串

image的属性是:
$_.ID          : sha256:的id
$_.ParentID    : 
$_.RepoTags    : {k8s.gcr.io/kube-controller-manager:v1.13.2}
$_.RepoDigests : 
$_.Created     : 19-1-11 上午12:06:28  日期型
$_.Size        : 146227986
$_.VirtualSize : 146227986
$_.Labels      :

-eq是表达式。可以有如下表达式:
$_.Image -eq '字符串' #不区分大小写相等。 'abc' -eq 'Abc'
$_.Image -match '字符串' #正则匹配。 'abc' -match '^a.c$'
$_.Image -like '*字符串*' # 'abc' -like '*bc*'
$_.数值型 -gt 123 # 456 -gt 123

$a = [datetime]'2018-03-17'
$_.日期型 -gt $a #

|Stop-Container,过滤完成后,输出一个或n个对象,然后用Stop-Container停止它。

------------------------------------------------------------
目的2:
powershell命令行中,tab自动补全,(容器命令相关的)参数名,参数值

动作2-1:
Get-Container -c,然后打tab,

结果2-1:
命令行出现:
Get-Container -ContainerIdOrName

-----------------
动作2-2:
Get-Container -ContainerIdOrName,然后打空格,然后依次打n次tab。

结果2-2:
命令行出现:
Get-Container -ContainerIdOrName 【docker ps 中列出的容器名】
依次打n次shift + tab则从后向前,列出容器名

-----------------
动作2-3:
Get-ContainerImage  -,然后打tab。Get-ContainerImage相当于docker image ls

结果2-3:
命令行出现:
Get-ContainerImage -ImageIdOrName
再打空格,再打tab 出现【docker image ls 中列出的容器名】

------------------------------------------------------------
场景:
同一个镜像,我运行了很多个,

ID                   Image           Command              Created                Status               Names               
--                   -----           -------              -------                ------               -----               
034c78b5e4e18b772... hello-world     /hello               18-3-19 下午5:20:03      Exited (0) 12 min... ecstatic_khorana    
8ced2c429e5ba0790... hello-world     /hello               18-3-17 下午9:05:00      Exited (0) 44 hou... objective_villani   
18cc9a6e1ea14ae8d... hello-world     /hello               18-3-9 下午5:03:08       Exited (0) 10 day... priceless_ardingh...

目的3-1:
编写脚本,匹配镜像名,状态码

powershell脚本代码3-1:
$状态码字串1 = Get-Container | Where-Object {$_.Image -eq 'hello-world'} | Select-Object Status 
#$状态码
#Exited (143) 24 hours ago
if ($状态码字串1 -like '*Exited (0)*')
{echo  '正常'}
else
{这里做点什么}

-----------------
目的3-2:
1匹配镜像名。
2排序,并输出
3取状态码

powershell脚本代码3-2:
$状态码字串2 = Get-Container | Where-Object {$_.Image -eq 'hello-world'} |Sort-Object -Property Created |Select-Object Status -Last 1 
$状态码 = $状态码字串2.status.split('(')[1].split(')')[0]

------------------------------------------------------------
docker ps命令有输出对不齐的烦恼,实际上所有linux命令都有输出对不齐的情况,而powershell永远没有这种情况。

目的4:
只输出docker ps的,names   command

动作4:
Get-Container |Select-Object names,command
#或Get-Container |Select-Object names,image

输出:
Names                           Command             
-----                           -------             
{/priceless_ardinghelli}        /hello              
{/zabbix}                       /config/bootstrap.sh
{/zabbix-db, /zabbix/zabbix.db} /run.sh             
{/zabbix-db-storage}            sh                  
{/pedantic_bose}                /hello

------------------------------------------------------------
问:如何给docker ps的输出分行,分列?
答:

分行:
(Get-Container)[0]  #输出第一行

分列:

(Get-Container).Image  #输出image列

第六章 结论

powershell的马甲版docker命令,比docker原生命令,有如下优点:
1 输出的显示数据,永远没有对不齐的问题。
2 powershell马甲版docker命令,是面向对象的。通过属性匹配docker的名字和参数,表达式支持正则,更强大。比用grep简单,严谨。
3 powershell的管道,支持对象。用起来强大简单。
4 powershell马甲版docker命令的,参数名,参数值,支持tab自动补全,用起来十分方便。
5 ps的马甲命令Get-Container,相当于docker ps。
它的输出,分行,分列。如下:用起来比docker ps输出的字符串要好。

ID  Image  Command  Created  Status  Names               
--    -----      -------          ------        ------     -----

需要说明的是,这些优点,本质上和docker命令无关。这是powershell命令行,比linux命令行的优点。

从前,有一头“青翼蝠王”韦瞎笑,在z呼发贴说:“管道中传对象,是没必要的”。是这样么?
我的这篇帖子,很好地说明了这一点。

原文地址:https://www.cnblogs.com/piapia/p/8651332.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

巧用linux版powershell,管理linux下的docker相关推荐

  1. linux版_巧用linux版powershell,管理linux下的docker

    owershell,docker,cli,命令,docker ps,docker image 第一章 在linux中搭建docker环境 目的: 在任意版本的linux(物理机,虚拟机,节点机)中,安 ...

  2. 使用Powershell管理Linux 下的 SQL Server

    使用Powershell管理Linux 下的 SQL Server 我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server,今天我们主要介绍的是如何在Windows下使用Powe ...

  3. linux系统怎么装搜狗输入法_搜狗输入法linux版怎么安装 linux搜狗输入法安装图文教程...

    搜狗输入法linux版怎么进行安装呢?这里给大家分享的是搜狗输入法linux版怎么安装 linux搜狗输入法安装图文教程,一起来看看吧. 搜狗输入法linux版安装指南 Ubuntu / Ubuntu ...

  4. linux ppp用户管理,linux下ppp拨号上网

    转帖 如何用 Linux 拨号上网 一.Linux 上的 PPP Linux 中已经包括了点对点协议PPP,其主体是 pppd ,如果你已经使用过 Windows95 或 NT 的拨号网络,那么你已经 ...

  5. 主机宝linux版,主机宝linux版有什么用

    Re主机宝Linux版功能好少 你好楼主,在这解答下您的问题: 1. 本身文件管理器就不提供上传下载,建议用户用FTP,大文件通过WEB传也是有问题的. 2. 解压后的权限是FTP可操作权限,不需要恢 ...

  6. linux软件包怎么管理,Linux之软件包管理

    Linux之软件包管理 软件包管理有一般有3种机制:源代码方式.RPM.YUM 软件包的组成格式与存放路径: 1.二进制程序 主要存放的路径:/bin, /sbin, /usr/bin, /usr/s ...

  7. linux应用与管理,Linux操作系统应用与管理

    本书从实际应用的角度出发,以RedHat Linux 9为操作环境,介绍了使用和管理Linux的各种常规操作和技巧.主要内容包括Linux的安装配置.桌面应用.文件目录管理.用户管理.网络管理.安全管 ...

  8. linux文件操作管理,linux 文件管理操作入门

    mkdir -p /root/kali/bp/shell  一路创建文件夹直到生成文件夹shell,中间没有kali文件夹的话也会自动创建生成 tar解压缩 范例一:将整个 /etc 目录下的文件全部 ...

  9. linux组权限管理,Linux组管理和权限管理

    ⒈Linux组基本介绍 1)在Linux中的每个用户必须属于一个组,不能独立于组外. 2)Linux中每个文件都有所有者.所在组.其它组的概念 ①所有者 一般(默认)为文件的创建者,谁创建了该文件,就 ...

最新文章

  1. 注册界面php mysql_php:用户登录注册并存入数据库的简单网页示例
  2. vivo Y81s的usb调试模式在哪里,打开vivo Y81susb调试模式的流程
  3. Sed教程(四):基本命令、特殊字符、字符串
  4. 计算一个list中数据的平均数、中位数和众数【python实现】
  5. Linux 命令之 --[chattr]
  6. linux sort,uniq,cut,wc命令详解
  7. axure 输入框默认灰色字_Axure如何应对意外关闭
  8. flink开发案例_为什么说 Flink + AI 值得期待?
  9. python图像识别代码_用Python进行简单图像识别(验证码)
  10. ubuntu16.04下wifi上网速度很慢的解决方案
  11. 愤怒的小鸟4只编外鸟_丽萨荐书 愤怒的小鸟 Angry Birds ICR #1
  12. jsoncpp解析json报文测试
  13. Windows一般都用系统进程来加载内核模块
  14. 【div+css】两个div,如何让内层的div在外层div中水平垂直居中
  15. mysql 主从同步 错误_MySQL 主从同步错误(error)解决
  16. 思科 mds 虚拟服务器,Cisco MDS系列交换机VSAN功能简介
  17. 黑马程序员_java基础一
  18. W(hadoop).Permission denied: user=dr.who, access=WRITE, inode=“/output“:root:supergroup:drwxr-xr-x
  19. Redis之时间轮机制(五)
  20. py实战绘制人口金字塔图

热门文章

  1. 50多种在Photoshop中删除图像背景的工具和技术,第3页
  2. 浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap
  3. 玩一玩微信公众号开发(一) 接入系统
  4. javascript高程3 学习笔记(三)
  5. 专题1.1——Exchange2013部署前准备条件
  6. 开发们 点广告-赚点BT币
  7. 我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器
  8. 修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下...
  9. 用VC++修改注册表----让我们踏出第一步(适合初学者)
  10. 在 k8s 以外的分布式环境中使用 Dapr