redhat映象 三 docker映象

2021-10-11 20:05:39 字數 3185 閱讀 3369

映象的結構

1.1 hello-world映象為例

這個映象只列印了 hello-world

1.2 base 映象 : 能提供基本作業系統的映象

特點:1> 不依賴其他映象,從scratch開始構建

2>其他映象可以在base基礎上擴充套件 比如centos

為什麼大小只有200m?

linux系統包括:

1> 核心空間 kernel :linux啟動時載入bootfs,之後解除安裝

2>使用者空間:檔案系統是rootfs

base映象kernel用host的kernel,只需要自己提供rootfs.不同linux發行版的區別在於rootfs

ps: base映象只是在使用者空間和發行版移植,kernel版本和發行版不同,和host版本一致(因此容器的kernel依賴於host的kernel,且在容器中沒法公升級)

uname -r 檢視系統核心版本

cat /etc/redhat-release 檢視作業系統發行版本

1.3 分層結構

docker支援通過擴充套件現有映象,建立新映象 (共享資源)

舉個例子:

copy-on-write特性:

每個映象對基礎映象的修改都會被限制在單個映象內,不會對基礎映象產生影響也不會對使用基礎映象的其他映象有影響

容器啟動時,會形成乙個新的可寫層「容器層」在原映象層的頂部,下面的都是「映象層」

2. 構建映象

兩種構建方式:docker commit和用dockerfile構建

2.1 docker commit (無法審計,使用者不清楚建立過程)

執行容器 -》 修改容器 -》---.退出容器---》將容器儲存為新映象

docker commit 【src image name 】 【new image name】 儲存映象

2.2 dockerfile (文字檔案,記錄映象建立的所有步驟)

編寫dockerfile -> docker build

docker build [new image name] . 最後的. 指名dockerfile的位置 (即build context,不要把多餘檔案放在build context),也可以用-f 指定

舉個例子

2.3 快取特性 (構建新映象時,如果某映象層已經存在直接使用,無須重新建立)

如果希望不用快取,在docker build 加上 --no-cache引數

映象上層依賴於下層,下層發生變化,上層的快取就失效了

2.4 dockerfile 指令

from 指定base

maintainer 作者

copy copy src dest 或者 copy ["src", "dest"] src的檔案或者目錄必須位於build context

add 類似copy,區別:壓縮包會自動解壓到dest

env 環境變數, 可以被後面的指令使用

expose 放開埠 ???

volume 將檔案或目錄宣告為volume????

workdir 為run/cmd/entrypoint/add/copy指令設定映象中的當前工作目錄, 不存在時會自動建立

run 在容器中執行命令

cmd 在容器啟動時執行命令,可以有多個,但是只有最後乙個生效

entrypoint 容器啟動時執行命令,可以有多個,但是只有最後乙個生效

3.run vs cmd vs entrypoint

cmd / entrypoint 最好用exec ,shell兩種都可

3.1 shell 和exec 格式 (指定三者執行命令的格式)

shell : 底層會呼叫 /bin/bash -c [command]

exec : 底層會呼叫 [command]

3.2 run 通常用於裝包和應用

3.3 cmd

1>多個cmd,只有最後乙個生效

2> 如果docker run 指定了其他命令, cmd指定的預設命令會被忽略(可以為entrypoint提供預設引數)

3.4 entrypoint:

讓容器以應用程式或者服務形式執行,不會被忽略一定執行

4.分發映象

4.1 命名

【image name】= [repository]:[tag]

tag 預設為latest, 沒有特殊含義,多用版本號作為tag

docker tag repository repository:tag

4.2 使用公共registry

將本地映象push 到docker hub (公共repository免費, 私有repository)

1>註冊 docker hub

2> 本地登入docker hub

3>修改映象repository

[username]/[image ]: tag

4> docker push [username]/[image ]: tag

4.3搭建本地registry

三 Docker映象製作

命令 用途from 引用的基礎映象 run執行命令 容器內部 add新增檔案 同時支援網路檔案,比copy強一些 copy 新增檔案 cmd執行命令,指定容器的執行入口 expose 暴露埠 workdir 指定執行容器的乙個路徑 maintainer 指定維護者資訊 env設定環境變數 entry...

構建Docker映象 三

xiaohui li foxmail.com 一 建立dockerfile 1 準備檔案 新建乙個目錄和乙個 dockerfile 這個步驟是在設計映象,如果你需要在映象內包含什麼軟體,將來開放哪些埠,裡面包含什麼檔案,都要寫進去 我這裡使用的基本映象是centos7,我要在將來生成的映象內包含ht...

(三)Docker映象常見命令

檢視docker version版本 docker version檢視docker info資訊 docker infodocker 幫助命令 docker helpdocker images各個選項說明 repository 表示映象的倉庫源 tag 映象的標籤 image id 映象id cre...