方便的Docker別名

原文鏈接: https://hackernoon.com/handy-docker-aliases-4bd85089a3b8

如果您在命令行中使用過Docker罚屋,那么您無疑會編寫命令快捷方式,或者至少考慮過這樣做。

在這篇文章中,我假設您使用docker命令有點舒服,并且可能對潛在有用的別名有點興趣屎蜓。如果你是Docker的新手 - 那么這可能不是一個好的開始。

這篇文章是關(guān)于更長的,未縮寫的命令的節(jié)省時間的快捷方式或別名棚饵。因為讓我們面對它:

“難道沒有人有時間輸出整個該死的命令递递!”

快捷方式可以通過多種方式實現(xiàn)。我們在這里考慮的兩個是bash shell別名和shell腳本文件扼劈。我將共享的任何快捷方式都可以放在腳本文件或別名文件中。每種方法都有其優(yōu)點和缺點菲驴。

這是一個dkps放在shell腳本中的方便(docker ps)快捷方式荐吵。如果您選擇這種方法,那么您最終會得到一組腳本赊瞬,您需要將這些腳本復制到全局可訪問的路徑先煎,例如/usr/shared/bin,使用PATH或類似的東西巧涧。您可能還需要系統(tǒng)權(quán)限才能使其正常運行薯蝎。

#!/bin/sh
docker ps --format '{{.ID}} ~ {{.Names}} ~ {{.Status}} ~ {{.Image}} '

另一種方法是將別名命令放在主目錄中的.bash_profile文件中。這使得快捷方式可以移植而無需特殊權(quán)限

#!/bin/sh
alias dkps="docker ps --format '{{.ID}} ~ {{.Names}} ~ {{.Status}} ~ {{.Image}} '"

如果你是bash別名的新手谤绳,請查看此Bash Aliases

為了保持簡潔占锯,我將導入與docker相關(guān)的別名,而不是直接將它們添加到我的.bash_profile或.bash_aliases腳本中缩筛。
在我的.bash_profile腳本中消略,我只需添加以下內(nèi)容即可加載我的新.docker_aliases文件。

if [  -f ~/.docker_aliases ]; then
    . ~/.docker_aliases
fi

在我的實際.bash_profile腳本中瞎抛,我加載了其他別名疑俭,例如.git_aliases腳本。
這種方法也非常便攜,因為您可以共享您的docker別名钞艇。

在介紹我自己的方便的docker別名之前啄寡,讓我們創(chuàng)建一個容器樣本集,我們可以使用它來測試別名哩照。我們將使用Docker Stack命令和兩個眾所周知的服務Redis和MongoDB來實現(xiàn)挺物。不要擔心,如果你不熟悉它們飘弧,我們實際上不會使用它們识藤。

version: "3.4"

networks:
  servicenet:
    driver: overlay
    ipam:
      config:
        -
          subnet: 10.0.9.0/24

services:
  redis:
    image: redis:4.0.8-alpine
    networks:
      - servicenet
    ports:
      - target: 6379
        published: 6379
        protocol: tcp
        mode: ingress
    deploy:
      replicas: 1

  mongo:
    image: mongo:3.4.3
    networks:
      - servicenet
    ports:
      - target: 27017
        published: 27017
        protocol: tcp
        mode: ingress
    deploy:
      replicas: 1

啟動我們的測試只需要執(zhí)行docker堆棧部署并傳遞上面的compose腳本。我們用我們稱之為“test”的堆棧名稱結(jié)束命令次伶。


image.png

一旦docker stack加載痴昧,我們可以使用docker ps命令驗證它


image.png

注意:為簡潔起見,我將縮寫某些命令的輸出冠王。這具有創(chuàng)建更小圖像的額外好處赶撰。所以請記住,上面的docker ps命令的輸出比顯示的長得多

我們可以使用docker stack rm命令拆除堆棧柱彻。


image.png

看起來很容易豪娜,對吧?
在本文的其余部分中顯示屏幕截圖時哟楷,我將使用上面的設置瘤载。
現(xiàn)在我們的別名......這樣更好是對的嗎? 我們將看到的第一個別名只是為常見的docker命令提供縮寫卖擅。
我們將看到的第一個別名只是為常見的docker命令提供縮寫鸣奔。

image.png

馬上就可以考慮每次使用dk替換dockerdocker ps之類的命令時,或者使用dks來處理Docker服務命令(如docker service ls)時節(jié)省時間惩阶。鍵入dks的節(jié)省加起來挎狸!
因此,不要鍵入docker log琳猫,而是鍵入:dkl b7a8
使用dklf關(guān)注日志。
因此私痹,而不是docker logs -f b7a8脐嫂,你可以簡單地使用dklf b7a8

另一個方便的日志記錄別名是dkln(docker log by name)命令。

image.png

