1. 程式人生 > >巧用linux版powershell,管理linux下的docker

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

大家好,我把用powershell的docker馬甲命令的好處,放在了頁面下方,從第五章開始。
 
powershell 傳教士 原創文章 始於 2017-09-07 ,2018-07-16更新。允許轉載,但必須保留名字和出處,否則追究法律責任


powershell,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


=========【第三章 升級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

注意:

此模組在官網已經絕種   ;(

由於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 {} 是過濾語法。

$_.Image 是映象名屬性,其他屬性是
$_.ID     字串
$_.Command  字串
$_.Created  日期型
$_.Status   字串                
$_.Names   字串


-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呼發貼說:“管道中傳物件,是沒必要的”。是這樣麼?
我的這篇帖子,很好地說明了這一點。
-----------------------------謝謝看貼,完。-------------------------------

相關推薦

linuxpowershell管理linuxdocker

大家好,我把用powershell的docker馬甲命令的好處,放在了頁面下方,從第五章開始。 powershell 傳教士 原創文章 始於 2017-09-07 ,2018-07-16更新。允許轉載,但必須保留名字和出處,否則追究法律責任 powershell,docker,cli,命令,docker p

日常的一些命令包括linuxgit

總結下自己常用命令一.linux1.ssh登陸伺服器 ssh [email protected]2.ssh免密碼 檢視ssh目錄,沒有建立sshkey cd ~/.ssh    若沒有:ssh-keygen -t rsa (連續三次回車,即在本地生成了私鑰(id_

linuxpowershell安裝教程(.net core)

powershell 傳教士 原創文章 始於2016-12-20,2017-03-15 ,2017-05-10改。文章版本目前部落格園為最新版。 允許轉載,但必須保留名字和出處,否則追究法律責任   問:powershell二進位制安裝包,和.net core是什麼關係? 答: powershell依

Linux文件目錄管理 Linux之文件與目錄結構

Linux之文件與目錄結構   Linux檔案系統結構 Linux目錄結構的組織形式和Windows有很大的不同。首先Linux沒有“盤(C盤、D盤、E盤)”的概念。已經建立檔案系統的硬碟分割槽被掛載到某一個目錄下,使用者通過操作目錄來實現磁碟讀寫。 Linux不

Linux伺服器上命令列執行Matlab的.m檔案

1、採用shell工具例如xshell連線伺服器,鍵入 matlab ,或者含有matlab的相關命令,按照提示要求安裝Xmanager工具,只需官網下載,按說明安裝。 2、直接執行Matlab:$matlab,然後可以開啟matlab工具,根據xmanager工具可以在本地開啟matlab

FinalShell Mac OS,Linux安裝及教程(Mac的xshell)

使用者QQ群 342045988Mac版安裝路徑/Applications/finalshelldataLinux版安裝路徑/usr/lib/finalshelldata注意:1.FinalShell執行需要java或者jdk支援,java版本至少1.8,安裝後如果無法啟動,執行 java -version,

Linux安裝jsvcLinux服務開發

chm 執行c 依賴 sage 所在 The code string configure 在linux上以服務的方式啟動java程序,需要提前安裝jsvc。linux是利用daemon(jsvc)構建java守護進程。 編譯 daemon 安裝JSVC 1 下載文件,htt

windows與linux雙系統刪除linux分割槽後開機進入grub resuce提示符的問題

我這裡遇到的問題比較簡單,工具也有現成的,所以只討論我所遇到的問題,至於其他的問題,這篇文章暫不討論。 我的筆記本安裝了kali, ubuntu15.10, windows 10三個系統,我在wind

node實現ttms(票務管理系統)---

7.路由規則 在對index.js進行完善後,就可以在他同級下建立檔案,完成相應的路由規則。 1.login.js login.js程式碼如下: var express = require('express'); var router = express.Router();

Mysql模糊查詢like效率以及更高效的寫法 在使用msyql進行模糊查詢的時候很自然的會到like語句通常情況下,在資料量小的時候不容易看出查詢的效率但在資料量達到百萬級千萬級的時

在使用msyql進行模糊查詢的時候,很自然的會用到like語句,通常情況下,在資料量小的時候,不容易看出查詢的效率,但在資料量達到百萬級,千萬級的時候,查詢的效率就很容易顯現出來。這個時候查詢的效率就顯得很重要! 一般情況下like模糊查詢的寫法為(field已建立索引): SELECT `column

LINUX——gitlab版本控制關於項目組管理項目戶及權限管理的使用

entos 開發 chan 網頁 1.2 保存 ise roo 能力 gitlab一般用於:1.開發工程中各種文件變更的管理最主要的功能是追蹤文件的變更,將信息記錄下來。每一次文件的改變,版本號都會增加 2.並行開發軟件開發時往往是多人協同,而版本控制可以解決版本同步以及不

Linux深度攻略》一書講述Linux日常系統管理和服務器配置內容

linuxLinux深度攻略 首先從介紹Linux系統的安裝入手,講述了Linux系統管理和服務器配置兩部分的知識。系統管理方面內容有Linux系統簡介和安裝,Linux字符界面,目錄和文件管理,Linux常用命令,Shell編程,用戶和組群賬戶管理,權限、所有者和ACL,歸檔、壓縮和備份,軟件包管理,磁盤和

第三方開源工具trash-git放置linux誤刪除文件

python rm trash #!/bin/sh environment_python(){ yum -y install python echo "python OK " } environment_git(){ yum -y install git echo "git OK" } get

#21 在Linux裏進程管理詳解與pstree、ps、pgrep、pkill、pidof、top命令的應用

在linux裏進程管理詳解 與pstree、ps、pgrep、pkill、pidof、top命令的應用 進程管理: 所謂進程:process,一個活動的程序的實體的副本; 生命周期; 可能包含一個或多個執行流; 創建進程: 每個進程的組織結構是一致的: 內核在正常啟動並且全

linux雲自動化運維基礎知識4(系統結構vim管理輸入輸出正則表達式)

linux運維linux系統結構 linux是一個倒樹結構 linux中所有的東西都是文件 這些文件都在系統頂級目錄“/” /就是根目錄 /目錄以下為二級目錄這些目錄都是系統裝機時系統自動建立的如圖2.二級目錄的作用/bin ##二進制可執行文件也就是系統命令/sbin ##系統管理

linux SFTP戶創建 不允許戶登錄並且連接只允許在制定的目錄進行操作

重啟 login mil shell man 權限 directory end roo 1.創建用戶 groupadd sftp 2.添加用戶並設置為sftp組 useradd -g sftp -s /sbin/nologin -M sftp (/sbin/nolo

linux戶和文件目錄管理

用戶和目錄文件管理Linux用戶及權限管理用戶管理 多用戶多任務的操作系統 用戶類型 管理員用戶 root 普通用戶 系統用戶/程序用戶用戶相關的文件: /etc/passwd 用戶信息 格式: 用戶名:x:UID:GID:說明信息:SHELL UID: 1000---60000

Linux戶及其權限管理命令

zl/etc/passwd: 用戶名:密碼:UID:GID:註釋:家目錄:默認shell/etc/group: 組名:密碼:GID:以此組為其附加組的用戶列表/etc/shadow: 用戶名:密碼:最近一次修改密碼的時間:最短使用期限:最長使用期限:警告時間:非活動時間:過期時間:用戶管理: use

Linux硬件資源管理與外設設備使用、系統運行機制及管理

ips cte tde lock type 設備文件 tar 所有 需要 Linux硬件資源管理   PCI設備 顯卡 $>>dmesg |grep -i vga[ 0.000000] Console: colour

linux系統監控:記錄戶操作軌跡誰動過服務器

linux linux script linux安全 linux系統監控 甘兵 1、前言 我們在實際工作當中,都碰到過誤操作、誤刪除、誤修改過配置文件等等事件。對於沒有堡壘機的公司來說,要在linux系統上深究到底誰做過配置文件的修改、做過誤刪除是很頭疼的事情,特別是遇到刪庫跑路