1. 程式人生 > >Docker基礎教程——Dockerfile

Docker基礎教程——Dockerfile

    Dockerfile是一個文字格式的配置檔案,我們可以使用Dockerfile檔案快速建立自定義的映象。

    Dockerfile支援的眾多指令是本文主要要介紹的內容,之後會給出一個基本示例。

    一般而言,Docker分為4部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時的執行命令。

    並且支援以#開頭的註釋行。

1、指令

    指令的一半格式是INSTRUCTION arguments。

    (1)FROM

    格式為FROM <image>或者FROM <image>:<tag>。

    Dockerfile檔案第一行必須為FROM指令,並且,如果在同一個Dockerfile中建立多個映象時,可以使用多個FROM指令(每個映象一次)。

    (2)MAINTAINER

    指定維護者資訊,格式為:MAINTAINER <name>。

    (3)RUN

    格式為RUN <command>或者RUN [“executable”,"param1","param2"]。

    前者將在shell終端中執行命令,即/bin/sh -c;後者使用exec執行。

    第二種方式可以指定其他終端實現,如:RUN [“/bin/bash”,"-c","echo hello"]。

    每天RUN命令將在當前映象基礎上執行指定命令,並提交為新的映象。

    當命令較長時,可以使用\來換行。

    (4)CMD

    指定啟動容器時執行的命令,每個Dockerfile只能有一條CMD命令。如果指定了多個該命令,只有最後一條會被執行。

    該命令支援三種格式:

  • CMD ["executable","param1","param2"]:使用exec執行
  • CMD command param1 param2:在/bin/sh中執行,提供給需要互動的應用
  • CMD ["param1","param2"]:提供給ENTRYPOINT的預設引數

    如果在其中容器時指定了執行的命令,就會覆蓋掉CMD命令。

    (5)EXPOSE

    告訴docker服務端容器要暴露的埠號,供互聯絡統使用。

    格式:EXPOSE <port> [<port>...]

    在容器啟動時,需要通過-P讓Docker主機自動分配一個埠轉發到指定的埠;使用-p則可以具體指定哪個本地埠會對映過來。

    (6)ENV

    指定環境變數,會被後溪RUN指令使用,並咋容器執行時保持。

    格式為:ENV <key> <value>

    (7)ADD

    該命令向容器中複製檔案。

    格式:ADD <src> <dest>

    指定的<src>會被複制到<dest>。

    <src>可是是Dockerfile所在目錄的一個相對路徑(檔案或者目錄),也可以是一個URL,還可以是一個tar檔案(會自動解壓為一個目錄)。

    (8)COPY

    格式COPY <src> <dest>

    複製主機的<src>(Dockerfile所在目錄的相對路徑,檔案或目錄)為容器的<dest>,目標路徑不存在時會自動建立。

    (9)ENTRYPOINT

    配置容器啟動後執行的命令,並且不可以被docker run提供過的引數覆蓋。

    格式:

  • ENTRYPOINT ["executable","param1","param2"]
  • ENTRYPOINT command param1 param2:shell中執行

    同樣的,每個Dockerfile中只能有一個該指令,指定多個時,只有最後一個生效。

    (10)VOLUME

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

    格式:VOLUME ["/data"]。

    (11)USER

    指定執行容器時的使用者名稱或UID,後續的RUN也會使用指定使用者。

    格式:USER daemon

    (12)WORKDIR

    為後續的RUN、CMD、ENTRYPOINT指令配置工作路徑。

    格式:WORKDIR /path/to/workdir。

    可以使用多個該指令,後續指令如果是相對路徑,則會基於之前的命令指定路徑

    比如:

WORKDIR /A
WORKDIR B
RUN X
    則最終路徑為:/A/B。

    (13)ONBUILD

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

    格式:ONBUILD [INSTRUCTION]。

    比如如下Dockerfile:

