1. 程式人生 > >docker入門例項

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。

  1. 首先,執行下面的命令,將 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
  1. 現在,執行這個 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命令,就會發現被刪除的容器檔案已經消失了。