了解一個技術名詞,通常會需要先知道它對有甚麼用途,主要目的有以下兩點:
從倉庫取得映像檔
Docker在執行容器前都需要本地端存在能對應的容器映像檔案,如果映像檔並不存在時,Docker便會從容器映像倉庫取出下載,預設是Docker Hub
伺服器中的公用倉庫。主要來記錄一下針對映像檔這服務中需要用到的知識與工具指令,
可以使用docker pull
指令從倉庫取出所需映像,以下示範是從Docker Hub
倉庫下載一個CentOS作業系統映像檔。
而下載映像的過程中,會把取得映像的每一層訊息都輸出顯示。
該命令實際上相當於docker pull
registry.hub.docker.com/ubuntu:latest 命令,即是從註冊伺服器registry.hub.docker.com
的倉庫中來下載標記為x.x版本的映像檔。
進入CentOS容器
中命令模式確認目前下載的版本的確是目前最新的8.2版
docker run -it centos bash 同等於 docker run -t -i centos /bin/bash
目的是啟動一個bash終端
才能與容器內本身進行操作互動,互動範例:檢視自身CentOS容器上所分配到的IP為何?
經查看後是172.17.0.3,另外也可以對外部如Google的DNS進行ping的測試確認。
退出後回到Ubuntu宿主機器在檢視一下網路IP發現上述的容器是被分配在docker0的專屬網路上
透過docker images
來顯示本機是否已有的映像檔,如果已經有在容器執行時就不用再另外Pull可以直接執行。
下圖範例中訊息說明:
補充:TAG
是用戶對於同個倉庫下不同映像檔的發行版本識別,如:6.0、6.5、7.1等...
修改已有映像檔
先使用下載的映像檔啟動容器,我們來試試在目前的CentOS上來安裝自己想要新增的套件。我就拿一個處理JSON是前端開發編程的工具:jq來嘗試到CentOS容器內安裝。
jq套件顯示安裝完成。
docker commit -m "yum -y install jq" -a "Gary Docker update" 7e708c669f53 centos-jq
提交的說明訊息
就跟跟我們使用的版控一樣指定更新用戶訊息
我們比對Commit前後的映像檔變化,除了增加了你剛剛的映像檔外在空間上也增加了約25MB。
我們在docker Run剛剛建立的centos-jq進入互動模式,並jq指令確認其版本與相關指令無誤,非常方便。
docker save -o centos-jq.tar centos-jq
這就是把剛剛建立好的映像檔想要備份到本機
成一個檔案的做法
docker rmi centos-jq
docker rmi -f centos-jq
docker load --input centos-jq.tar
上述是備份檔案的概念,接下來模擬手殘移除映像,雖然明明有防呆了但還是依然故我,
好啦!就是要展現一下再恢復回來的能力,圖中顯示到從原來移除後又還原回來
。
最後腦補一下容器增量變更維護的呢?每個映像檔其實都是多層次來做構建
,容器透過Union FS
的檔案系統將各層整合到同個映像檔中。
通常Union FS有兩個作用:
我剛剛是說人話嗎?我自己都無腦了,引用一下大大文件好了>>Linux UnionFS