1. 程式人生 > >Docker(二)----Dockerfile檔案詳解

Docker(二)----Dockerfile檔案詳解

一、什麼是Dockerfile?

Dockerfile是一個包含用於組合映像的命令的文字文件。可以使用在命令列中呼叫任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。

docker build命令用於從Dockerfile構建映像。可以在docker build命令中使用-f標誌指向檔案系統中任何位置的Dockerfile。

例:

docker build -f /home/fendo/Dockerfile

二、Dockerfile的基本結構

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

三、Dockerfile格式

1. FROM   指定基於哪個基礎映象,必須為第一個命令

格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
示例:
  FROM mysql:5.6
注:
  tag或digest是可選的,如果不使用這兩個值時,會使用latest版本的基礎映象

2. MAINTAINER 維護者資訊

格式:
    MAINTAINER <name>
示例:
    MAINTAINER fendo fendo
    MAINTAINER fendo.com
    MAINTAINER fendo fendo <
[email protected]
>

3.RUN 構建映象時執行的命令

RUN用於在映象容器中執行命令,其有以下兩種命令執行方式:

3.1、shell執行
格式:
    RUN <command>
	
3.2、exec執行
格式:
    RUN ["executable", "param1", "param2"]
示例:
    RUN ["executable", "param1", "param2"]
    RUN yum update
    RUN ["/etc/execfile", "arg1", "arg1"]
注:
  RUN指令建立的中間映象會被快取,並會在下次構建中使用。如果不想使用這些快取映象,可以在構建時指定--no-cache引數,如:docker build --no-cache

4.CMD 構建容器後呼叫,也就是在容器啟動時才進行呼叫。

格式:
    CMD ["executable","param1","param2"] (執行可執行檔案,優先)
    CMD ["param1","param2"] (設定了ENTRYPOINT,則直接呼叫ENTRYPOINT新增引數)
    CMD command param1 param2 (執行shell內部命令)
示例:
	CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]
注:
   CMD不同於RUN,CMD用於指定在容器啟動時所要執行的命令,而RUN用於指定映象構建時所要執行的命令,只能有一條。
5.ADD 將本地檔案新增到容器中,tar型別檔案會自動解壓,可以訪問網路資源,類似wget
格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用於支援包含空格的路徑
示例:
    ADD hom* /fendo/          # 新增所有以"hom"開頭的檔案到/fendo目錄
    ADD hom?.txt /fendo/      # ? 替代一個單字元,例如:"home.txt"
    ADD test relativeDir/     # 新增 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 新增 "test" 到 /absoluteDir/

6.COPY 功能類似ADD,但是是不會自動解壓檔案,也不能訪問網路資源URL

7.ENTRYPOINT  配置容器,容器啟動時要執行的命令,它和CMD很像,也是隻有一條生效,如果寫多個只有最後一條有效。和CMD不同是:CMD 是可以被 docker run 指令覆蓋的,而ENTRYPOINT不能覆蓋

格式:
    ENTRYPOINT ["executable", "param1", "param2"] (可執行檔案, 優先)
    ENTRYPOINT command param1 param2 (shell內部命令)
示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
注:
   ENTRYPOINT與CMD非常類似,不同的是通過docker run執行的命令不會覆蓋ENTRYPOINT,
     而docker run命令中指定的任何引數,都會被當做引數再次傳遞給ENTRYPOINT。
	 Dockerfile中只允許有一個ENTRYPOINT命令,多指定時會覆蓋前面的設定,而只執行最後的ENTRYPOINT指令。

8.LABEL 用於為映象新增元資料

格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
  LABEL version="1.0" description="這是描述" by="fendo"
注:
  使用LABEL指定元資料時,一條LABEL指定可以指定一或多條元資料,
    指定多條元資料時不同元資料之間通過空格分隔。推薦將所有的元資料通過一條LABEL指令指定,以免生成過多的中間映象。

9.ENV 設定環境變數,它主要是為後續的RUN指令提供一個環境變數

格式:
    ENV <key> <value>
    ENV <key>=<value> ...
示例:
    ENV myName fendo
    ENV myDog fendo Dog
    ENV myCat fendo

10.EXPOSE 指定於外界互動的埠

格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080
說明:
	用來指定要映射出去的埠,比如容器內部我們啟動了sshd和nginx,所以我們需要把22和80埠暴漏出去。這個需要配合-P(大寫)來工作,
	也就是說在啟動容器時,需要加上-P,讓它自動分配。如果想指定具體的埠,也可以使用-p(小寫)來指定。
注:
  EXPOSE並不會讓容器的埠訪問到主機。要使其可訪問,需要在docker run執行容器時通過-p來發布這些埠,或通過-P引數來發布EXPOSE匯出的所有埠

11.VOLUME 用於指定持久化目錄

格式:
    VOLUME ["/path/to/dir"]
示例:
    VOLUME ["/data"]
    VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"
說明:
    建立一個可以從本地主機或其他容器掛載的掛載點。
注:
  一個卷可以存在於一個或多個容器的指定目錄,該目錄可以繞過聯合檔案系統,並具有以下功能:
	1 卷可以容器間共享和重用
	2 容器並不一定要和其它容器共享卷
	3 修改卷後會立即生效
	4 對卷的修改不會對映象產生影響
	5 卷會一直存在,直到沒有任何容器在使用它

