1. 程式人生 > 其它 >五、構建docker映象

五、構建docker映象

構建映象一般有三種情況,基於容器匯入、基於本地模板匯入、基於 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