1. 程式人生 > >Dockerfile 詳解

Dockerfile 詳解

製作Docker image 有兩種方式

  1. 使用 Docker container,直接構建容器,再匯出成 image 使用

  2. 是使用 Dockerfile,將所有動作寫在檔案中,再 build 成 image。Dockerfile 的方式非常靈活,推薦使用

一.Dockerfile 基本結構

一般的,Dockerfile 分為四部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令。’#’ 為 Dockerfile 中的註釋。先看下面一個小例子:

# This my first nginx Dockerfile
# Version 1.0

# Base images 基礎映象
FROM centos #MAINTAINER 維護者資訊 MAINTAINER tianfeiyu #ENV 設定環境變數 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 檔案放在當前目錄下,拷過去會自動解壓 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ #RUN 執行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www #WORKDIR 相當於cd
WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf #EXPOSE 對映埠 EXPOSE 80 #CMD 執行以下命令 CMD ["nginx"]

FROM : 指定基礎映象,要在哪個映象建立

格式為 FROM 或FROM :

第一條指令必須為 FROM 指令。

MAINTAINER:指定維護者資訊

格式為 MAINTAINER

RUN:在映象中要執行的命令

格式為 RUN 或 RUN [“executable”, “param1”, “param2”]

前者將在 shell 終端中執行命令,即 /bin/bash -c ;後者則使用 exec 執行。指定使用其它終端可以通過第二種方式實現,例如

RUN [“/bin/bash”, “-c”,”echo hello”]

WORKDIR:指定當前工作目錄,相當於 cd

格式為 WORKDIR /path/to/workdir

為後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。
可以使用多個 WORKDIR 指令,後續命令如果引數是相對路徑,則會基於之前命令指定的路徑。例如

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

則最終路徑為 /a/b/c

EXPOSE:指定容器要開啟的埠

格式為 EXPOSE […]

告訴 Docker 服務端容器暴露的埠號,供互聯絡統使用。在啟動容器時需要通過 -P,Docker 主機會自動分配一個埠轉發到指定的埠。

ENV:定義環境變數

格式為 ENV 。 指定一個環境變數,會被後續 RUN 指令使用,並在容器執行時保持。
例如

ENV PATH /usr/local/nginx/sbin:$PATH

COPY :複製本地主機的 (為 Dockerfile 所在目錄的相對路徑)到容器中的

格式為 COPY

ADD:相當於 COPY,但是比 COPY 功能更強大

格式為 ADD

該命令將複製指定的 到容器中的 。 其中 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 檔案,複製進容器會自動解壓。

VOLUME:掛載目錄

格式為VOLUME [“/data”]

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

USER

格式為 USER daemon

指定執行容器時的使用者名稱或 UID,後續的 RUN 也會使用指定使用者。當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者,例如: RUN useradd -s /sbin/nologin -M www。

ENTRYPOINT

兩種格式:

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

ENTRYPOINT command param1 param2shell中執行)

配置容器啟動後執行的命令,並且不可被 docker run 提供的引數覆蓋。每個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。

CMD

支援三種格式:

CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;
CMD command param1 param2 在 /bin/bash 中執行,提供給需要互動的應用;
CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設引數;

指定啟動容器時執行的命令,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行。如果使用者啟動容器時候指定了執行的命令,則會覆蓋掉 CMD 指定的命令。

ONBUILD:在構建本映象時不生效,在基於此映象構建映象時生效

格式為 ONBUILD [INSTRUCTION]

配置當所建立的映象作為其它新建立映象的基礎映象時,所執行的操作指令。

ENTRYPOINT 和 CMD 的區別:ENTRYPOINT 指定了該映象啟動時的入口,CMD 則指定了容器啟動時的命令,當兩者共用時,完整的啟動命令像是 ENTRYPOINT + CMD 這樣。使用 ENTRYPOINT 的好處是在我們啟動映象就像是啟動了一個可執行程式,在 CMD 上僅需要指定引數;另外在我們需要自定義 CMD 時不容易出錯。

使用 CMD 的 Dockerfile:

[root@bdyh test]# cat Dockerfile 
FROM mysql

CMD ["echo","test"]

使用 ENTRYPOINT 的 Dockerfile:

[root@sta2 entrypoint]#  cat  Dockerfile 
FROM mysql

ENTRYPOINT ["echo","test"]

結論:ENTRYPOINT 不能覆蓋掉執行時的引數,CMD 可以掉覆蓋預設的引數。

使用以下命令來構建一個映象:

#構建映象時,需要將要使用的包及 Dockerfile 檔案放在一個目錄中
docker build -t DilemmaVi/nginx:1.8 .

相關推薦

dockerfile

rsh add exec 鏡像 一個 pac git 類型 -type 基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOINT ENV EXPOSE VOLUME WORKDIR USER ARG 基本示例 # Th

Dockerfile(二)

-h poi cd命令 資源 自動 創建 圖片 技術分享 efault Dockerfile文件詳解 什麽是dockerfile? Dockerfile是一個包含用於組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指

dockerfile Docker入門02——Dockerfile

Docker入門02——Dockerfile詳解   基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOINT ENV EXPOSE

docker容器技術之Dockerfile(六)

