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