1.使用reposync将base镜像库同步到本地
yum -y install yum-utils createrepo
mkdir -p /data/centos7
find /etc/yum.repos.d/[!.]* -exec mv {} {}.bak ;
cat << EOF > /etc/yum.repos.d/sync.repo
[base]
name=aliyun-centos7
enabled=1
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
EOF
yum clean all
nohup reposync --newest-only --repoid=base -p /data/centos7/ >/dev/null 2>&1 &
createrepo /data/centos7/base -o /data/centos7/base
wget https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 -P /data/centos7
#备注:reposync命令可定期执行以保证本地源是最新的。
2.安装docker
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
mkdir -p /etc/docker
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl daemon-reload && systemctl enable docker && systemctl restart docker
docker version
3.制作scratch空镜像
tar cf scratch.tar --files-from /dev/null
docker import scratch.tar scratch
或者
docker rmi scratch
tar cv --files-from /dev/null | docker import - scratch
#备注:减号是标准输出,将管道前面命令的执行结果放入减号位置。
4.在centos7.5操作系统的命令行中制作centos7.5的根目录并打包
mkdir /root/vroot
yum -y install --installroot=/root/vroot bash yum coreutils
chroot /root/vroot/
cp /etc/skel/.[!.]* /root/
ls -a /root
exit
chroot /root/vroot/
exit
tar -cJf centos-7-docker.tar.xz -C vroot ./
5.制作centos7.5的docker镜像
mkdir /root/mydocker
mv centos-7-docker.tar.xz /root/mydocker/
cd /root/mydocker/
echo '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="20190716"CMD ["/bin/bash"]' > Dockerfile
docker build -t centos:latest .
docker images centos
docker history centos
6.运行刚制作的centos镜像并将容器中的更改备份出来
docker run -it centos
ifconfig
yum provides ifconfig
yum -y install net-tools
ifconfig
pstree
yum provides pstree
yum -y install psmisc
pstree -p
ls /
exit
docker container ls -a
docker save centos -o /root/centos.tar
tar -tvf /root/centos.tar
#备注:docker save导出的文件,其实就是一个普通的压缩文件,
这个压缩文件中包含了镜像的所有镜像层,以及包含镜像基本信息的Manifest文件。
在Manifest文件中,包含了所有镜像层的散列值,可以通过这些特征值来检查镜像层文件是否完整且正确。
7.启动容器并退出容器的正确做法
docker ps -a
docker start ee6286a3d32f
docker attach ee6286a3d32f
ctrl+p+q
docker ps