本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。
該系列全部文章將參考其餘學習資料翻譯,也會加入本身的學習做爲部分註解。若有錯誤,歡迎指正。web
第一篇文章《Docker 簡介》 介紹了 Docker 的基本概念,也介紹了 Docker 的安裝、檢查了 Docker 是否可以運行。本篇文章介紹實踐中經常使用的 15 個 Docker 命令,以及它們具體在後臺作了什麼工做。(原文雖然標題說有 15 條命令,實際上只有 14 條)docker
這裏是一個操做 Docker 鏡像的小技巧,寫在最前面,請牢記。後面會屢次利用到這個技巧。ubuntu
不衝突的狀況下, Docker 可使用 ID 的前面幾個字符進行快速操做,例如:segmentfault
命令 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 920c0f3c240a 89dc7e6d0ac1:latest "ls /etc/" 15 minutes ago Exited (0) 15 minutes ago ecstatic_perlman 3f2a0b440abc 89dc7e6d0ac1:latest "ls /etc/fstab" 15 minutes ago Exited (0) 15 minutes ago tender_curie 64c55acd970e 89dc7e6d0ac1:latest "ls -l" 15 minutes ago Exited (0) 15 minutes ago sharp_lumiere c34716ad8f72 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (0) 12 hours ago trusting_kowalevski 977be396faf6 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago ecstatic_lovelace 9e553497cbed busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago lonely_fermi c9093d4c7637 busybox:latest "/bin/sh -c 'while t 19 hours ago Exited (137) 19 hours ago gloomy_pike 3f81114c48c2 busybox:latest "/bin/echo Hello Doc 19 hours ago Exited (0) 19 hours ago determined_swartz 26c98d7a589d hello-world:latest "/hello" 20 hours ago Exited (0) 20 hours ago distracted_babbage 36c0b05dc414 hello-world:latest "/hello" 20 hours ago Exited (0) 20 hours ago admiring_carson
可使用 docker rm 92
命令快速刪除容器 920c0f3c240a
,可是沒法使用 docker rm 3f
命令進行快速刪除某個容器,由於有兩個以 3f
開頭的容器,你必須用 docker rm 3f2
或者 docker rm 3f8
指定刪除其中一個。安全
檢查 Docker 是否安裝:ide
docker info
若是 Docker 沒有安裝,會提示 command not found
,若是 Docker 已經成功安裝,則會有相似以下的提示:工具
命令 # docker info Containers: 2 Images: 2 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 6 Dirperm1 Supported: false Execution Driver: native-0.2 Kernel Version: 3.13.0-24-generic Operating System: Ubuntu 14.04 LTS CPUs: 1 Total Memory: 979.6 MiB Name: ubuntu ID: PRLX:CY3O:TZ6P:4UAS:VDWM:MHWB:FB3V:TJBJ:GQ4J:Q453:GPOY:WZSI WARNING: No swap limit support
那麼咱們檢查一下本機有多少 Docker 鏡像:學習
docker images
輸出:ui
命令 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 91c95931e552 5 days ago 910 B
本機只有 Docker 教程一 中的一個 hello-world 鏡像。spa
咱們可使用以下命令去下載一個 busybox 的鏡像文件:
docker pull <image name>
輸出:
命令 # docker pull busybox latest: Pulling from busybox cf2616975b4a: Pull complete 6ce2e90b0bc7: Pull complete 8c2e06607696: Already exists busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Digest: sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d Status: Downloaded newer image for busybox:latest
busybox 是一個 Linux 工具集,包括各類經常使用命令,例如 cat
、echo
,也有各類高級命令,例如 grep
、mount
等。執行完 docker pull busybox
以後,Docker 會自動從 Docker 官方下載 busybox 的鏡像文件。
這個過程當中能夠執行 Ctrl+C
,docker pull
不會由於 Ctrl+C
打斷,而回轉爲後臺執行。
有了鏡像固然要對鏡像作點事情,例如:
docker run busybox /bin/echo Hello Docker
這條命令是運行 busybox
鏡像中的 /bin/echo
命令,參數是 Hello Docker
:
命令 # docker run busybox /bin/echo Hello Docker Hello Docker
固然有人會感到疑惑:難道不能在 Docker 容器內運行一個守護進程之類的東西?
固然能夠,例如:
sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
在後臺,以 busybox 鏡像爲基礎建立的一個容器,每一秒運行一次 echo Docker
命令;而後該容器的 ID 保存在變量 sample_job
中。
關於
sample_job
:其實 Docker 給每一個運行中的容器也隨機會起一個名字的,而不只僅是一串長長的 ID ,例如我這個容器的就被起名叫trusting_kowalevski
,能夠經過docker ps
獲取這個名字,固然本篇文章中全部的$sample_job
也能夠用trusting_kowalevski
這個名字替代。
查詢容器的輸出內容:
docker logs <ID>/<name>
例如:經過 docker logs
命令查詢 sample_job
對應的容器的輸出內容。
命令 # sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done") 命令 # docker logs $sample_job Docker Docker Docker Docker Docker Docker Docker
只要這個容器運行的時間足夠長,就會輸出足夠多行的 Docker
。
和通用的 unix 命令同樣,Docker 也有 help 選項:
docker help
和
docker <command> --help
那麼仍是剛剛那個容器:
這個容器已經輸出了足夠多的 Docker
,該讓他停下了:
docker stop $sample_job
或者重啓剛剛那個容器:
docker restart $sample_job
固然也能夠徹底刪除這個容器:
docker stop $sample_job
docker rm $sample_job
注:Docker 的文件是放在
/var/lib/docker/containers/
中的。
將當前的 Docker 容器狀態保存爲鏡像:
docker commit $sample_job job1
這裏保存成一個名叫 job1
的鏡像。
注意:鏡像名稱中只容許出現小寫字母和數字。
若是不太確信剛剛已經把容器保存成鏡像了,可使用下面的命令查看剛剛 commit 的究竟是什麼:
docker images
能夠看到,多出了一個 job1
的鏡像:
命令 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE job1 latest 9b748dc45fd1 50 seconds ago 2.433 MB hello-world latest 91c95931e552 5 days ago 910 B busybox latest 8c2e06607696 5 days ago 2.433 MB
在前面文章提到了 Docker Index 和 Docker registry,這兩個就是 Docker 官方存儲公有和私有鏡像的地方,可使用這個命令搜索被上傳到 Docker registry 的鏡像:
docker search <image-name>
例如:
命令 # docker search dockerui NAME DESCRIPTION STARS OFFICIAL AUTOMATED crosbymichael/dockerui docker run -d crosbymichael/dockerui /dock... 23 abh1nav/dockerui An updated version of crosbymichael/docker... 16 [OK] dockerui/dockerui A web interface to interact with the Docke... 13 [OK] madhavkobal/dockerui Docker Updated Version having Search, Pull... 7 fardok/dockerui docker web ui from crosbymichael 1 rpidockers/dockerui 1 microbox/dockerui Trusted Automated dockerui image (16MB size) 1 sigmonsays/dockerui 1 [OK] sidd/dockerui DockerUI 0 pemcconnell/dockerui 0 devalih/dockerui To run : docker pull devalih/dockerui do... 0 jonny64/dockerui 0 eternitech/dockerui 0 akranga/dockerui 0 netz98/dockerui PHP based Docker UI 0 jonbaer/dockerui 0 rogaha/dockerui 0 bettse/dockerui Fork of crosbymichael/dockerui 0 wansc/dockerui 0 [OK] c0710204/dockerui 0 [OK] zaraki673/dockerui 0 [OK] allincloud/dockerui 0 [OK] atandock/dockerui 0 [OK] cloudaku/dockerui 0 [OK] yungsang/dockerui Docker API Version: v1.8 UI Version: v0.4 ... 0
固然 DockerUI 官方的指出官方維護鏡像是 dockerui/dockerui
,所以只需 docker pull dockerui/dockerui
便可獲得 DockerUI。
DockerUI:一個網頁版本的 Docker 管理工具。
Docker 的倉庫也有個被人詬病的地方:你沒有辦法弄清 Docker 鏡像的來源。DockerUI 官方文檔指出了 DockerUI 官方鏡像的名稱 dockerui/dockerui
,Docker 官方維護的發行版也都有 official 標籤;除了這兩種狀況以外,全部的鏡像都沒有安全標籤,你徹底沒法判斷鏡像的安全性。
獲取 Docker 鏡像的更改歷史:
docker history <image-name>
例如:
docker history busybox
注:只能對本地存在的 Docker 鏡像執行這個命令。
將一個鏡像推送到 Docker registry:
docker push <user>/<repo_name>
注:不能直接使用
docker push job1
,全部推送命令的格式必須是docker push <user>/<repo_name>
,不加<user>
沒法推送到 Docker registry。
本章知識介紹了最基本的十五個 Docker 命令,接下來的教程將會陸續介紹如何在 Docker 中運行一個 Python Web 應用以及其餘的 Docker 命令。
譯者注:本文到此結束,可是直到本系列教程的結束,Flux7 都沒有提供一個 Docker 中運行 Python Web 應用的實例。接下來會在本系列教程結束後補充幾篇 Docker 應用的實例。