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
該命令支援三種格式:
- 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
<<Python基礎教程>>學習筆記 | 第12章 | 圖形用戶界面
lena text 平臺 post ack 由於 contents exp 一個 Python支持的工具包非常多。但沒有一個被覺得標準的工具包。用戶選擇的自由度大些.本章主要介紹最成熟的跨平臺工具包wxPython.官方文檔: http://wxpython.org/