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:将檔案<src>拷貝到container的檔案系統對應的路徑<dest>
所有拷貝到container中的檔案和檔案夾權限為0755,uid和gid為0
如果檔案是可識别的壓縮格式,則docker會幫忙解壓縮
如果要ADD本地檔案,則本地檔案必須在 docker build <PATH>,指定的<PATH>目錄下
如果要ADD遠端檔案,則遠端檔案必須在 docker build <PATH>,指定的<PATH>目錄下。比如:
docker build github.com/creack/docker-firefox
docker-firefox目錄下必須有Dockerfile和要ADD的檔案
注意:使用docker build - < 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,如需轉載請自行聯系原作者