zoukankan      html  css  js  c++  java
  • 【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 共存

    @

    那么知道原因后,就要着手解决啊,不想使用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和虚拟机不兼容问题

  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/lomtom/p/12686672.html
Copyright © 2011-2022 走看看