出品丨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 终端。