前言
DockerHub 上有很多的镜像 可以满足大部分的需求。这种情况我们就可以直接通过 docker pull ** 从 DockerHub 上获取对应的镜像
当然还有一些情况 我们需要的镜像 DockerHub 上不存在
例如:Linux信创的环境 在 DockerHub 上就很难知道对应的镜像 如果需要这种镜像的话 就需要通过运行的系统来制作镜像了
具体步骤
对系统进行压缩
- 查看系统目录
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 这几个目录都是系统启动时自动生成的 虽然也属于文件系统一部分
但是他们每次开机都会有变化 所以打包的时候就应该忽略它们
/media /mnt /tmp 目录也可以忽略
-
tar 完成系统压缩包
-
- 可以选择 / 跟目录 然后 --exclude 排除不需要的目录
- 也可以直接选择需要压缩的目录
cd /
tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=run --exclude=dev --exclude=boot .
tar -cvpf /tmp/system.tar bin data dev etc home lib lib64 lost+found media mnt opt root sbin srv tmp usr var
参数说明:
- c 建立新的备份文件
- v 显示指令执行过程
- p 用原来的文件权限还原文件
- f 指定备份文件
- z 通过 gzip 指令处理备份文件
导入 docker
导入 docker 之前 最好修改下 docker 的默认存储路径
Docker 默认安装的情况下 会使用 /var/lib/docker/ 目录作为存储目录 用以存放拉取的镜像和创建的容器等
这个路径是系统存储目录 一般空间会比较小 如果创建的容器很大那系统空间很快就没有了
这里记录下将 docker 的默认路径修改为数据盘
操作方案
- 查看磁盘信息 选择一个磁盘空间较大的做为 docker 的默认安装位置
df -h
- 查看 docker 当前的存储路径
docker info | grep -i docker
Docker Root Dir: /data/docker
- 修改配置文件 /etc/docker/daemon.json
{
...
"data-root": "/data/docker/",
...
}
- 重启服务
systemctl restart docker
- 查看确认 docker 当前的存储路径
docker info
- 继续导入 docker
cat /tmp/system.tar | docker import - linux:8.3
### linux:8.3 是 自定义的镜像 和 tag 名称
运行镜像容器
tips: 运行导入的镜像的时候必须带 command,否则启动报如下错误 . 最后的 /bin/bash 不能少
$ docker run -it -d **** /bin/bash
提示: 制作的镜像文件太大,会导致启动容器时候失败: Getting the final child’s pid from pipe caused “EOF”