zoukankan      html  css  js  c++  java
  • 将iso镜像转换为docker镜像

    为什么不用官方的镜像?

      不是不想使用,而是官方镜像提供的功能实在是太少了,不信的话,你pull一个ubuntu:latest的进行,你看有没有wget、curl、ssh这些功能,就连最简单的ifconfig都没有,可谓是最纯净、最精简的操作系统。但是我们平时工作中往往需要一些镜像能够拥有尽可能多的功能,当然这就可能造成镜像比较臃肿。

      本次测试过程使用的ubuntu16.04桌面版。没错,带GUI的桌面版,其实什么版并没有什么区别,转换为docker镜像之后,使用方法没有区别。

    前提:iso已经在虚拟机中安装好

      操作很简单,就是耗时---就是进入虚拟机中,然后将某些目录的文件打成tar包,有了tar包之后,再使用docker的import命令来创建镜像。 

    打包操作:

      iso镜像1.62G,打出的tar包5.6G,时间稍长,10分钟左右,大概是在虚拟机里面的原因。

      需要注意的是,在打包之前,请先确认要将哪些文件进行打包,比如下面这些目录都可以不用打包

    1. 某些用户的家目录是否需要打包
    2. 每个用户的执行的历史命令是否需要清除
    3. 一些涉及到隐私的文件
    4. 与系统镜像没有关系的文件,或者说只是系统运行过程中保存的垃圾文件或者缓存等
    5. 临时文件

      建议手动选择要进行打包的目录,比如:bin dev  lib64 media opt root snap var boot etc lib mnt sbin srv usr vmlinuz这些目录

      如果你拿不准哪些文件目录要打包,那么可以将根目录下所有文件都打包(不推荐)

    → ~ #  cd / 
    → ~ #  tar -cf  system.tar  bin dev  lib64 media opt root snap var boot etc lib mnt sbin srv usr vmlinuz
    

      建议打包时不要加-v选项,因为文件太多了,翻页速度太快,显示出来也看不清。

      将打出的包拷贝到一个安装了docker的环境,如果本地有docker的话,就可以不用移动。

      

    导入操作

    → ~ #  cat image.tar | docker import - ubuntu:16:04
    sha256:e2b87a8f4f31657f9781b6dad1bdf423f3f3e62865995f4720852c81be0c4e96
    

    查看导入的镜像

    → ~ $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              16.04               e2b87a8f4f31        29 minutes ago      4.97GB
    

      

    运行新建的镜像

      这里可能会遇到一个问题,就是尝试运行docker镜像的时候,会提示错误docker: Error response from daemon: No command specified.

      即使是使用管理员权限来运行也是不行的,

    → ~ $ docker run -t -i ubuntu:16.04
    docker: Error response from daemon: No command specified.
    See 'docker run --help'.
    → ~ $ sudo docker run -t -i ubuntu:16.04
    Password:
    docker: Error response from daemon: No command specified.
    See 'docker run --help'.
    

      正确方法:

    → ~ $ docker run -t -i ubuntu:16.04
    docker: Error response from daemon: No command specified.
    See 'docker run --help'.
    → ~ $ docker run -t -i ubuntu:16.04 /bin/bash   #正确方法
    root@f0389c5d3270:/# wget www.baidu.com
    

      至于docker run -t -i ubuntu:16.04为什么不行,可以参考:使用Dockerfile来构建镜像,因为他没有设定RUN命令的参数,即容器启动时,要运行的命令

    推到镜像库

      最后,可以将镜像push到自己的镜像库,需要的时候就pull下来运行即可。

  • 相关阅读:
    网络流入门
    Sereja and Swaps(贪心+暴力枚举区间)
    multiset
    欧拉路
    整除分块
    蓝魔法师
    选点
    F. Tree with Maximum Cost(换根)
    “db2执行sql语句,注释没了”的解决办法
    Mybatis中的自带Mapper方法
  • 原文地址:https://www.cnblogs.com/-beyond/p/9259923.html
Copyright © 2011-2022 走看看