1. 程式人生 > >如何製作Docker映象

如何製作Docker映象

我們知道,要建立一個Docker容器,要先有Docker映象,Docker映象怎麼建立的呢,一般有兩種建立方式:
1. 根據基礎映象,生成新映象
2. 使用Dockerfile生成映象

在製作映象之前,先看下怎麼查詢映象

列出所有在主機上的映象
docker images列出所有映象
這裡寫圖片描述
我主機上有兩個映象centos和ubuntu,我們在映象列表中看到三個至關重要的東西。
- 映象源,例如 ubuntu
- 映象的標籤(tags),例如 latest
- 映象ID,每個映象都有映象ID

從DockerHub中查詢映象
DockerHub是遠端映象倉庫,儲存種各樣的映象,可以從DockerHub官網上搜索你想要的映象
這裡寫圖片描述

也可以在本機使用docker search 查詢 DockerHub上的映象
這裡寫圖片描述

知道映象的查詢方式後,下來我們開始製作映象

1. 根據基礎映象,生成新映象

這種方式首先需要有一個基礎映象,可以通過docker pull命令,從DockerHub中先下載一個映象,作為我們的基礎映象
這裡寫圖片描述

下載時,如果沒有指定tag,預設latest,使用docker images檢視發現centos映象已經下載下來了
這裡寫圖片描述

下面開始基於映象執行一個容器,修改容器內容,重新Commit生成新映象
這裡寫圖片描述

這裡容器ID(9dc737402a4d)已經生成,並已進入到容器中,在執行的容器內建立一個text.txt的檔案,然後exit退出容器
這裡寫圖片描述

使用docker commit生成新映象
這裡寫圖片描述
這裡我們指定了兩個標識(flags) -m 和 -a 。-m 標識我們指定提交的資訊,就像你提交一個版本控制。-a 標識允許對我們的更新來指定一個作者,最後用docker images檢視映象發現新映象已經生成了

驗證:
執行新映象生成容器,到容器中檢視是否存在剛才建立的text.txt檔案
這裡寫圖片描述
經驗證後發現,在新生成的容器中,存在有剛建立的text.txt檔案,說明新映象已經生效

2. 使用Dockerfile生成映象

使用 docker commit 命令能夠能快速的建立一個新映象,但是有點麻煩,並且在一個團隊中也不能夠輕易的共享它的開發過程。因此我們使用一個新的命令 docker build , 從零開始來建立一個新的映象。我們需要建立一個 Dockerfile 檔案,其中包含一組指令來告訴 Docker 如何構建我們的映象。

現在建立一個 Dockerfile,內容如下:

# This is a comment
FROM ubuntu:latest
MAINTAINER longwentao <[email protected]126.com>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra

第一個指令 FROM 是告訴 Docker 使用的哪個映象源,這裡我們使用的是 Ubuntu:latest 基礎映象。

下一步,我們使用 MAINTAINER 指令來指定誰在維護這個新映象。

最後,我們指定了兩個 RUN 指令。 RUN 指令在映象內執行一條命令,例如:安裝一個包。這裡我們更新了 APT 的快取,並且安裝 Ruby 和 RubyGems ,然後使用 gem 安裝 Sinatra映象

現在,我們使用 Dockerfile 檔案,通過 docker build 命令來構建一個映象
這裡寫圖片描述
我們使用 docker build 命令並指定 -t 標識(flag)來標示屬於 longwentao,映象名稱為 sinatra,標籤是 v2。

如果 Dockerfile 在我們當前目錄下,我們可以使用 . 來指定 Dockerfile

我們可以看到構建過程,Docker 做的第一件事是通過上下文進行構建,基本上是目錄的內容構建。這樣做是因為 Docker 程序構建映象是實時構建的,並且是需要本地的上下文來做這些工作的。(這裡上下文是指Context)

下一步,Dockerfile 中的每一條命令都一步一步的被執行。我們會看到每一步都會建立一個新的容器,在容器內部執行指令並且提交更改,就像docker commit 一樣。當所有的指令執行完成之後,我們會得到97feabe5d2ed 映象,然後所有中間容器會被清除。