1. 程式人生 > >docker Dockerfile詳解

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

執行一下試試:

[email protected]pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world

一旦命令匹配:

[email protected]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

在如下推薦教程基礎上,增加一些常用Dockerfile命令

推薦教程:http://blog.csdn.net/wsscy2004/article/details/25878223