将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分钟左右,大概是在虚拟机里面的原因。
需要注意的是,在打包之前,请先确认要将哪些文件进行打包,比如下面这些目录都可以不用打包:
- 某些用户的家目录是否需要打包
- 每个用户的执行的历史命令是否需要清除
- 一些涉及到隐私的文件
- 与系统镜像没有关系的文件,或者说只是系统运行过程中保存的垃圾文件或者缓存等
- 临时文件
建议手动选择要进行打包的目录,比如: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下来运行即可。