Dockerfile構建映象,映象入倉庫,映象啟動

2021-10-04 20:59:05 字數 4404 閱讀 3286

dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。

dockerfile示例

form ubuntu:14.04

run apt-get update && apt-get install -y nginx

run echo 'hello,i am work' > /usr/share/nginx/html/index.html

expose 80 80

maintainer

我建議這個命令放在dockerfile的起始部分,雖然理論上它可以放置於dockerfile的任意位置。這個命令用於宣告作者,並應該放在from的後面。

# maintainer [name] [email]

maintainer authors_name "***[email protected]"

from

from命令可能是最重要的dockerfile命令。改命令定義了使用哪個基礎映象啟動構建流程。基礎映象可以為任意鏡 像。如果基礎映象沒有被發現,docker將試圖從docker image index來查詢該映象。from命令必須是dockerfile的首個命令。

# from [image name]

from ubuntu

add# add [source directory or url] [destination directory]

runrun命令是dockerfile執行命令的核心部分。它接受命令作為引數並用於建立映象。不像cmd命令,run命令用於建立映象(在之前commit的層之上形成新的層)。

# run [command]

run apt-get update

cmd和run命令相似,cmd可以用於執行特定的命令。和run不同的是,這些命令不是在映象構建的過程中執行的,而是在用映象構建容器後被呼叫。

cmd "echo" "hello mao!"

entrypoint

# remember: arguments are optional. they can be provided by cmd

# or during the creation of a container.

entrypoint echo

# usage example with cmd:

# arguments set with cmd can be overridden during *run*

cmd "hello docker!"

entrypoint echo

envenv命令用於設定環境變數。這些變數以」key=value」的形式存在,並可以在容器內被指令碼或者程式呼叫。這個機制給在容器中執行應用帶來了極大的便利。

# env key value

env server_works 4

user

user命令用於設定執行容器的uid。

# user [uid]

user 751

volume

volume命令用於讓你的容器訪問宿主機上的目錄。

# volume ["/dir_1", "/dir_2" ..]

volume ["/my_files"]

workdir

workdir命令用於設定cmd指明的命令的執行目錄。

# workdir /path

workdir ~/

expose

expose指令用來告訴docker這個容器在執行時會監聽哪些埠,docker在連線不同的容器(使用–link引數)時使用這些資訊;

兩個docker的核心概念是可重複和可移植。映象應該可以執行在任何主機上並且執行盡可能多的次數。在 dockerfile中你有能力對映私有和公有埠,但是你永遠不要通過dockerfile對映公有埠。通過對映公有埠到主機上,你將只能執行乙個容器化應用程式例項。(譯者注:執行多個埠不就衝突啦)

# expose [port]

expose 80:8080

# private only

expose 80

docker build [options] path | url | -

options說明:

--build-arg= :設定映象建立時的變數;

--cpu-shares :設定 cpu 使用權重;

--cpu-period :限制 cpu cfs週期;

--cpu-quota :限制 cpu cfs配額;

--cpuset-cpus :指定使用的cpu id;

--cpuset-mems :指定使用的記憶體 id;

--disable-content-trust :忽略校驗,預設開啟;

-f :指定要使用的dockerfile路徑;

--force-rm :設定映象過程中刪除中間容器;

--isolation :使用容器隔離技術;

--label= :設定映象使用的元資料;

-m :設定記憶體最大值;

--memory-swap :設定swap的最大值為記憶體+swap,"-1"表示不限swap;

--no-cache :建立映象的過程不使用快取;

--pull :嘗試去更新映象的新版本;

--quiet, -q :安靜模式,成功後只輸出映象 id;

--rm :設定映象成功後刪除中間容器;

--shm-size :設定/dev/shm的大小,預設值是64m;

--ulimit :ulimit配置。

--tag, -t: 映象的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中為乙個映象設定多個標籤。

--network: 預設 default。在構建期間設定run指令的網路模式

docker push reg.qloudhub.com/qloudobp/qloudpdp:7.1.0
docker run :建立乙個新的容器並執行乙個命令

docker run [options] image [command] [arg...]

options說明:

-a stdin: 指定標準輸入輸出內容型別,可選 stdin/stdout/stderr 三項;

-d: 後台執行容器,並返回容器id;

-i: 以互動模式執行容器,通常與 -t 同時使用;

-p: 隨機埠對映,容器內部埠隨機對映到主機的高階口

-p: 指定埠對映,格式為:主機(宿主)埠:容器埠

-t: 為容器重新分配乙個偽輸入終端,通常與 -i 同時使用;

--name="nginx-lb": 為容器指定乙個名稱;

--dns 8.8.8.8: 指定容器使用的dns伺服器,預設和宿主一致;

--dns-search example.com: 指定容器dns搜尋網域名稱,預設和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 設定環境變數;

--env-file=: 從指定檔案讀入環境變數;

--cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定cpu執行;

-m :設定容器使用記憶體最大值;

--net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種型別;

--link=: 新增鏈結到另乙個容器;

--expose=: 開放乙個埠或一組埠;

--volume , -v: 繫結乙個卷

以reg.qloudhub.com/qloudobp/qloudpdp:7.1.0為映象,啟動名為test的容器,對映8080埠

docker exec -it 容器id /bin/bash
docker rm –f test

dockerfile構建映象

尋找官方映象的dockerfile 在hub.docker.com 中,輸入映象的名字,往下拉就能找到跳轉到dockerfile的鏈結。下圖是centos的dockerfile from scratch maintainer the centos project add c68 docker.tar...

Dockerfile構建映象

docker映象是由 件系統疊加 成的,系統的最底層是 bootfs,相當於就是linux核心的引導 件系統 接下來第 層是rootfs,這 層可以是 種或多種操 作系統 如debian或ubuntu 件系統 docker中的rootfs是唯讀狀態的 docker利 聯合掛載技 術將各層 件系統疊加...

Dockerfile構建映象

mkdir dockerfile3 cd dockerfile3 touch dockerfile 在這個例子裡,我們通過run指令更新了已經安裝的apt倉庫,安裝了nginx包。之後將 hi,i am in your container 寫入 var www html index.nginx de...