Docker DockerFile文件指令 & 構建


1.dockerfile指令格式

  1. # Comment注釋
  2. INSTRUCTION argument指令名 + 參數

2.普通指令

1. FROM

已存在的鏡像,基礎鏡像,第一條非注釋指令

FROM <image>

FROM <image>:<tag>

2. MAINTAINER

鏡像作者信息、聯系信息
與dockercommit -a類似

MAINTAINER <name>

3. RUN

指定當前鏡像中運行的命令

每一個RUN指令都毀在當層鏡像的上層創建一個新的鏡像

RUN <command> shell模式

默認/bin/sh -c command

RUN ["executable","param1","param2"] exec模式

指定其他shell:
RUN["/bin/bash","-c","echo hello"]

docker 構建過程:
docker build -t="NAME" -t 指定鏡像名

4. EXPOSE

指定運行該容器使用的端口

EXPOSE <port>[<port>...]

出於安全考慮,使用中仍需用 -p <port>命令指定

3. CMD ENTERYPOINT 容器運行時運行的命令

1. CMD

CMD ["executable","param1","param2"] exec模式

CMD <command> shell模式

與RUN區別:RUN是在容器構建是運行,CMD是在容器運行時運行。在docker run中指定命令,會覆蓋CMD命令,即CMD是默認命令。

CMD ["param1","param2"] 做為ENTRYPOINT指令的默認參數

2. ENTERYPOINT

CMD ["executable","param1","param2"] exec模式

CMD <command> shell模式

與CMD區別:不會被docker run 中運行的命令覆蓋。可以使用docker run --entrypoint覆蓋。entrypoint可與cmd組合:entrypoint指定命令,cmd指定參數。

4. ADD COPY VOLUME 設置鏡像目錄及文件

1. ADD

包含類似tar的解壓功能,安裝tar有所幫助

ADD <src>...<dest>
ADD ["<src>"..."<dest>"]適用於文件路徑有空格的情況

2. COPY

使用於純粹復制文件

COPY <src>...<dest>
COPY ["<src>"..."<dest>"]適用於文件路徑有空格的情況

3. VOLUME

VOLUME["/data"]

用於創建的容器添加卷,一個卷可以存在一個或多個容器的特定目錄,這個目錄可以跨過聯合文件系統,並提供如共享數據,對數據持久化功能。

5. WORKDIR ENV USER鏡像在構建及容器運行時的環境設置

1. WORKDIR

在容器內部設置工作目錄

WORKDIR /path/to/workdir

cmd、entrypoint命令都會在這個目錄下執行。
一般使用絕對路徑,如果用相對路徑會一直傳遞下去。

2. ENV

設置環境變量,在構建過程中和運行中均有效

ENV <key> <value>
ENV <key>=<value>

3. USER

容器以什么用戶運行,不指定默認為root
USER daemon
USER uid:gid
USER user:group

6. ONBULID 類似觸發器的指令

ONBULID [INSTRUCTION]
為鏡像添加觸發器,當一個鏡像被用作其他鏡像的基礎鏡像時,觸發器被執行,當子鏡像被構建時,會插入觸發器的指令。ONBUILD指令不會在自己構建時運行。

7.構建鏡像

默認會使用構建緩存,但是類似於 apt-get update不希望使用緩存,需要加上--no-cache或是在Dockerfile中修改ENV REFRESH_DATE 日期,便會使緩存刷新。

查看構建過程:docker history [image]

在安裝nginx的容器中以后台程序運行NGINX:

docker run -d --name nginx -p 80 unbuntufornginx nginx -g "daemon off;"


免責聲明!

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



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