1. 程式人生 > >【docker linux】linux系統映象轉化為docker映象

【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和虛擬機器不相容問題