Docker Dockerfile詳解


如何使用

Dockerfile用來建立一個自定義的image,包含了用戶指定的軟件依賴等。當前目錄下包含Dockerfile,使用命令build來建立新的image,並命名爲edwardsbean/centos6-jdk1.7:nginx

docker build -t edwardsbean/centos6-jdk1.7 .

Dockerfile關鍵字

如何編寫一個Dockerfile,格式以下:git

# CommentINSTRUCTION arguments

FROM

基於哪一個鏡像github

RUN

安裝軟件用docker

MAINTAINER

鏡像建立者centos

COPY

格式爲 COPY <src> <dest> 。ssh

複製本地主機的 <src> (爲Dockerfile所在目錄的相對路徑)到容器中的 <dest>memcached

從上面的定義中可獲知,src能夠是Dockerfile所在目錄的一個相對路徑,但在實際操做中,只有與Dockerfile文件在同一目錄的文件或目錄能夠成功的使用ADD <src> <dest>,如:(ADD ./test /data/code/nginx)ui

若是文件或目錄不與Dockerfile在同一目錄會提示 no such file or directory,如:(ADD ../test2 /data/code/nginx),從Dockerfile所在目錄經過 cd ../test2能夠到達test2url


CMD

container啓動時執行的命令,可是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條CMD.spa

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

格式爲 ADD <src> <dest> 。

該命令將複製指定的 <src> 到容器中的 <dest> 。 其中 <src> 能夠是Dockerfile所在目錄的一個相對路徑;也能夠是一個URL;還能夠是一個tar文件(自動解壓爲目錄)。

全部拷貝到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 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行

相關文章
相關標籤/搜索