ubuntu-docker入門到放棄(七)Dockerfile簡介


一、dockerfile基本結構

最簡單的理解就是dockerfile實際上是一些命令的堆疊,有點像最基礎的shell腳本,沒有if 沒有for,就是串行的一堆命令。

一般而言,dockerfile分為四個部分:基礎鏡像信息、維護者信息、鏡像操作指令和啟動時執行指令,例如:

#基礎鏡像信息
FROM ubuntu

#維護者信息
MAINTAINER slim_liu slim_liu@163.com

#鏡像操作指令

RUN apt-get update && apt-get install -u nginx

#啟動容器時執行的指令

CMD /usr/sbin/nginx

 二、鏡像操作指令

指令分為很多種,下面一一列舉:

指令一般格式為 INSTRUCTION arguments ,指令包括FROM、MAINTAINER、RUN 等。

2.1 FROM

格式:

FROM <image>或FROM <image>:<tag>

Dockerfile 的開頭,必須是FROM,如果在同一個dockerfile中創建多個鏡像,可以使用多個from,每個鏡像一次。

 

2.2 MAINTAINER

格式:

MANINTAINER <name>,指定維護者信息

 

2.3 RUN

格式:

RUN <command>或RUN ["executable", "param1", "param2"]

前者將在shell終端中執行命令,即 /bin/sh -c。后者則使用exec執行,指定終端,可以使用第二種,RUN ["/bin/bash", "-c" , "echo hello!"]

 

2.4 CMD

CMD支持三種格式:

CMD ["executable", "param1", "param2"]#使用exec執行,推薦方式。
CMD command param1 param2 #在/bin/sh 中執行,提供給需要交互的應用。
CMD ["param1", "param2"] #提供給ENTRYPOINT 的默認參數。

每個dockerfile只能指定一條CMD指令,如果有多條,則只會執行最后一條,並且如果啟動容器時,指定了運行的命令,則會覆蓋掉CMD指定的命令。

 

2.5 EXPOSE

格式:

EXPOSE <port> <port> ...
例:
EXPOSE 80 443 3306

告訴docker容器暴露的端口號,供互聯系統使用。在啟動容器時,需要通過-P,docker主機會自動分配一個端口轉發到指定的端口,如果使用-p,則可以具體的指定端口映射關系。

 

 2.6 ENV

格式:

ENV <key> <value> #指定一個環境變量,會被后續的RUN變量使用,並且會在容器中保持。
例:
ENV A 1
RUN curl -SL http://test.com/temp-$A.tar.gz

 

2.7 ADD

格式:

ADD <src> <dest>

復制指定的src到容器中的dest,src可以是dockerfile相對路徑的目錄、url、tar文件(將自動解壓成目錄)等

 

2.8 COPY

格式:

COPY <src> <dest>

復制本地主機的src(為dockerfile所在目錄的相對路徑,文件或目錄)為容器中的dest,目標路徑不存在時,會自動創建,當使用本地目錄為源目錄時,推薦使用COPY。

 

2.9 ENTRYPOINT

格式1:

ENTRYPOINT ["executable", "param1", "param2"]

格式2:

ENTRYPOINT command param1 param2 (#shell中執行)

配置容器啟動時執行的命令,並且不能被docker run 提供的參數覆蓋。

每個dockerfile只能有一個此參數,多個時候,只有最后一個生效。

 

2.10 VOLUME

格式:

VOLUME <"/data">

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等。

 

2.11 USER

格式:

USER daemon

指定運行容器時的用戶名或UID,后續的RUN命令也會使用指定用戶。

當容器不需要管理員權限時,建議添加USER參數,例如:

RUN groupadd -r postgres && useradd -r -g postgres postgres #需要臨時獲取管理員權限,可以使用gosu,不推薦sudo。

 

2.12 WORKERDIR

格式:

WORKERDIR /path/workerdir

為后續的RUN CMD ENTRYPOINT等指令配置工作目錄。

可以使用多個WORKERDIR,如果后續的參數是相對路徑,將基於之前的WORKERDIR

例:

WORKERDIR /a
WORKERDIR b
WORKERDIR c

RUN pwd

/a/b/c

 

2.13 ONBUILD

格式:

ONBUILD [INSTRUCTION]

配置當所創建的鏡像作為其他新創建鏡像的基礎鏡像時,所執行的操作指令。

例:

我們首先創建了image-a,並在其中使用了ONBUILD

[...]
ONBUILD ADD . /src/

ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

 

接着我們from image-a創建image-b,就會自動執行上面的兩句。

如果使用ONBUILD指令的鏡像,推薦在標簽中注明,例如,ruby:1.9-onbuild


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM