Flux7 Docker 系列教程(二):必備的 15 條命令

本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands
該系列全部文章將參考其餘學習資料翻譯,也會加入本身的學習做爲部分註解。若有錯誤,歡迎指正。web

the-15-commands.png

第一篇文章《Docker 簡介》 介紹了 Docker 的基本概念,也介紹了 Docker 的安裝、檢查了 Docker 是否可以運行。本篇文章介紹實踐中經常使用的 15 個 Docker 命令,以及它們具體在後臺作了什麼工做。(原文雖然標題說有 15 條命令,實際上只有 14 條)docker

0. 技巧

這裏是一個操做 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 指定刪除其中一個。安全

1. 檢查安裝

檢查 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

2. 檢查鏡像

那麼咱們檢查一下本機有多少 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 的鏡像文件:

3. 下載鏡像

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 工具集,包括各類經常使用命令,例如 catecho ,也有各類高級命令,例如 grepmount 等。執行完 docker pull busybox 以後,Docker 會自動從 Docker 官方下載 busybox 的鏡像文件。

這個過程當中能夠執行 Ctrl+Cdocker pull 不會由於 Ctrl+C 打斷,而回轉爲後臺執行。

4. 運行鏡像

有了鏡像固然要對鏡像作點事情,例如:

docker run busybox /bin/echo Hello Docker

這條命令是運行 busybox 鏡像中的 /bin/echo 命令,參數是 Hello Docker

命令 # docker run busybox /bin/echo Hello Docker

Hello Docker

5. 運行守護進程

固然有人會感到疑惑:難道不能在 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 這個名字替代。

6. 查詢輸出

查詢容器的輸出內容:

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

7. help 選項

和通用的 unix 命令同樣,Docker 也有 help 選項:

docker help

docker <command> --help

8. 中止容器

那麼仍是剛剛那個容器:

這個容器已經輸出了足夠多的 Docker,該讓他停下了:

docker stop $sample_job

9. 重啓容器

或者重啓剛剛那個容器:

docker restart $sample_job

10. 刪除容器

固然也能夠徹底刪除這個容器:

docker stop $sample_job
docker rm $sample_job

注:Docker 的文件是放在 /var/lib/docker/containers/ 中的。

11. 保存容器

將當前的 Docker 容器狀態保存爲鏡像:

docker commit $sample_job job1

這裏保存成一個名叫 job1 的鏡像。

注意:鏡像名稱中只容許出現小寫字母和數字。

12. 檢查容器

若是不太確信剛剛已經把容器保存成鏡像了,可使用下面的命令查看剛剛 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

13. 搜索倉庫

在前面文章提到了 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 標籤;除了這兩種狀況以外,全部的鏡像都沒有安全標籤,你徹底沒法判斷鏡像的安全性。

14. 獲取鏡像歷史

獲取 Docker 鏡像的更改歷史:

docker history <image-name>

例如:

docker history busybox

注:只能對本地存在的 Docker 鏡像執行這個命令。

15. 推送鏡像

將一個鏡像推送到 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 應用的實例。

相關文章
相關標籤/搜索