企業級容器技術docker(3)

2021-10-02 14:48:24 字數 3769 閱讀 1486

構建映象

構建映象有兩種方法,一種commit構建映象另一種編寫dockerfile構建映象。

構建映象的原理,為開啟容器,執行容器,最後將容器儲存為映象。但是這種方法一般不太安全,因為使用docker history命令檢視映象構建歷史看不到,存在隱患。

在下面我們將對這種方法做乙個講解,我們選取的映象為busybox,映象很小,但是有基本的功能。

載入映象,進入容器內部可以建立乙個檔案test用來作測試。

建立完成後退出容器,下來使用命令

docker commit vm test:v1 ##提交  vm是原來的容器 test是新映象名 v1指的是版本
提交完成後在使用

docker images

repository tag image id created size

test v1 a4cdea958cf4 5 seconds ago 1.15mb

可以看到新的映象已經生成。但是在檢視構建歷史的時候沒有辦法看到操作,這讓使用者使用起來感覺不安全,無法信任新映象。

docker history test:v1 

image created created by size comment

a4cdea958cf4 3 minutes ago sh 21b

59788edf1f3e 16 months ago /bin/sh -c #(nop) cmd ["sh"] 0b

16 months ago /bin/sh -c #(nop) add file:63eebd629a5f7558c… 1.15mb

這種方法使用起來更加安全和直觀,所以成為了現在主流的構建映象的方法。

首先建立乙個構建目錄,進入目錄中編寫dockerfile檔案並且將檔案中所需要的安裝包和其他配置檔案都要放置在構建目錄中。

dockerfile檔案中常用的指令。

命令作用

from

指定基礎映象

maintainer

設定作者等

copy

複製add

將檔案新增到映象中,如果是壓縮檔案會直接解壓

env設定環境變數

expose

主動暴露埠

volume

指定資料掛載點

workdir

進入目錄

run容器當中執行

以上為一些基本的命令,下來就可以試著構建乙個新的映象了。

下列操作均在/root/docker目錄中完成

copy命令

vim dockerfile

from busybox

copy 1.repo /etc/yum.repo.d/

檔案編寫完成,下來需要將yum倉庫配置檔案複製到該目錄中,準備工作完成後建立新的映象。

docker build -t test:v1 .

##最後面有個點表示在當前目錄下,當然也可以使用絕對路徑。

建立完成後檢視映象

docker images

repository tag image id created size

test v1 0eb16fd25560 7 seconds ago 1.15mb

可以看到映象已經建立完成,使用互動式的方法進入容器中檢視,

docker run -it --name vm1 test:v1 

/ # ls

bin dev etc home proc root sys tmp usr var

/ # cd etc/

network/ yum.repo.d/

/ # cd etc/yum.repo.d/

/etc/yum.repo.d # vi 1.repo

檔案已經複製進入了容器。

add命令

在上面實驗的基礎上新增一行,並且將nginx的壓縮包放置在當前目錄中。

add nginx-1.17.0.tar.gz /tmp
構建映象並進入容器內部檢視。

docker build -t test:v2 .

docker run -it --name vm2 test:v2

/tmp # cd nginx-1.17.0/

/tmp/nginx-1.17.0 # ls

changes license auto configure html src

changes.ru readme conf contrib man

這樣nginx就直接解壓完成了。

注:注意觀察構建v1 v2映象時操作的提示

[root@server1 docker]

# docker build -t test:v1 .

sending build context to docker daemon 3.072kb

step 1/2 : from busybox

---> 59788edf1f3e

step 2/2 : copy 1.repo /etc/yum.repo.d/

---> 0eb16fd25560

successfully built 0eb16fd25560

successfully tagged test:v1

[root@server1 docker]

# docker build -t test:v2 .

sending build context to docker daemon 1.037mb

step 1/3 : from busybox

---> 59788edf1f3e

step 2/3 : copy 1.repo /etc/yum.repo.d/

---> using cache ##注意這個地方

---> 0eb16fd25560

step 3/3 : add nginx-1.17.0.tar.gz /tmp

---> 5ff91cd750d6

successfully built 5ff91cd750d6

successfully tagged test:v2

在使用dockerfile構建映象的時候會有乙個快取機制,原來構建過的步驟,只要檔案沒變,那麼就會直接使用快取,不會重新進行構建。

workdir命令

在上面的實驗中加入

workdir /tmp/nginx-1.17.0

關於Docker的企業級應用

難怪docker正在迅速發展。docker,乙個開源專案。僅僅兩年,docker價值近10億美元,最近獲得了9500萬美元的資金。令人激動的是,我們看到有這麼多開發者對這個專案的熱情。然而,我將在下面討論企業使用docker本身是不夠的。許多企業it團隊解決這兩個問題 首先,開發者和運維者在優先順序...

docker3網路 容器與外網連線

容器要想訪問外部網路,需要本地系統的 支援 cat etc sysctl.conf net.ipv4.ip forward 1 如果再啟動docker服務的時候設定 ip forward true,docker就會自動設定系統的ip forward值為1 容器允許外部訪問,可以在docker run...

企業級容器技術 k8s 資源清單和標籤

寫資源清單的時候使用命令查詢幫助,kubectl explain pod需要查詢pod中的特定內容時中間用.連線例如我們檢視pod中的spec都有什麼,就可以用 kubectl explain pod.spec寫到哪,查到哪,但是要注意,寫的時候檢視到後面有 required 這個引數的時候那就代表...