上一篇文章的連線:docker容器技術之儲存卷(五) 目錄 一、前言 二、Dockerfile 2.1製作映象有兩種: 2.2 什麼是Dockerfile? 2.3 Dockerfile的語法格式 dockerfile做映象時的工作邏輯: .dockering

Docker官方起步文件總結-第二節:Dockerfile

Dockerfile A Dockerfile is a text document that contains all the commands a user could call on the

docker Dockerfile

如何使用 Dockerfile用來建立一個自定義的image,包含了使用者指定的軟體依賴等。當前目錄下包含Dockerfile,使用命令build來建立新的image,並命名為edwardsbean/centos6-jdk1.7: docker build -t ed

Docker系列07—Dockerfile

本文收錄在容器技術學習系列文章總目錄 1、認識Dockerfile 1.1 映象的生成途徑  基於容器製作  dockerfile,docker build   基於容器製作映象,已經在上篇詳細講解過了;這篇主要講解基於Dockerfile,使用docker buil

Dockerfile

製作Docker image 有兩種方式: 使用 Docker container,直接構建容器,再匯出成 image 使用 是使用 Dockerfile,將所有動作寫在檔案中,再 build 成 image。Dockerfile 的方式非常靈活,推薦使用

深入淺出Docker技術-Dockerfile

一、Dockerfile介紹    Docker通過讀取Dockerfile裡面的內容可以自動build image,Dockerfile是一個包含了build過程中需要執行的所有命令的文字檔案。也可以

【docker虛擬化技術】dockerfile與實踐

什麼是dockerfile?     Dockerfile是為基於已有映象快速構建docker image(映象)而設計的,當你使用docker build命令的時候,docker 會讀取當前目錄下的命名為Dockerfile(首字母大寫)的純文字檔案並執行裡面的指令構建出

【轉】Dockerfile

tail log rfi file -s doc dock art blank Dockerfile詳解 https://blog.csdn.net/wo18237095579/article/details/80540571 ------------------

Docker筆記(十一):Dockerfile與最佳實踐

Dockerfile是一個文字檔案,包含了一條條指令,每條指令對應構建一層映象,Docker基於它來構建一個完整映象。本文介紹Dockerfile的常用指令及相應的最佳實踐建議。 1. 理解構建上下文(build context) Docker映象通過docker build指令構建,該指令執行時當前的工作目

Dockerfile中的COPY和ADD指令與比較

copy和add指令詳解與比較Dockerfile中的COPY指令和ADD指令都可以將主機上的資源復制或加入到容器鏡像中,都是在構建鏡像的過程中完成的。COPY指令和ADD指令的唯一區別在於是否支持從遠程URL獲取資源。COPY指令只能從執行docker build所在的主機上讀取資源並復制到鏡像中。而ADD

Dockerfile創建鏡像模板

Docker 虛擬化 Dockerfile Dockerfile是一個文本格式的配置文件,用戶可以使用Dockfile快速創建自定義的鏡像。Dockerfile是由一行行的命令語句組成,並且支持以#開頭的註釋行。vi Dockerfile#一般而言,Dockerfile分為四部分:基礎鏡像信息、維

Dockerfile ONBUILD命令

ONBUILD5. 使用ONBUILD鏡像 ONBUILD該指令的作用就是,它後面往往放的一些可執行的命令,但是它進行鏡像構建時,ONBUILD後面的命令不會執行,而是別人把它構建的鏡像作為基礎鏡像拿來再構建鏡像時,就會執行ONBUILD後面的指令。下面以實驗說明: (1)父鏡像的Dockerfile文件內容

Dockerfile 指令

art 直接 上下 復制 並不會 文件的 pan 環境變量 inter 使用Dockerfiledocker build [選項] <上下文路徑/URL/->其他構建方法直接用Git repo 進行構建用給定的tar壓縮包構建從標準輸入中讀取Dockerfile

3-3.8 Dockerfile 指令之二

上一篇文章介紹了Dockerfile指令詳解之一,包括: FROM 指定基礎映象 RUN 執行命令 COPY 複製檔案 ADD 更高階的複製檔案 CMD 容器啟動命令 ENTRYPOINT 入口點 ENV 設定環境變數 目錄 1. ARG 構建引數 2. VO

3-3.8 Dockerfile 指令之一

Dockerfile提供了一種模板檔案形式來建立docker映象的方式,有其特有的指令,本篇詳解其用法。 目錄 FROM 指定基礎映象 RUN 執行命令 COPY 複製檔案 ADD 更高階的複製檔案 CMD 容器啟動命令 ENTRYPOINT 入口點 ENV 設定環境

Dockerfile指令--VOLUME 指令

格式為: VOLUME ["<路徑1>", "<路徑2>"...] VOLUME <路徑> 之前我們說過,容器執行時應該儘量保持容器儲存層不發生寫操作,對於資料庫類需要儲存動態資料的應用,其資料庫檔案應該保存於卷(volume)中,後面的章節我們會進一步

Docker(3):Dockerfile配置

FROM  : 指定base映象 MAINTAINER :設定映象的作者,可以是任意的字串 COPY :將檔案從build context 複製到映象             COPY 支援兩種形式:CO