1. 程式人生 > 其它 >JAVA製作超簡易計算器

JAVA製作超簡易計算器

容器(Container)是什麼?
容器是基於映象建立的可執行例項,並且單獨存在,一個映象可以創建出多個容器。執行容器化環境時,實際上是在容器內部建立該檔案系統的讀寫副本。 這將新增一個容器層,該層允許修改映象的整個副本。

容器的檔案系統設計成寫時複製,而不是每一個容器都單獨拷貝一份映象檔案,如圖 1 所示。

為什麼要設定成寫時複製?

每個容器單獨拷貝一份映象檔案會佔用較多的磁碟空間。假設我有3個程式都用到了jdk映象,那該jdk映象就得複製3份。如果改成寫時複製的話,只需要一份jdk映象,新的內容寫在頂層即可。比如用docker images檢視映象的時候,把所有映象的SIZE加起來可能有十幾個G,但是到目錄下檢視,實際上只有幾個G,這是因為很多映象複用了同一個底層的映象,起到了節省磁碟空間的作用。

一方面保護映象檔案,另一方面可以共享相同的映象層。

容器的生命週期

容器的生命週期是容器可能處於的狀態,容器的生命週期分為 5 種。

created:初建狀態

running:執行狀態

stopped:停止狀態

paused: 暫停狀態

deleted:刪除狀態

各生命週期之前的轉換關係如圖所示:

匯出匯入容器

匯出容器

我們可以使用docker export CONTAINER命令匯出一個容器到檔案,不管此時該容器是否處於執行中的狀態。匯出容器前我們先進入容器,建立一個檔案,過程如下。

首先進入容器建立檔案

docker exec -it busybox sh
cd /tmp && touch test

然後執行匯出命令

docker export busybox > busybox.tar

執行以上命令後會在當前資料夾下生成 busybox.tar 檔案,我們可以將該檔案拷貝到其他機器上,通過匯入命令實現容器的遷移。

匯入容器

通過docker export命令匯出的檔案,可以使用docker import命令匯入,執行完docker import後會變為本地映象,最後再使用docker run命令啟動該映象,這樣我們就實現了容器的遷移。

匯入容器的命令格式為 docker import [OPTIONS] file|URL [REPOSITORY[:TAG]]。接下來我們一步步將上一步匯出的映象檔案匯入到其他機器的 Docker 中並啟動它。

首先,使用docker import命令匯入上一步匯出的容器

docker import busybox.tar busybox:test

此時,busybox.tar 被匯入成為新的映象,映象名稱為 busybox:test 。下面,我們使用docker run命令啟動並進入容器,檢視上一步建立的臨時檔案

docker run -it busybox:test sh
/ # ls /tmp/
test

可以看到我們之前在 /tmp 目錄下建立的 test 檔案也被遷移過來了。這樣我們就通過docker export和docker import命令配合實現了容器的遷移。

補充:load 和 save 是搭配使用的,主要用來直接操作映象,而 import 是和 export 搭配使用的,主要是用來操作容器的。具體可以參考這裡 https://www.cnblogs.com/Cherry-Linux/p/8025777.html

docker save :將一個映象匯出為檔案,再使用docker load命令將檔案匯入為一個映象,會儲存該映象的的所有歷史記錄。比docker export命令匯出的檔案大,很好理解,因為會儲存映象的所有歷史記錄。
docker export :將一個容器匯出為檔案,再使用docker import 命令將容器匯入成為一個新的映象,但是相比docker save命令,容器檔案會丟失所有元資料和歷史記錄,僅儲存容器當時的狀態,相當於虛擬機器快照。

本文源自:拉勾教育課程:由淺入深吃透 Docker,郭少 前 360 高階容器技術專家