12.WORKDIR 工作目錄,類似於cd命令

格式:
    WORKDIR /fendo/nginx
示例:
    WORKDIR /a  (這時工作目錄為/a)
    WORKDIR b  (這時工作目錄為/a/b)
    WORKDIR c  (這時工作目錄為/a/b/c)
說明:
    為後續的RUN、CMD或者ENTRYPOINT指定工作目錄
注:
  通過WORKDIR設定工作目錄後,Dockerfile中其後的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都會在該目錄下執行。
    在使用docker run執行容器時,可以通過-w引數覆蓋構建時所設定的工作目錄。

相關推薦

Docker()----Dockerfile檔案

一、什麼是Dockerfile?Dockerfile是一個包含用於組合映像的命令的文字文件。可以使用在命令列中呼叫任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。docker build命令用於從Dockerfile構建映像。可以在docker bu

dockerfile檔案

FROM 功能為指定基礎映象,並且必須是第一條指令。 如果不以任何映象為基礎,那麼寫法為:FROM scratch。 同時意味著接下來所寫的指令將作為映象的第一層開始 語法: FROM <image> FROM <image>:<tag>

SpringBoot 學習筆記 配置檔案

在建立SpringBoot專案時,工程會自動建立一個application.properties,或者application.yml,兩種檔案格式都支援,這裡用application.yml,加入以下配置,注意空格 1. 引入依賴 &

Docker-compose配置檔案

原文連結:http://ju.outofmemory.cn/entry/287017 基本介紹 Compose 檔案是一個 YAML , 主要定義了 services, networks 和 volumes , 其預設路徑是./docker-compose.yml。

Docker Compose 配置檔案 Docker-Compose.yml 檔案

先來看一份 docker-compose.yml 檔案,不用管這是幹嘛的,只是有個格式方便後文解說: version: '2' services: web: image: dockercloud/hello-world ports: - 80

Docker Compose 配置檔案

一 專案用到了docker-compose,所以做下筆記 二 先放一個配置檔案 version: '3' services: web: image: dockercloud/hello-world ports: - 8080 networks: - fro

三大框架(ssh)學習——配置檔案

多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str

3-3.8 Dockerfile 指令

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

Spring Boot()配置檔案

簡介 Spring Boot使用“習慣由於配置”(專案中存在大量預設的配置,而且內建tomcat)的理念,讓你的無需手動進行配置就可以將專案執行起來。使用Spring Boot很容易建立一個獨立執行的、準生產級別的Spring框架的專案。同時,Spring Boot還提供一個全域性配置檔案對一些

記憶體管理 proc/meminfo 檔案

一、meminfo中引數的解釋: cat  /proc/meminfo MemTotal:        1859640 kB                &n

【SpringBoot學習之路】06.Springboot配置檔案

轉載宣告:商業轉載請聯絡作者獲得授權,非商業轉載請註明出處.原文來自 © 呆萌鍾 【SpringBoot學習之路】06.Springboot配置檔案詳解(二) 配置檔案值注入 @Value獲取值和@ConfigurationProperties獲取值比較

0 httpd2.2配置-Apache配置檔案-(

httpd-2.2 15 curl命令 curl是基於URL語法在命令列方式下工作的檔案傳輸工具,它支援FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支援HTTPS認證,並且支援HTTP的POST、PU

Docker(3):Dockerfile配置

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

企業級 SpringBoot 教程 ()Spring Boot配置檔案

springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性

Docker入門與實踐之 Dockerfile 語法

二、指令詳解 2.1 From 指令 FROM <image> FROM <image>:<tag> FROM <image>@<digest> FROM指定構建映象的基礎源映象,如果本地沒有指定的映象,則會自動從 D

Docker(三):Dockerfile 命令

上一篇文章Docker(二):Dockerfile 使用介紹介紹了 Dockerfile 的使用,這篇文章我們來繼續瞭解 Dockerfile ,學習 Dockerfile 各種命令的使用。 Dockerfile 指令詳解 1 FROM 指定基礎映象 FROM 指令用於指定其後構建新映象所使用的基礎映象。FR

Docker學習 > Dockerfile指令

目錄 Dockfile指令詳解 1. COPY 複製檔案 2. ADD 更高階的複製檔案 3. CMD 容器啟動命令 Dockfile指令詳解 Dockerfile 功能強大,提供了10多個指令。 1

IOS 裝置備份檔案 ()

http://www.cnblogs.com/ios8/p/ios-store2.html 這篇主要講解如何解析Manifest.mbdb檔案。 使用二進位制工具開啟這個檔案,檔案的頭6個位元組是固定的,相當於是檔案的一種標識 後面的內容是一個一個的項,可以使用一個迴圈

AndroidManifest.xml檔案

檔案約定 某些約定和規則普遍適用於清單中的所有元素和屬性: 元素 只用<manifest>和<application>元素時必須的,而且這兩個元素在檔案中只能出現一次。其他元素則可以多次出現在清單中,或者根本就不出現---但是為了構建一個有意義的清單

docker-compose.yml 配置檔案及專案釋出

一. 前言關於 docker compose 技術可以檢視官方文件 Docker Compose 以下的內容是確立在已經下載好 Docker 以及 Docker Compose,可參看 Docker Compose 的官方安裝教程 Install Docker Compose 二. Docker Comp