...
ONBUILD ADD  .   /app/src
ONBUILD RUN /usr/local/... --dir  /app/src
...
    如果基於以上映象建立新映象時,新的Dockerfile中使用FROM指定以上為基礎映象,會自動執行ONBUILD指令內容,等價於在後面新增兩條指令。

2、建立映象

    編寫好Dockerfile後,可以通過docker build命令建立映象。
    基本格式:docker build[]選項 路徑。

    改命令將讀取指定路徑下(包括子目錄)的Dockerfile,並將該路徑下所有內容傳送給docker服務端,有服務端建立映象。

    一般建議放置Dockerfile的目錄為空目錄。

    可以通過.dockerignore檔案(每行一個匹配模式)讓docker忽略路徑下的目錄和檔案。

    使用-t指定映象的標籤資訊。

    比如:

docker build -t image_name /src/dockerfile_path

3、示例

mysql映象的Dockerfile如下:

#本文參考了「tutum」的 Dockerfile
FROM sshd
MAINTAINER Waitfish <[email protected]>
#安裝軟體 
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
  apt-get -yq install mysql-server-5.6 pwgen && \
  rm -rf /var/lib/apt/lists/*

# 刪除預安裝的資料庫檔案
RUN rm -rf /var/lib/mysql/*

# 新增資料夾下的 MYSQL 配置檔案
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnf

# 新增 MYSQL 的指令碼
ADD import_sql.sh /import_sql.sh
ADD run.sh /run.sh
RUN chmod 755 /*.sh

# 設定環境變數,使用者名稱以及祕密
ENV MYSQL_USER admin
ENV MYSQL_PASS **Random**

# 設定主從複製模式下的環境變數
ENV REPLICATION_MASTER **False**
ENV REPLICATION_SLAVE **False**
ENV REPLICATION_USER replica
ENV REPLICATION_PASS replica

# 設定可以允許掛載的卷,可以用來備份資料庫和配置檔案
VOLUME  ["/etc/mysql", "/var/lib/mysql"]

# 設定可以對映的埠,如果是從我們的 sshd 映象繼承的話,預設還會開啟 22 埠
EXPOSE 3306
CMD ["/run.sh"]


小結

    Docker Hub和Docker Pool社群提供了大量的Dockerfile範例供我們參考。

    後續文章會給出一些熱門映象的使用。

相關推薦

Docker基礎教程——Dockerfile

    Dockerfile是一個文字格式的配置檔案,我們可以使用Dockerfile檔案快速建立自定義的映象。     Dockerfile支援的眾多指令是本文主要要介紹的內容,之後會給出一個基本示例。     一般而言,Docker分為4部分:基礎映象資訊、維護者資訊

docker 基礎教程-入門:(三)--簡單製作映象

前言            一般情況下,我們中直接使用docker官網的庫,就可以找到我們日常開發中需要的映象,比如:ubuntu、tomcat、apache、nginx、php、mysql、redi

Docker基礎 6.DockerFile

Docker基礎 @Author:hanguixian @Email:[email protected] Docker文件:https://docs.docker.com/ Dcker中文文件:https://docs.docker-cn.com/ 六.

[轉]Docker基礎-使用Dockerfile建立映象

本文轉自:https://www.cnblogs.com/jie-fang/p/7927643.html 1、基本結構   Dockerfile由一行行命令語句組成,並支援以#開頭的註釋行。例如: # This dockerfile uses the ubuntu image #

Docker基礎教程——介紹及核心概念

    1、介紹     額,介紹我就拉一段百科吧。     Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。  

Docker基礎教程——容器

    容器是Docker的另一個核心概念。     一般來說,映象的一個執行例項就是容器,容器提供了一個可寫的檔案層。     本文同上一篇介紹映象一樣的結構,逐步介紹容器。     1、建立容器     Docker的容器非常輕量級,建立和刪除都很容易。     1.

Docker基礎教程(1)安裝

1. 安裝 本文參考了官網(可能需要科學上網)。 本文安裝的docker版本是社群版(CE),如需要企業版請自行購買。 1.1 解除安裝舊版本 如果你之前安裝過docker(被稱為docker或者docker-engine)的話,你首先需要解除

docker基礎——5.Dockerfile

監聽 說明 shell 文件 數組 daemon file rep try 把應用部署在容器中,改變了用文本文件保存配置信息的方式。而通過傳環境變量配置。 Dockerfile是一個文本文件,包括容器的指令。按順序從上到下執行,第一行非註釋指令必須是FROM指定基礎鏡像。

Docker系列教程之五】如何構建Dockerfile

在上一篇文章中,我們講述了 Dockerfile 的組成以及指令的編寫過程,在本篇文章中詳細講解如何構建 Dockerfile 。 Dockerfile常用的指令 那麼在講如何構建 Dockerfile 之前,我們回顧一下上一篇的編寫過程:

Docker系列教程之四】Dockerfile入門

在上一篇的文章中,我們把 Docker 容器的工作流程剖析的十分清楚了,我們大體可以知道 Docker 元件協作執行容器可以分為以下幾個過程: Docker 客戶端執行 docker run 命令 Dockerdaemon

Docker入門教程(三)Dockerfile

【編者的話】DockerOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第三篇,介紹了Dockerfile的語法,DockerOne目前在程式碼高亮部分還有些Bug,我們會盡快修復,目前在程式碼部分有會些字元會被轉義。 在Docker系列教程的上一篇文章中,我們介紹了15個

Docker 基礎 : Dockerfile

Dockerfile 是一個文字格式的配置檔案,使用者可以使用 Dockerfile 快速建立自定義的映象。我們會先介紹 Dockerfile 的基本結構及其支援的眾多指令,並具體講解通過執行指令來編寫定製映象的 Dockerfile。 基本結構 Dockerfile 由一行行命令語句組成,並且支援已 # 開

Docker基礎學習(五)-Dockerfile命令詳解(超全版本)

製作Dockerfile為Docker入門學習的第一步(當然,除了環境搭建)。 本文收集、整理了官網關於製作Dockerfile的全部命令(除SHELL沒整理,這個就不弄了),可幫助大家快速進入Dockfile製作的學習。 以下為正文,下面進入學習姿勢吧!

docker教程-dockerfile語法

FROM關鍵字         指

docker教程dockerfile實戰

本教程將通過ubuntu作為基礎映象,配置java執行環境,執行實際SpringBoot專案 首先梳理一下要執行一個java專案

最完整的Elasticsearch 基礎教程

epo -o 小寫 名稱 搜索結果 博客 需要 必須 搜索api 基礎概念 Elasticsearch有幾個核心概念。從一開始理解這些概念會對整個學習過程有莫大的幫助。 接近實時(NRT) Elasticsearch是一個接近實時的搜索平臺。這意

創建自己的docker基礎鏡像

article pre run att www too .net .cn wget 1.下載鏡像 centos7 docker pull centos:7 2.創建容器加載鏡像 docker run -i -t --name centos7 centos:7

【solr基礎教程之中的一個】Solr相關知識點串講

struct 詞匯 ont types 映射 details 必備 功能 提交 Solr是Apache Lucene的一個子項目。Lucene為全文搜索功能提供了完備的API。但它僅僅作為一個API庫存在。而不能直接用於搜索。因此,Solr基

Thrift 基礎教程(一)安裝篇

div 更新 g++ pat 定義 init 環境 1.7 進行 1、Thrift簡單介紹 Thrift是一款由Fackbook開發的可伸縮、跨語言的服務開發框架,該框架已經開源而且增加的Apache項目。Thrift主要功能是:通過自己定義的Interface Def

&lt;&lt;Python基礎教程&gt;&gt;學習筆記 | 第12章 | 圖形用戶界面

lena text 平臺 post ack 由於 contents exp 一個 Python支持的工具包非常多。但沒有一個被覺得標準的工具包。用戶選擇的自由度大些.本章主要介紹最成熟的跨平臺工具包wxPython.官方文檔: http://wxpython.org/