从零开始到新建一个容器的镜像

一、一个官方容器的编排文件

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

猜你喜欢

转载自www.cnblogs.com/shixi-study/p/11329760.html