Docker Dockerfile 基本結構詳解

2021-09-07 19:07:32 字數 3258 閱讀 8859

dockerfike快速建立自定義的docker映象 

一、目錄 

1.docker典型結構 

2.指令介紹 

3.建立docker映象

二、結構 

dockerfile分為四部分組成:基礎映象信、維護者資訊、映象操作指令和容器啟動時執行指令。例如:

#第一行必須指令基於的基礎映象

from ubutu

#維護者資訊

maintainer docker_user [email protected]

#映象的操作指令

apt/sourcelist.list

run apt-get update && apt-get install -y ngnix run echo "\ndaemon off;">>/etc/ngnix/nignix.conf #容器啟動時執行指令 cmd /usr/sbin/ngnix

三、指令 

1、from指令 

from 或者from :

dockerfile第一條必須為from指令。如果同乙個dockerfile建立多個映象時,可使用多個from指令(每個映象一次)

2、maintainer 

格式為maintainer ,指定維護者的資訊

3、run 

格式為run 或者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命令,多個cmd命令時,只最後一條被執行。

5、expose

格式為 expose […] 。

告訴docker服務端容器暴露的埠號,供互聯系統使用。在啟動docker時,可以通過-p,主機會自動分配乙個埠號**到指定的埠。使用-p,則可以具體指定哪個本地埠對映過來

例如: 

expose 22 80 8443

6、env

格式為 env 。 指定乙個環境變數,會被後續 run 指令使用,並在容器執行時保持。

例如

env pg_major 9.3

env pg_version 9.3.4

run curl -sl | tar -xjc /usr/src/postgress && … env path /usr/local/postgres-$pg_major/bin:$path

7、add 

格式為 add 。

該命令將複製指定的 到容器中的 。 其中 可以是dockerfile所在目錄的乙個相對路徑;也可以是乙個url;還可以是乙個tar檔案(自動解壓為目錄)。則。

8、copy

格式為 copy 。

複製本地主機的 (為dockerfile所在目錄的相對路徑)到容器中的 。

當使用本地目錄為源目錄時,推薦使用 copy 。

9、entrypoint

兩種格式:

entrypoint [「executable」, 「param1」, 「param2」] 

entrypoint command param1 param2 (shell中執行)。 

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

每個dockerfile中只能有乙個 entrypoint ,當指定多個時,只有最後乙個起效。

10、volume

格式為 volume [「/data」] 。

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

11、user

格式為 user daemon 。

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

當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者,例如: run groupadd -r postgres && useradd -r -g postgres postgres 。要臨時獲取管理員許可權可以使用 gosu ,而不推薦 sudo 。

12、workdir

格式為 workdir /path/to/workdir 。

為後續的 run 、 cmd 、 entrypoint 指令配置工作目錄。

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

workdir /a 

workdir b 

workdir c 

run pwd 

則最終路徑為 /a/b/c 。

13、onbuild

格式為 onbuild [instruction] 。

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

例如,dockerfile使用如下的內容建立了映象 image-a 。

[…] 

[…] 

如果基於a建立新的映象時,新的dockerfile中使用 from image-a 指定基礎映象時,會自動執行 onbuild 指令內容,等價於在後面新增了兩條指令。

from image-a

#automatically run the following

三、建立映象 

通過docker build 建立映象。 

命令讀取指定路徑下(包括子目錄)所有的dockefile,並且把目錄下所有內容傳送到服務端,由服務端建立映象。另外可以通過建立.dockerignore檔案(每一行新增乙個匹配模式)讓docker忽略指定目錄或者檔案

格式為docker build [選項] 路徑 

需要制定標籤資訊,可以使用-t選項 

例如:dockerfile路徑為 /tmp/docker_build/,生成映象的標籤為build_repo/my_images 

$dudo docker build -t build_repo/my_images /tmp/docker_build/

詳講mybatis plus基本操作API

操作前的準備 使用mybatisplus的service介面 實體類所要貼的註解 業務層實現分頁查詢帶qo條件 無侵入 只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑 損耗小 啟動即會自動注入基本 curd,效能基本無損耗,直接物件導向操作 支援 lambda 形式呼叫 通過 lambd...

mysql多索引結構 MySQL 索引結構詳解

innodb的主鍵索引 primary key 是cluster形式的 聚簇索引 innodb的非主鍵索引 secondary index 是普通的b tree索引。兩種索引在root node和branch node是一樣的,在leaf node就不一樣了。primary key存放的是表的實際資...

Git基本操作(詳,小白專用)

git 基本快照 git標籤 git檢視提交歷史 配置使用者名稱及郵箱 設定git預設使用的文字編輯器 設定差異分析工具 git版本資訊 移除原來的版本 也可以自己指定生成的倉庫目錄 git init newname 例 git clone ebookchain git clone 時,可以所用不同...