1. 獲取最近運行容器的id
這是我們經常會用到的一個操作,按照官方示例,你可以這樣做(環境ubuntu):
$ ID=$(docker run ubuntu echo hello world)hello world$ docker commit $ID helloworldfd08a884dc79
這種方式在編寫腳本的時候很有用,比如你想在腳本中批量獲取id,然后進一步操作。但是這種方式要求你必須給ID賦值,如果是直接敲命令,這樣做就不太方便了。 這時,你可以換一種方式:
$ alias dl='docker ps -l -q'$ docker run ubuntu echo hello worldhello world$ dl1904cf045887$ docker commit `dl` helloworldfd08a884dc79
docker ps -l -q命令將返回最近運行的容器的id,通過設置別名(alias),dl命令就是獲取最近容器的id。這樣,就無需再輸入冗長的docker ps -l -q命令了。通過兩個斜引號“,可以獲取dl命令的值,也就是最近運行的容器的id。
2.盡量在Dockerfile中指定要安裝的軟件,而不用Docker容器的shell直接安裝軟件
說實話,我有時候也喜歡在shell中安裝軟件,也許你也一樣,喜歡在shell中把所有軟件安裝都搞定。但是,搞來搞去,最后還是發現,你還是需要在Doockerfile中指定安裝文件。在shell中安裝軟件,你要這樣做:
$ docker run -i -t ubuntu bash #登陸到docker容器root@db0c3967abf8:/#
然后輸入下面的命令來安裝文件:
apt-get install postgresql
然后再調用exit:
root@db0c3978abf8:/# exit
退出docker容器,再給docker commit命令傳遞一個復雜的JSON字符串來提交新的鏡像:
$ docker commit -run=”{“Cmd”:[“postgres”,”-too -many -opts”] }” `dl` postgres太麻煩了,不是嗎?還是在Dockerfile中指定安裝文件吧,只要兩個步驟:
1.在一個小巧的Dockerfile中,指定當前操作的鏡像為FROM命令的參數
2.然后在Dockerfile中指定一些docker的命令,如CMD, ENTERPOINT, VOLUME等等來指定安裝的軟件
3.超-超-超級用戶
你可能需要一直用超級用戶來操作docker,就像早期示例里一直提示的:
# 添加docker用戶組$ sudo groupadd docker# 把自己加到docker用戶組中$ sudo gpasswd -a myusername docker# 重啟docker后臺服務$ sudo service docker restart# 注銷,然后再登陸$ exit
Wow!連續三個sudo!三次化身“超級用戶”,真可謂是“超-超-超級用戶”啊!別擔心,設置完畢,以后你就再也不用打那么多sudo了!
4. 清理垃圾
如果你想刪除所有停止運行的容器,用這個命令:
$ docker rm $(docker ps -a -q)
順便說一句,docker ps命令很慢,不知道為啥這么慢,按理說Go語言是很快的啊。docker ps -a -q命令列出所有容器的id,然后根據id刪除容器。docker rm命令遇到正在運行的容器就會失效,所以這個命令完美的刪除了所有沒在運行的容器。
5. docker inspect輸出結果的解析利器:jq
要對docker inspect的輸出結果進行過濾,一般情況下,用grep命令,你需要這樣操作:
$docker inspect `dl` | grep IPAddress | cut -d ‘“‘ -f 4 172.17.0.52
哦!看上去很復雜,用jq吧,專業解析docker inspect輸出結果,具有更強的可讀性,方便易用:
$docker inspect `dl` | jq -r ‘.[0].NetworkSettings.IPAddress' 172.17.0.52
其中第一個'.'代表所有的結果。'[0]'代表數組的第一個元素。就像JavaScript訪問一個JSON對象一樣,簡單方便。
新聞熱點
疑難解答