巧用linux版powershell,管理linux下的docker

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
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316423.shtml

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

相关文章

从ASP.NET Core2.2到3.0你可能会遇到这些问题

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019。So,就用vs2019.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基…

EntityFramework Core 3.0 Preview

前段时间.Net Core 3.0 发布了,Entity Framework Core 3.0 也发布了Preview版。假期用了一上午大致研究了一遍,同时又体验了一把Visual Studio 2019。总结一下分享给大家:VS2019 新建.Net Core 3.0 Console应用,添加EFCore相关的N…

机器学习 ML.NET 发布 1.0 RC

ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS),通过使用ML.NET,.NET开发人员可以利用他们现有的工具和技能组,为情感分析,推荐,图像分类等常见场景创建自定义机器…

容器化时代我们应当选择Kubernetes

昨天发的文章《基于Kubernetes 构建.NET Core 的技术体系》,有同学问.NET Core上有Spring Cloud类似的平台吗? .NET Core出现这么久了,这个为云原生应用开发而准备的系统需要Spring cloud这样的全家桶吗? 大家希望使用Spring Clou…

[ZJOI2015]幻想乡 Wi-Fi 搭建计划(dp + 结论)

problem luogu-P3344 solution 这个题面,这个数据范围,完完全全就是网络流宗教。。然而我发现建不出来。 很多一眼网络流最后却不是网络流而往往是 dpdpdp 的题目都有一个特性:一个点可以流出多条流量,流入流量却只能为 111。…

CefSharp中c#和JavaScript交互读取电脑信息

介绍CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同,CEF专注于在第三方应用程序中促进嵌入式浏览器用例。CEF通过提供生产质量稳定的API,发布跟踪特定Chromiu…

C#8.0可空引用类型的使用注意要点

最近VS2019正式版发布了,装下来顺便试用了一下C#8.0,最大的看点应该就是可空引用类型了。不过C#8.0仍然处于Beta的状态,而且试用时也遇到了几个坑。背景知识说明:所谓的可空引用类型是指,一旦启用了可空引用类型这个新…

ASP.NET Core Web 项目文件介绍

ASP.NET Core Web 项目文件在本视频中,我们将探索并了解asp.net core项目文件。 我们使用C#作为编程语言,因此项目文件具有.csproj扩展名。如果您使用过以前版本的ASP.NET,那么您可能对此文件非常熟悉,但此文件中包含的…

DotNetCore 3.0 助力 WPF 开发

前言Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待。在之前的版本中,作为一名基于微软生态的传统 WPF 程序员看着隔壁同学在开发 DotNetCore 网站时用着各种特性好生羡慕,想着巨硬啥时候能让客户端开发者也能尝尝甜头…

H - Square Card HDU - 7063

H - Square Card HDU - 7063 题意: 有两个圆形区域,一个是得分区域,一个是获得奖金区域,现在你有一个边长为a的正方形,当正方形在如果在某一时刻它严格在圆形范围内,才算合法。 问把牌扔到任意的位置被得分和同时获得…

《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

创建ASP.NET Core Web应用程序如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三)在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同,哪些是可以使用的,以及他们的作用。在Visual Studio 2019中创建新的ASP.NET Cor…

ASP.NET Core 沉思录 - 结构化日志

在 《ASP.NET Core 沉思录 - Logging 的两种介入方法》中我们介绍了 ASP.NET Core 中日志的基本设计结构。这一次我们来观察日志记录的格式,并进一步考虑如何在应用程序中根据不同的需求选择不同的日志记录形式。太长不读:直接飞到文章最后 :-DMicrosoft…

为什么我们要做单元测试?(二)

引子当我第一篇博客发布,并被张善友老师的公众号转载之后,在公众号文章和博客园的留言中,许多开发者纷纷表示,单元测试作为企业行为,与实施的技术栈不同,不是开发者个人行为,实施单元测试花费的…

P4159 [SCOI2009] 迷路

P4159 [SCOI2009] 迷路 题意: 该有向图有 n 个节点,节点从 1 至 nn 编号,windy 从节点 1 出发,他必须恰好在 t 时刻到达节点 n。 现在给出该有向图(带边权),你能告诉 windy 总共有多少种不同的路径吗? …

程序员修神之路--提高网站的吞吐量

点击上方蓝色字体,关注我们菜菜哥,有个事你还得帮我呀呦西,YY妹子,最近天这么热了,你怎么还穿这么多?苦笑一下.....前几天写了几个接口,领导让提高一下接口吞吐量这是你技术提高的大好机会呀可吞…

一份.NET 容器化的调查小结

小编在上个月在微信公众号“dotnet跨平台” 做了一个针对.NET 容器化的调查:.NET Core 容器化调查,参与人数702人,由于软件定义基础设施方兴未艾,编排和自动化领域kubernetes占据了主体地位,在平时的工作中和身边的同学…

P2148 [SDOI2009]ED

P2148 [SDOI2009]E&D 题意: 有2n堆石子,第2k-1堆和第2k堆是一组,现在两个人轮流操作,每次操作任选一组石子,然后将改组中的一堆石子移走,将另一堆式子分割成两堆,形成新的两堆石子&#x…

扒一扒.NET Core的环境配置提供程序

前言很久之前,在玩Docker的时候顺便扒了扒,最近,终于下定决心花了些时间整理并成文,希望能够给大家一些帮助。目录 .NET Core中的配置ASP.NET Core中的配置扒一扒环境变量提供程序为什么是“__”?“__”如何变成了“&…

[HNOI2016] 序列(线段树 + 莫队 + 倍增)

problem luogu-P3246 心路历程卡常历程问题存疑 一直在想莫队的做法。发现左右指针的移动对应一段左/右端点固定的子序列&#xff0c;然后可以一个数代表一段相同的贡献。 就开始求 lsti,nxtilst_i,nxt_ilsti​,nxti​ 了。 仔细想想需要找到 lstlsti<l≤lstilst_{lst_…

《从零开始学ASP.NET CORE MVC》:ASP.NET Core 中的 Main方法(5)

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core Web 项目文件ASP.NET Core 中的 Main方法一个开始专心写字的人在ASP.NET Core项目中&#xff0c;我们有一个名为Program.cs的文件。在这个文件中&#xff0c;我们有一个public static void Main&#…