1. 程式人生 > 其它 >Docker Dockerfile(沒寫完)

Docker Dockerfile(沒寫完)

Dockerfile是一個用來構建映象文字檔案,文字內容包含了一條條構建映象所需的指令和說明。

使用Dockerfile定製映象

定製一個nginx映象(構建好的映象內會有一個/user/share/nginx/html/index.html檔案)

在一個空的目錄下,新建一個名為Dockerfile檔案,並在檔案內新增以下內容:

FROM nginx
RUN echo '這是一個本地構建的nginx映象' > /user/share/nginx/html/index.html

引數分析:

  • FROM:定製的映象都是基於FROM的映象,這裡的nginx就是定製需要的基礎映象。後續的操作都是基於nginx。
  • RUN:用於執行後面跟著的命令列命令,有以下兩種格式:
    shell格式:
RUN <命令列命令>
# <命令列命令> 等同於,在終端操作的shell命令

exec格式:

RUN ["可執行檔案", "引數1", "引數2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline

注意:Dockerfile的指令每執行一次都會在docker上新建一層,所以過多無意義的層會造成映象膨脹過大。例如:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上會建立三層映象,可簡化為以下格式:

FROM centos
RUN yum -y install wget
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
    && tar -xvf redis.tar.gz

如上,以&&符號連線命令,這樣執行後,只會建立1層映象。

開始構建映象

在Dockerfile檔案的存放目錄下,執行構建動作。
以下例項,通過目錄下的Dockerfile構建一個nginx:v3(映象名稱:映象標籤)

docker build -t nginx:v3 .

注:最後的.代表本次執行的上下文路徑。

上下文路徑

docker build -t nginx:v3 .

上下文路徑是指docker在構建映象,有時候想要使用到本機的檔案(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包。
解析:由於docker的執行模式C/S。我們本機是C,docker引擎是S。實際的構建過程是在docker引擎下完成的,所以這個時候無法用到我們本機的檔案。這就需要把我們本機的指定目錄下的檔案一起提供給docker引擎使用。

指令詳解

COPY

複製指令,從上下文目錄中複製檔案或者目錄到容器裡指定路徑。
格式:

COPY [--chown=<user>:<group>]   <源路徑>...<目標路徑>

[--chown=:]:可選引數,使用者改變複製到容器內檔案的擁有者和陣列。
例如:

COPY hom* /mydir/
COPY hom?.txt /mydir/