【docker linux】linux系統映象轉化為docker映象
概述
使用docker安裝linux的同學都知道,你在docker提供的倉庫安裝linux系統,你就會體驗到最精簡的、最純淨的linux系統,當然,他會精簡到你連ifconfig
命令都需要自己配置,恰好對於我來說,這並不是我想要的。如果我去使用VMware安裝linux系統,但是我已經使用了docker,就不能使用vmware了,那麼你就會問了,docker、vmware難道就不能同時使用?
那麼,我告訴你,是的。
問題就出在這裡,網上有大把文章談及docker與vmware區別,但是很少有文章說明他們在windows上使用的虛擬技術的區別。
當前 Docker 官方出品的 Windows 客戶端, 叫做Docker Desktop for Windows.而其正常執行的條件之一是系統開啟了 Hyper-V 虛擬化服務. 由上文知 Hyper-V 是 Type-1 的 Hypervisor, 這將使得像 VMware 等作為 Type-2 Hypervisor 的軟體無法執行.
此時矛盾已經出現: 使用 Hyper-V 技術的 Docker 客戶端與其他 Type-2 Hypervisor 不能同時執行, 必須重啟並關閉 Hyper-V 才能再次執行其他的 Type-2 Hypervisor 軟體.摘自Windows 下 Docker 與 VMware 共存
@目錄
- 概述
- 壹:過程
- 一、打包linux映象
- 二、從linux系統中匯出到物理機(windows)
- 三、匯入到docker中
- 四、打標籤
- 五、執行容器
- 貳:docker相關操作
- 一、docker save
- 二、docker import
- 三、docker load
- 四、docker import
- 作者有話
那麼知道原因後,就要著手解決啊,不想使用docker和VMware來回切換,最初的蠢辦法就是在另一個系統上(我裝了雙系統)使用vmware,在windows使用docker,反正虛擬機器也只是在上課的時候用用,但是,回想一下不對啊,這樣不就更麻煩了嗎。
回頭一想,既然docker可以安裝linux系統,那麼我可不可以使用自己的映象檔案給匯入進去呢?
我將原來在docker中安裝的linux系統匯出,檢視其內部構成,這不就是我們常見的那些linux檔案嗎。所以我只需要將原有的linux系統壓縮成docker映象檔案,然後再匯入docker,問題不都解決了嗎。
如果,你還沒安裝docker,見:值得學習的應用容器引擎docker安裝
壹:過程
一、打包linux映象
打包linux系統就要做到精簡,一些臨時檔案不需要,就不用打包,只需要將我們需要的東西打包就可以。使用以下命令,記得加sudo,將linux所有檔案打包成system.tar
,儲存在tmp目錄下,排除掉一些不需要的目錄,不要將最後面有一個點給忘記了。
tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
二、從linux系統中匯出到物理機(windows)
如果你有一個小夥伴,大可在他的電腦裡的Vmware完成這第一、二步,然後使用ftp工具匯出即可。
打包之後,我將壓縮包匯出,因為我裡面安裝了hadoop、hbase、zookeeper、hive
等一系列東西,他就是現在的2.57GB大小。
請忽略這一段:(我是從deepin系統中將檔案匯出到windows中的,這裡記錄一下,方便自己以後使用,windows與linux雙系統檔案系統不共享,在windows中無法訪問deepin的檔案系統,但是在deepin中可以讀取windows檔案,不能寫,那麼我在deepin(linux)中的壓縮包怎麼弄到windows呢,這時候神器出場了,使用linux reader
就可以實現在windows中讀寫deepin的檔案系統,這東西很奈斯啊)
三、匯入到docker中
在cmd中,匯入剛剛壓縮好的壓縮包,這裡你必須到system.tar所在目錄,要不然,你直接加上system.tar的絕對路徑,不然肯定會報錯找不到該檔案。
docker import system.tar
匯入後使用docker images
檢視映象,會有一個未命名,沒有標籤的映象,這時候我們就需要給該映象打上標籤,方便日後使用及檢視
四、打標籤
使用docker tag
命令為你的映象打標籤,後面接映象id 以及倉庫名:標籤。
docker tag [映象id] linux/centos:hadoop
到這一步,你已經成功了一大半,這時候映象已經準備好了,就需要使用映象執行一個容器了。
五、執行容器
使用以下命令執行你自己建立的映象,注意後面的/bin/bash
不能少。
docker run -t -i [映象id] /bin/bash
測試 ,嗯,java還在,那麼其他的都還在。
那麼,到現在大功就搞成了。
貳:docker相關操作
一、docker save
將映象檔案儲存為本地檔案。
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
-o, --output string Write to a file, instead of STDOUT
例子:docker save -o mysql.tar mysql:latest
二、docker import
將容器匯出為本地檔案
Usage: docker export [OPTIONS] CONTAINER
Export a container's filesystem as a tar archive
Options:
-o, --output string Write to a file, instead of STDOUT
例子:docker export -o mysql.tar
三、docker load
從本地讀取映象檔案
Usage: docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
例子: docker load -i mysql.tar
四、docker import
從本地檔案建立映象
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
Options:
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Set commit message for imported image
例子:docker import mysql.tar
建議:一般save、load組合使用,export、import組合使用。
作者有話
嗯,截止到我發這篇文章之前,我再次向他妥協了,原因是因為修改了docker中我匯入的容器的內容時,重啟後,他並不會生效,並且沒有找到有用的方法解決,如果你有可以解決的方法,歡迎留言告訴筆者,筆者將感激不盡,不過這篇部落格仍然可以作為我的筆記方便以後檢視,最終我使用的方法是在需要使用虛擬機器的時候關閉Hyper -v。
1,如果用docker,
第一步:在控制面板中勾選Hyper -v
第二步:在cmd,以管理員身份執行:
bcdedit /set hypervisorlaunchtype auto
第三步;重啟
2,開啟虛擬機器linux
第一步:在控制面板中取消勾選Hyper -v
第二步:在cmd中,以管理員身份執行:
bcdedit /set hypervisorlaunchtype off
第三步;重啟
方法引用:docker和虛擬機器不相容問題