DockerHub 上有很多的镜像,可以满足大部分的需求。这种情况我们就可以直接通过docker pull **
从DockerHub上获取对应的镜像。
当然还有一些情况,我们需要的镜像DockerHub上不存在,例如:Linux信创的环境,在DockerHub上就很难知道对应的镜像,如果需要这种镜像的话就需要通过运行的系统来制作镜像了。
$ cd /
$ ls
bin boot data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
/proc
、/sys
、/run
、/dev
这几个目录都是系统启动时自动生成的,虽然也属于文件系统一部分,但是他们每次开机都会有变化,所以打包的时候就应该忽略它们
/
跟目录,然后--exclude
排除不需要的目录
2、也可以直接选择需要压缩的目录tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
or
tar -cvpf /tmp/system.tar bin data dev etc home lib lib64 lost+found media mnt opt root sbin srv tmp usr var
参数说明:
-c或--create 建立新的备份文件
-f<备份文件>或--file=<备份文件> 指定备份文件
-p或--same-permissions 用原来的文件权限还原文件
-v或--verbose 显示指令执行过程
z或--gzip或--ungzip 通过gzip指令处理备份文件
--numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称
tar 命令更多参数可参考:
Linux tar.gz、tar、bz2、zip 等解压缩、压缩命令详解
导入docker之前,最好修改下docker的默认存储路径。
具体修改方法可参考: Linux 下修改Docker默认存储路径
$ docker import /tmp/system.tar linux:10.1
// linux:10.1 是自定义的镜像和tag名称
or
cat /tmp/system.tar | docker import - linux:10.1
tips: 运行导入的镜像的时候必须带command,否则启动报如下错误. 最后的/bin/bash 不能少
$ docker run -it -d **** /bin/bash
提示: 制作的镜像文件太大,会导致启动容器时候失败: Getting the final child's pid from pipe caused "EOF"
参考文章:
Docker 镜像导出和导入(https://links.jianshu.com/go?to=https%3A%2F%2Fyeasy.gitbook.io%2Fdocker_practice%2Fcontainer%2Fimport_export)