Docker Dockerfile詳解
如何使用
Dockerfile用來創建一個自定義的image,包含了用戶指定的軟件依賴等。當前目錄下包含Dockerfile,使用命令build來創建新的image,並命名為edwardsbean/centos6-jdk1.7:
docker build -t edwardsbean/centos6-jdk1.7 .
Dockerfile關鍵字
如何編寫一個Dockerfile,格式如下:
# CommentINSTRUCTION arguments
FROM
基於哪個鏡像
RUN
安裝軟件用
MAINTAINER
鏡像創建者
CMD
container啟動時執行的命令,但是一個Dockerfile中隻能有一條CMD命令,多條則隻執行最後一條CMD.
CMD主要用於container時啟動指定的服務,當docker run command的命令匹配到CMD command時,會替換CMD執行的命令。如:
Dockerfile:
CMD echo hello world
運行一下試試:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world
一旦命令匹配:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean
ENTRYPOINT
container啟動時執行的命令,但是一個Dockerfile中隻能有一條ENTRYPOINT命令,如果多條,則隻執行最後一條
ENTRYPOINT沒有CMD的可替換特性
USER
使用哪個用戶跑container
如:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE
container內部服務開啟的端口。主機上要用還得在啟動container時,做host-container的端口映射:
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
container ssh服務的22端口被映射到主機的33301端口
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 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行
詳見here
最後更新:2017-04-03 12:56:41