docker入門例項
1.image檔案
Docker 把應用程式及其依賴,打包在 image 檔案裡面。只有通過這個檔案,才能生成 Docker 容器。image 檔案可以看作是容器的模板。Docker 根據 image 檔案生成容器的例項。同一個 image 檔案,可以生成多個同時執行的容器例項。
image 是二進位制檔案。實際開發中,一個 image 檔案往往通過繼承另一個 image 檔案,加上一些個性化設定而生成。舉例來說,你可以在 Ubuntu 的 image 基礎上,往裡面加入 Apache 伺服器,形成你的 image。
# 列出本機的所有 image 檔案。 $ docker image ls # 刪除 image 檔案 $ docker image rm [imageName]
image 檔案是通用的,一臺機器的 image 檔案拷貝到另一臺機器,照樣可以使用。一般來說,為了節省時間,我們應該儘量使用別人製作好的 image 檔案,而不是自己製作。即使要定製,也應該基於別人的 image 檔案進行加工,而不是從零開始製作。
為了方便共享,image 檔案製作完成後,可以上傳到網上的倉庫。Docker 的官方倉庫 Docker Hub 是最重要、最常用的 image 倉庫。此外,出售自己製作的 image 檔案也是可以的。
2.hello-world
下面,我們通過最簡單的 image 檔案"hello world",感受一下 Docker。
-
首先,執行下面的命令,將 image 檔案從倉庫抓取到本地。
$ docker image pull library/hello-world
上面程式碼中,docker image pull
是抓取 image 檔案的命令。library/hello-world
是 image 檔案在倉庫裡面的位置,其中library
是 image 檔案所在的組,hello-world
是 image 檔案的名字。
由於 Docker 官方提供的 image 檔案,都放在library
組裡面,所以它的是預設組,可以省略。因此,上面的命令可以寫成下面這樣。
$ docker image pull hello-world
抓取成功以後,就可以在本機看到這個 image 檔案了。
$ docker image ls
-
現在,執行這個 image 檔案。
$ docker container run hello-world
docker container run
命令會從 image 檔案,生成一個正在執行的容器例項。
注意,docker container run
命令具有自動抓取 image 檔案的功能。如果發現本地沒有指定的 image 檔案,就會從倉庫自動抓取。因此,前面的docker image pull
命令並不是必需的步驟。
如果執行成功,你會在螢幕上讀到下面的輸出。
$ docker container run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. ... ...
輸出這段提示以後,hello world
就會停止執行,容器自動終止。
有些容器不會自動終止,因為提供的是服務。比如,安裝執行 Ubuntu 的 image,就可以在命令列體驗 Ubuntu 系統。
$ docker container run -it ubuntu bash
對於那些不會自動終止的容器,必須使用docker container kill
命令手動終止。
$ docker container kill [containID]
3.容器檔案
image 檔案生成的容器例項,本身也是一個檔案,稱為容器檔案。也就是說,一旦容器生成,就會同時存在兩個檔案: image 檔案和容器檔案。而且關閉容器並不會刪除容器檔案,只是容器停止執行而已。
# 列出本機正在執行的容器 $ docker container ls # 列出本機所有容器,包括終止執行的容器 $ docker container ls --all
上面命令的輸出結果之中,包括容器的 ID。很多地方都需要提供這個 ID,比如上一節終止容器執行的docker container kill
命令。
終止執行的容器檔案,依然會佔據硬碟空間,可以使用docker container rm
命令刪除。
$ docker container rm [containerID]
執行上面的命令之後,再使用docker container ls --all
命令,就會發現被刪除的容器檔案已經消失了。