Dockerfile 詳解
製作Docker image 有兩種方式:
使用 Docker container,直接構建容器,再匯出成 image 使用
是使用 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 param2 (shell中執行)
配置容器啟動後執行的命令,並且不可被 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