它評估反引號(`)中的管道命令紊遵,并將結(jié)果用作docker logs命令的參數(shù)账千。該grep命令使用第一個參數(shù)來過濾docker ps命令的結(jié)果。最后暗膜,該awk命令將輸出的第一個字段作為value參數(shù)匀奏。

好吧,這可能會令人困惑学搜。讓我們仔細看看娃善。

該docker ps命令返回正在運行的容器列表论衍。


image.png

并docker ps | grep redis返回:


image.png

最后,docker ps | grep redis | awk '{print $1}'返回Redis的容器ID:f5f0ed387073
image.png

這允許我們按名稱查看任何容器的日志聚磺。


image.png

當然坯台,您需要確保沒有多個與名稱匹配的容器。如果這樣做瘫寝,那么只需dkl使用帶有容器ID 的命令即可蜒蕾。

上面示例中的一個關(guān)鍵點是,您可以通過組合shell命令來構(gòu)建一些非常強大的別名焕阿。當我們查看構(gòu)建和發(fā)布容器的別名時咪啡,我們將在本文稍后看到另一個示例。

查看運行容器的狀態(tài)是構(gòu)建和測試容器化服務的重要部分暮屡。以下別名使我們更容易執(zhí)行此操作撤摸。

在這篇文章的早些時候,我們查看了dkps(Docker PS)命令栽惶。

image.png

這是命令的作用:
image.png

另一個有用的別名是dkstats(docker stats)命令:
image.png

此命令測試是否提供參數(shù)愁溜,如果是,則應用grep過濾器
image.png

這允許我們查看所有容器的統(tǒng)計信息或按特定容器名稱過濾外厂。

該dktop命令呈現(xiàn)類似頂部的顯示冕象,顯示內(nèi)存,CPU汁蝶,網(wǎng)絡I / O和塊I / O.


實際的別名非常簡單:
image.png

您可以使用您更愿意看到的值自由地進行自定義渐扮。我選擇了一個基本設置,以使顯示屏整齊地安裝在多窗格iTerm2屏幕中掖棉。

在建造集裝箱的過程中墓律,有時需要進入集裝箱才能環(huán)顧四周。這樣做通常涉及:

  • docker ps查看容器ID列表
  • docker exec -it {containerID} / bin / sh
使用我們的別名幔亥,這變?yōu)椋?/h5>
  • dkps
  • dke {containerID}
    這是一個視頻示例:


有時需要重新啟動服務耻讽。該dksb(搬運工服務彈跳)命令允許我們能夠做到這一點。

執(zhí)行此操作的非別名方法需要使用以下docker service scale命令:

$ docker service scale test_redis = 0 
$ docker service scale test_redis = 1

使用dksb我們只需輸入:

$ dksb test_redis 1


我們要看的最后一件事是用于構(gòu)建和發(fā)布docker容器的別名帕棉。雖然此過程通常涉及兩階段操作针肥,即docker build / docker push,但您可能還需要執(zhí)行其他任務以進一步自動化該過程香伴。就我而言慰枕,我構(gòu)建了托管NodeJS微服務的docker容器。我的本地構(gòu)建的一部分涉及檢查.dockerignore文件是否存在即纲,然后查看Node package.json文件內(nèi)部以提取項目的名稱和版本具帮。然后使用名稱和版本來形成泊塢標簽。

這是dkp(docker publish)別名的樣子:

image.png

上面的別名使用jq(命令行JSON處理器)從package.json文件中提取版本信息。

使用dkp只需輸入節(jié)點項目目錄并鍵入蜂厅,dkp然后輸入docker hub存儲庫名稱匪凡。在下面的示例中,我正在構(gòu)建和發(fā)布HydraRouter docker容器葛峻。

1_P4VYcqkzufYWeeahgjgI_g.gif

我希望你在這篇文章中找到了一些方便的docker別名锹雏,或者至少它激發(fā)了你使用別名來優(yōu)化你的命令行工作流程。因為記住 -? 沒有人有時間 ......

這是完整的 .docker_aliases腳本术奖,包括我們在這篇文章中沒有涉及的一些獎勵命令礁遵。

#!/bin/sh

alias dm='docker-machine'
alias dmx='docker-machine ssh'
alias dk='docker'
alias dki='docker images'
alias dks='docker service'
alias dkrm='docker rm'
alias dkl='docker logs'
alias dklf='docker logs -f'
alias dkflush='docker rm `docker ps --no-trunc -aq`'
alias dkflush2='docker rmi $(docker images --filter "dangling=true" -q --no-trunc)'
alias dkt='docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"'
alias dkps="docker ps --format '{{.ID}} ~ {{.Names}} ~ {{.Status}} ~ {{.Image}}'"

dkln() {
 docker logs -f `docker ps | grep $1 | awk '{print $1}'`
}

dkp() {
 if [ ! -f .dockerignore ]; then
   echo "Warning, .dockerignore file is missing."
   read -p "Proceed anyway?"
 fi

 if [ ! -f package.json ]; then
   echo "Warning, package.json file is missing."
   read -p "Are you in the right directory?"
 fi

 VERSION=`cat package.json | jq .version | sed 's/\"http://g'`
 NAME=`cat package.json | jq .name | sed 's/\"http://g'`
 LABEL="$1/$NAME:$VERSION"

 docker build --build-arg NPM_TOKEN=${NPM_TOKEN} -t $LABEL .

 read -p "Press enter to publish"
 docker push $LABEL
}

dkpnc() {
 if [ ! -f .dockerignore ]; then
   echo "Warning, .dockerignore file is missing."
   read -p "Proceed anyway?"
 fi

 if [ ! -f package.json ]; then
   echo "Warning, package.json file is missing."
   read -p "Are you in the right directory?"
 fi

 VERSION=`cat package.json | jq .version | sed 's/\"http://g'`
 NAME=`cat package.json | jq .name | sed 's/\"http://g'`
 LABEL="$1/$NAME:$VERSION"

 docker build --build-arg NPM_TOKEN=${NPM_TOKEN} --no-cache=true -t $LABEL .
 read -p "Press enter to publish"
 docker push $LABEL
}

dkpl() {
 if [ ! -f .dockerignore ]; then
   echo "Warning, .dockerignore file is missing."
   read -p "Proceed anyway?"
 fi

 if [ ! -f package.json ]; then
   echo "Warning, package.json file is missing."
   read -p "Are you in the right directory?"
 fi

 VERSION=`cat package.json | jq .version | sed 's/\"http://g'`
 NAME=`cat package.json | jq .name | sed 's/\"http://g'`
 LATEST="$1/$NAME:latest"

 docker build --build-arg NPM_TOKEN=${NPM_TOKEN} --no-cache=true -t $LATEST .
 read -p "Press enter to publish"
 docker push $LATEST
}

dkclean() {
 docker rm $(docker ps --all -q -f status=exited)
 docker volume rm $(docker volume ls -qf dangling=true)
}

dkprune() {
 docker system prune -af
}

dktop() {
 docker stats --format "table {{.Container}}\t{{.Name}}\t{{.CPUPerc}}  {{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}"
}

dkstats() {
 if [ $# -eq 0 ]
   then docker stats --no-stream;
   else docker stats --no-stream | grep $1;
 fi
}

dke() {
 docker exec -it $1 /bin/sh
}

dkexe() {
 docker exec -it $1 $2
}

dkreboot() {
 osascript -e 'quit app "Docker"'
 countdown 2
 open -a Docker
 echo "Restarting Docker engine"
 countdown 120
}

dkstate() {
 docker inspect $1 | jq .[0].State
}

dksb() {
 docker service scale $1=0
 sleep 2
 docker service scale $1=$2
}

mongo() {
 mongoLabel=`docker ps | grep mongo | awk '{print $NF}'`
 docker exec -it $mongoLabel mongo "$@"
}

redis() {
 redisLabel=`docker ps | grep redis | awk '{print $NF}'`
 docker exec -it $redisLabel redis-cli
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市采记,隨后出現(xiàn)的幾起案子佣耐,更是在濱河造成了極大的恐慌,老刑警劉巖唧龄,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼砖,死亡現(xiàn)場離奇詭異,居然都是意外死亡既棺,警方通過查閱死者的電腦和手機讽挟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丸冕,“玉大人耽梅,你說我怎么就攤上這事∨种颍” “怎么了眼姐?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佩番。 經(jīng)常有香客問我众旗,道長,這世上最難降的妖魔是什么趟畏? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任贡歧,我火速辦了婚禮,結(jié)果婚禮上赋秀,老公的妹妹穿的比我還像新娘利朵。我一直安慰自己,他們只是感情好沃琅,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布哗咆。 她就那樣靜靜地躺著蜘欲,像睡著了一般益眉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天郭脂,我揣著相機與錄音年碘,去河邊找鬼。 笑死展鸡,一個胖子當著我的面吹牛屿衅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莹弊,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼涤久,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忍弛?” 一聲冷哼從身側(cè)響起响迂,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎细疚,沒想到半個月后蔗彤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡疯兼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年然遏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧彪。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡待侵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出来氧,到底是詐尸還是另有隱情诫给,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布啦扬,位于F島的核電站中狂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扑毡。R本人自食惡果不足惜胃榕,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞄摊。 院中可真熱鬧勋又,春花似錦、人聲如沸换帜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惯驼。三九已至蹲嚣,卻和暖如春递瑰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隙畜。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工抖部, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人议惰。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓慎颗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親言询。 傳聞我的和親對象是個殘疾皇子俯萎,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,535評論 15 147
  • 中文翻譯 ng help ng build 構(gòu)建您的應用程序并將其放入輸出路徑(dist /默認情況下)运杭。 別名:...
    4ea0af17fd67閱讀 2,036評論 0 0
  • 《Docker從入門到實踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,384評論 1 39
  • 2018年6月24日 星期日 陰 第「016」次感恩讯屈。 沒想到國人能畫出這樣精彩的漫畫,看到秦叔寶那節(jié)真是震撼極了...
    子不能說閱讀 158評論 0 0
  • 前言: 從事Android開發(fā)工作有一段時間了县习,天天跟布局涮母、原生控件打交道,用著別人的輪子躁愿,好用是好用叛本,就是感覺自...
    顏崔閱讀 628評論 0 0