五、構建docker映象
阿新 • • 發佈:2021-08-17
構建映象一般有三種情況,基於容器匯入、基於本地模板匯入、基於 Dockerfile 建立,本章主講基於容器保 存映象和本地儲存映象匯入。
1、基於容器儲存
主要格式:docker [container id] commit
主要引數:
-a: 作者資訊
-m: 提交資訊
-p: 提交時,暫停容器執行
啟動一個容器、修改並儲存
[root@master ~]# docker run -d -it centos /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos 7a0437f04f83: Already exists Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest 4becc5ce9f177b8e2ba2a254c9466fa94f13fe50555a56e7ab144e31c7909acb [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4becc5ce9f17 centos "/bin/bash" 48 seconds ago Up 46 seconds unruffled_hopper [root@master ~]# docker exec 4becc5ce9f17 touch 123.txt [root@master ~]# docker commit -m "Add a file" -a "tom" 4becc5ce9f17 centos:v1 sha256:9be0f060daf3d86842b7973371c9eb9d704f4ce0b9edd71a989f005c5af26524 [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos v1 9be0f060daf3 18 seconds ago 209MB mysql 8.0.23 cbe8815cbea8 4 months ago 546MB tom-mysql latest cbe8815cbea8 4 months ago 546MB centos latest 300e315adb2f 8 months ago 209MB nginx 1.17 9beeba249f3e 15 months ago 127MB
2、基於本地模板匯入
使用者也可以將儲存的映象傳到另一臺機器上,另一臺機器就可以直接匯入。
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
3、儲存映象(commit)
有時我們需要將一臺電腦上的映象複製到另一臺電腦上使用,除了可以藉助倉庫外,還可以直接將映象儲存成一 個檔案,再拷貝到另一臺電腦上匯入使用。
對於映象的匯出和匯入,Docker 提供了兩種方案:
- 使用 export 和 import
# 儲存正在執行的容器為映象壓縮包 ## 儲存容器為映象 docker export [容器的ID] > [包名稱] # 例項 [root@Centos7 ~]# docker export be3b92e2886b > redis.tar [root@Centos7 ~]# ll | grep redis -rw-r--r--. 1 root root 104178688 Mar 18 17:30 redis.tar #使用 import 匯入包為映象 ## docker import [包名稱] [自定義映象名稱] # 例項 [root@Centos7 ~]# docker import redis.tar test:v3 sha256:7776db3402fb8d59f6121a3b1977b5e7016f4064cf59218fd1b06637cb0fca87 [root@Centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test v3 7776db3402fb 6 seconds ago 101MB
- 儲存映象(save/load)
save 和 load 的針對的點是映象,將本機的映象匯入、匯出為映象包。
# 儲存映象為壓縮包 # 儲存映象的格式: docker save [映象名稱|映象ID] > [包名稱] [root@Centos7 ~]# docker save 7731472c3f2a > apline.tar [root@Centos7 ~]# ll -rw-r--r--. 1 root root 5888000 Mar 18 17:36 apline.tar [root@Centos7 ~]# docker save -o apline-two.tar 7731472c3f2a [root@Centos7 ~]# ll total 148692 -rw-r--r--. 1 root root 5888000 Mar 18 17:36 apline.tar -rw-------. 1 root root 5888000 Mar 18 17:37 apline-two.tar # 匯入映象的格式: docker load < [包名稱] [root@Centos7 ~]# docker load < apline.tar c04d1437198b: Loading layer [========================================>] 5.88MB/5.88MB Loaded image ID: sha256:7731472c3f2a25edbb9c085c78f42ec71259f2b83485aa60648276d408865839 [root@Centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 7731472c3f2a 2 months ago 5.61MB # 注:save/load儲存映象無法自定義映象名稱,save儲存映象時如果使用ID儲存則load匯入映象無名稱,使用名稱匯入時才有名稱。 [root@Centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest b97242f89c8a 2 months ago 1.23MB [root@Centos7 ~]# docker save busybox:latest > busybox.tar [root@Centos7 ~]# ll total 150120 -rw-r--r--. 1 root root 1459200 Mar 18 17:43 busybox.tar [root@Centos7 ~]# docker rmi b97242f89c8a Untagged: busybox:latest Untagged: busybox@sha256:c5439d7db88ab5423999530349d327b04279ad3161d7596d2126dfb5b02bfd1f Deleted: sha256:b97242f89c8a29d13aea12843a08441a4bbfc33528f55b60366c1d8f6923d0d4 Deleted: sha256:0064d0478d0060343cb2888ff3e91e718f0bffe9994162e8a4b310adb2a5ff74 [root@Centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@Centos7 ~]# docker load < busybox.tar 0064d0478d00: Loading layer [==================================================>] 1.45MB/1.45MB Loaded image: busybox:latest [root@Centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest b97242f89c8a 2 months ago 1.23MB
- 儲存映象三種方式的區別
1、export儲存的映象體積要小於save(save儲存更完全,export儲存會丟掉一些不必要的資料)
2、export可以重新命名映象名稱而save則不行
3、save可以同時儲存多個映象而export則不行
export 匯出(import 匯入)是根據容器拿到的映象,再匯入時會丟失映象所有的歷史記錄和元資料資訊(即僅 儲存容器當時的快照狀態),所以無法進行回滾操作。
save 儲存(load 載入)的映象,沒有丟失映象的歷史,可以回滾到之前的層(layer)。 - 應用場景不同
docker export 的應用場景:主要用來製作基礎映象,比如我們從一個>主要用來製作基礎映象,比如我們從一個 ubuntu 映象啟動一個容器,然後安 裝一些軟體和進行一些設定後,使用 docker export 儲存為一個基礎映象。然後,把這個映象分發給其他人使用, 比如作為基礎的開發環境。
docker save 的應用場景:如果我們的應用是使用 docker-compose.ymldocker-compose.yml 編排的多個映象組合,但我們要部 署的客戶伺服器並不能連外網。這時就可以使用 docker save 將用到的映象打個包,然後拷貝到客戶伺服器上使 用 docker load 載入
本文來自部落格園,作者:看啥,轉載請註明原文連結:https://www.cnblogs.com/jykn92/p/15153704.html