天天看點

Dockerfile的了解

Dockerfile檔案詳解

Docker鏡像的制作有docker commit 和Dockerfile,官方推薦使用Dockerfile來制作

通過一個執行個體來看下docker鏡像的制作過程:

1、建立一個Dockerfile的檔案

2、在檔案中寫入下面代碼:

1

2

<code>FROM ubuntu</code>

<code>RUN apt-get </code><code>install</code> <code>-y vim</code>

3、執行docker bulid指令來建構鏡像

<code>docker build -t new-ubuntu .</code>

這條指令-t參數指定新的鏡像的名稱;點“.” 代表的是Dockerfile檔案的路徑,由于案例的Dockerfile就在目前目錄下面是以就用點符号來辨別

從這個輸出中我們可以看到真正的建構過程 首先 Docker 将 build context 中的所有檔案發送給 Docker daemon。build context 為鏡像建構提供所需要的檔案或目錄。

Dockerfile 中的 ADD、COPY 等指令可以将 build context 中的檔案添加到鏡像。

此例中,build context 為目前目錄 /root,該目錄下的所有檔案和子目錄都會被發送給 Docker daemon。

是以,使用 build context 就得小心了,不要将多餘檔案放到 build context,特别不要把 /、/usr 作為 build context,否則建構過程會相當緩慢甚至失敗。

Dockerfile檔案中的其他關鍵字

FROM 是基于那個基礎鏡像

RUN 需要安裝的軟體

MAINTAINER 鏡像建立者的資訊

CMD :容器啟動時需要執行的指令;但是在一個Dockerfile檔案中隻能有一個CMD指令,如果有多個,隻執行最後一個CMD指令

如果在啟動容器的時候指定了指令,那麼這個指令會替換掉容器鏡像中預設寫的CMD指令

ENTRYPOINT:

container啟動時執行的指令,但是一個Dockerfile中隻能有一條ENTRYPOINT指令,如果多條,則隻執行最後一條

ENTRYPOINT沒有CMD的可替換特性

USER:使用那個使用者跑容器

例如:

ENTRYPOINT ["memcached"]

USER daemon

EXPOSE:容器内部開啟的端口,主機上使用還得在啟動容器的時候做端口映射 

docker run -p 80:80 xxx

ENV: 設定環境變量

ENV LANG en_US.UTF-8

ENV LC_ALL en_US.UTF-8

ADD:将檔案&lt;src&gt;拷貝到container的檔案系統對應的路徑&lt;dest&gt;

所有拷貝到container中的檔案和檔案夾權限為0755,uid和gid為0

如果檔案是可識别的壓縮格式,則docker會幫忙解壓縮

如果要ADD本地檔案,則本地檔案必須在 docker build &lt;PATH&gt;,指定的&lt;PATH&gt;目錄下

如果要ADD遠端檔案,則遠端檔案必須在 docker build &lt;PATH&gt;,指定的&lt;PATH&gt;目錄下。比如:

docker build github.com/creack/docker-firefox

docker-firefox目錄下必須有Dockerfile和要ADD的檔案

注意:使用docker build - &lt; somefile方式進行build,是不能直接将本地檔案ADD到container中。隻能ADD

 url file.

ADD隻有在build鏡像的時候運作一次,後面運作container的時候不會再重新加載了。

VOLUME

可以将本地檔案夾或者其他container的檔案夾挂載到container中。

WORKDIR

切換目錄用,可以多次切換(相當于cd指令),對RUN,CMD,ENTRYPOINT生效

ONBUILD

ONBUILD 指定的指令在建構鏡像時并不執行,而是在它的子鏡像中執行

本文轉自 kesungang 51CTO部落格,原文連結:http://blog.51cto.com/sgk2011/1923972,如需轉載請自行聯系原作者

繼續閱讀