一、一个官方容器的编排文件
https://hub.docker.com/search?q=centos&type=image
FROM scratch
ADD centos-7-docker.tar.xz /
LABEL org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20181205"
CMD ["/bin/bash"]
这个基础镜像是基于 scratch 创建的
添加了一个文件 centos-7-docker.tar.xz
一个容器需要满足的两个条件:
1、 scratch 镜像
2、centos-7-docker.tar.xz 一个文件
解释:
1、scratch 镜像 根本不存在,是所有基础镜像最原始的一个模板镜像。
1.1 获取 scratch 镜像 的方法:
tar cf scratch.tar --files-from /dev/null
1.2 导入 scratch 镜像
docker import scratch.tar scratch
2、centos-7-docker 其实就是系统的根目录下的所有文件
2.1 获取centos-7-docker.tar.xz的方法
2.1.1 创建一个文件夹
mkdir /root/vroot
2.1.2 安装系统常用的软件
yum -y install --installroot /root/vroot bash yum coreutils net-tools vim
2.1.3 初始化root登录环境
把/root/vroot/etc/skel/ 所有非以..开头的文件 拷贝到 /root/vroot/root/ 下面
cp -a vroot/etc/skel/.[!.]* vroot/root/
2.1.4 打包文件,要以虚拟目录作为根打包
tar -cJf centos-7-docker.tar.xz -C vroot ./
2.1.5 把官方的编排文件copy到Dockerfile
vim Dockerfile
2.1.6 创建镜像
docker build –t centos:latest
PS:创建root登陆环境的两种方法。
第一种:
在容器里执行
cp -a /etc/skel/.[!.]* /root/
退出使用bash解释器重新登陆
ctrl + p +q
docker ps -q #获取id
docker exec -it id bash
第二种:
在物理机上:
chroot /root/vroot #重新挂载根系统
cp -a /etc/skel/.[!.]* /root/
把容器保存为镜像
docker commit id 镜像名:标签名
docker commit 9c897e695486 docker.io/centos:latest
把镜像打包称tar文件,供其他docker主机使用
docker save 镜像名:标签名 -o 文件名.tar
docker save docker.io/centos -o centos.tar
原文:https://www.cnblogs.com/shixi-study/p/11329760.html