Docker 必備的 PowerShell 別名設定教程,輕鬆應對日常辦公
出品丨Docker公司(ID:docker-cn)
編譯丨小東
每週一、三、五,與您不見不散!
作為一名使用 Docker 辦公的程式設計師來說,我每天需要使用到大量的 docker 命令。通過在 PowerShell 中將這些命令處理成別名的形式,我節省了大量打字的時間以及處理拼寫錯誤和修復拼寫錯誤的時間。例如:當我想刪除所有容器時,我只需要輸入 drmf 即可,當我想將容器的IP地址新增到我的主機檔案時,我只需要輸入 d2h 即可,這就是我對於別名的應用。
別名和 PowerShell 配置檔案
別名就是您可以為常用的命令指定一個簡短的名稱。您可以使用 Set-Alias 命令來為常用命令新增別名的指定名稱,以及它應該執行的命令。所以,如果您無法忍受通過輸入程式碼來啟動 VS Code,那麼您就可以將它的別名設定為“c”,如下所示:
Set-Alias -Name c -Value code
如果要為更加複雜的命令新增別名時,您可以先建立一個函式,然後為該函式設定別名。所以,如果您早上上班的例行程式是從開啟 Chrome、Firefox、VS Code 和 Slack 開始時,那麼您就可以將其新增到一個函式中並將這個函式的別名設定為“am”,如下所示:
function Start-TheDay { start chrome; start firefox; start code; start slack; }
Set-Alias -Name am -Value Start-TheDay
需要注意的是,設定的別名僅存在於會話期間。要想使它們永久存在,您需要將它們儲存在 PowerShell 的配置檔案中,以便每次啟動會話時都能使用它們。
您可能已經擁有了一個由您或工具建立的配置檔案,執行 notepad $profile 命令來找到它。如果可以開啟 Notepad,那麼您只需貼上要在每個會話中使用的函式和別名即可。如果您收到錯誤訊息,指出該檔案或目錄不存在,請先執行 New-Item -Path $ profile -ItemType file –force 命令,然後再次執行 notepad $profile 命令即可。
Docker PowerShell 別名1:“drm”
“drm” 別名可以刪除所有已停止的容器。 當您想在一堆正在執行的容器中刪除那些已停止執行的容器時,該別名很有用:
function Remove-StoppedContainers { docker container rm $(docker container ls -q) } Set-Alias drm Remove-StoppedContainers
Docker PowerShell 別名2:“drmf”
“drmf” 別名可以刪除所有容器,無論它們是否正在執行。 當您想要重置正在執行的容器並打算從零開始時,該別名很有用:
function Remove-AllContainers {
docker container rm -f $(docker container ls -aq)
}
Set-Alias drmf Remove-AllContainers
注意:請謹慎使用該別名。
Docker PowerShell 別名3:“dip”
“dip” 別名可以獲取容器的 IP 地址,並將容器名稱或容器 ID 的一部分傳遞給它,例如 dip 02a 或 dip signup-db。當您想要直接連線到容器,而不是使用主機上已釋出的埠時,該別名很有用:
function Get-ContainerIPAddress {
param (
[string] $id
)
& docker inspect --format '{{ .NetworkSettings.Networks.nat.IPAddress }}' $id
}
Set-Alias dip Get-ContainerIPAddress
Docker PowerShell 別名4:“d2h”
“d2h” 別名可以將容器的 IP 地址新增到主機的 hosts 檔案中,因此您可以在 Docker 主機上按名稱引用容器,就像容器通過名稱來相互訪問一樣。
舉個例子:我有一個使用 SQL 資料庫的 Web 應用程式。在開發和測試環境中,我將在資料庫的容器中執行 SQL Server 服務。該容器稱為“petshop-db”,並且 Web 配置中的所有連線字串都使用“petshop-db”作為資料庫伺服器名稱。如果我想在本地執行這個 Web 應用程式,但仍然使用上述資料庫的容器,此時,我只需啟動容器並執行“d2h petshop-db”命令即可。現在我的 Web 應用程式使用的是來自 hosts 檔案的容器 IP,所以我可以使用 docker-compose up 命令來執行整個應用棧,而無需更改任何配置。
非常有用的別名,因此您可以使用容器的名稱來打包預設配置的設定,從而在本地執行您的應用程式。
function Add-ContainerIpToHosts {
param (
[string] $name
)
$ip = docker inspect --format '{{ .NetworkSettings.Networks.nat.IPAddress }}' $name
$newEntry = "$ip $name #added by d2h# `r`n"
$path = 'C:\Windows\System32\drivers\etc\hosts'
$newEntry + (Get-Content $path -Raw) | Set-Content $path
}
Set-Alias d2h Add-ContainerIpToHosts
注意:該別名有可能弄亂您的 hosts 檔案,它新增的行都帶有“#added d2h#”樣式的字尾,所以您可以編寫一個清理命令(或別名)的指令碼來處理它。
“d2h” 別名會在 hosts 檔案頂部新增行,因此如果 hosts 檔案頂部存在多行時(由“d2h” 別名新增的行),Windows 會優先採用第一行的內容。所以,每次啟動新容器時,您都可以執行“d2h petshop-db”命令,只需將當前容器的 IP 地址置於 hosts 檔案的頂部即可。
所有的別名
我已經將我的 PowerShell 配置檔案儲存在 GitHub Gist 中,您瀏覽 https://gist.github.com/sixeyed/c3ae1fd8033b8208ad29458a56856e05 ,將整個文件複製到 $ profile 檔案中,然後在 PowerShell 中執行它。 $ profile 會用新別名更新當前會話。 GitHub Gist 還具有自定義提示功能,使 PowerShell 的提示更像 Linux 終端。