从零创建Docker用基础镜像 - CentOS7.9 x86_64

文档是根据百度到的各种资料,并实际操作,边做边记录的,本文档主要目的也是为了记录,以便于以后用到时查询

文档的目的是自己创建一个 Docker 用基础镜像用的一个 rootfs 系统

一、安装 最小版 CentOS7.9 系统

安装 最小版就可以,各个 Mirrors 站都有 ,试过用 Live 版,但在安装 yum 过程中到 glibc时 live 系统会死机

http://mirrors.ustc.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

小贴士:自 8 版本后因为 redhat 对 CentOS政策变动,所以下面是 8 以后版本的替代者
rockyLinux - 原 CentOS创始人之一另起的一个发行版,各个 Mirrors 都有
AlmaLinux - CloudLinux 公司维护的一个社区版本,也是免费的,除了官方外,现仅发现 阿里云
上有镜像,各个信息来看好像比 rockyLinux 要好些 yum

二、基本设置

我使用的 PVE 建立的虚拟机,其他是用虚拟机还是真机都无所谓

1.启动到桌面后,前期需要做一些设置,只是为了后面可 ssh 远程操作方便而已,所以不做赘述,以自己实际情况设置即可

1)设置网络,如是静态 IP ,修改完IP无法 ping 的,可以断天网络再连接一下试试
2)关闭防火墙,反正也是临时系统:
2.1) 修改 /etc/selinux/config 文件,修改内容为SELINUX=disabled,保存后 setenforce 0>
2.2)执行 systemctl stop firewalld.service
2.3)执行 systemctl disable firewalld.service

3)设置 ssh ,比如连接端口,是否允许 root 连接等你所需要的设置,设置完成后重启下 ssh 服务 systemctl stop ssh.service

4)设置自动熄屏和自动休眠的时间,以免因此制作到一半时断网

2.都设置没问题后可以使用 ssh 客户端连接到该虚拟机,方便粘贴脚本,当然了,你如果喜欢打键盘也无所谓

三、开始创建

全程以 root 用户进行操作

# 切换 root 用户
su - 

# 创建目录
mkdir -p /root/rootfs/var/lib/rpm

# 设置 rpm 主目录
rpm --root /root/rootfs/ --initdb

# 下载并安装基本系统
rpm -ivh --nodeps --root /root/rootfs/ http://mirrors.ustc.edu.cn/centos/7.9.2009/os/x86_64/Packages/centos-release-7-9.2009.0.el7.centos.x86_64.rpm

# 可以先查看一下结果
ls /root/rootfs/
ls /root/rootfs/etc/

# 给 rootfs 系统中安装 yum
yum --installroot=/root/rootfs install yum --nogpgcheck

# 拷贝 dns 文件到 rootfs 中
cp -L /etc/resolv.conf /root/rootfs/etc/resolv.conf
# 下面这行可以不用,因为 rootfs 中也有自己的 源
# cp –r /etc/yum.repos.d/ /root/rootfs/etc/

# 复制当前系统的基本配置文件,不拷贝也可以,只是会使用最基本的 bash 配置也一样
# cp -vL .bashrc rootfs/root/
# cp -vL .bash_profile rootfs/root/

# 此时 rootfs 已经生成,可以 chroot rootfs 进入使用

chroot rootfs 主要是为了安装或清理一下垃圾文件及信息

# 进入 rootfs 前,需要先挂载宿主机的 /dev 目录,否则 rootfs 内 yum 会报错
mount --bind /dev/ rootfs/dev/

# 也可以把 宿主系统中的 .bashrc .bash_profile 拷贝到 rootfs/root 目录中,根据个人需要,就不写了

# 此时可以 进入 rootfs
chroot rootfs

# 添加ustc中国科技大学的 epel 扩展源
yum install -y epel-release
sed -e 's|^metalink=|#metalink=|g' \
         -e 's|^#baseurl=https\?://download.fedoraproject.org/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
         -e 's|^#baseurl=https\?://download.example/pub/epel/|baseurl=https://mirrors.ustc.edu.cn/epel/|g' \
         -i.bak \
         /etc/yum.repos.d/epel.repo
         
yum clean all && yum makecache

# 可以安装一些所需的工具
yum install -y bash-completion iputils wget nano shadow-utils 
# bash-completion 命令参数补全 / net-tools 网络管理工具,较大,可选择不用安装 
# iputils ping工具 / wget 下载 / nano 文本编辑,体积小
# shadow-utils 添加一些用户、组管理工具

# 都安装完了,可以清理一下,用于减小打包
yum clean all

# 退出 rootfs ,打包
exit
umount -l rootfs/dev/	# 别忘记给卸载掉
mount -l | grep rootfs	#可以通过这个命令查看是否还在挂载没有卸掉
cd rootfs
tar czvf ../rootfs-CentOS7.9.tar.gz *

最后生成的文件就是 rootfs 的压缩包,拷贝走就可以了

四、Docker 通过 rootfs 生成基础镜像

全程在 root 用户及其目录中执行

# 创建 存放 rootfs / Dockerfile 文件的目录
mkdir -p rootfs-CentOS7.9
cd rootfs-CentOS7.9

# 放入之前创建的 rootfs-CentOS7.9.tar.gz
# 创建 Dockerfile 文件
vim Dockerfile

文件内容如下:

# 以下为必写信息
# 创建一个空镜像
FROM scratch
# 镜像建立人的信息
MAINTAINER UnMobile
# 将压缩的 rootfs 文件自动解压,并拷贝到镜像的根文件目录中
ADD ./rootfs-CentOS7.9.tar.gz /
### 文档内容结束
# 保存文件退出,按 ESC 输入 wq 并回车

开始生成 docker 镜像

docker build --rm -t unmobile/centos7.9-baseimage:v0 .
# 注意最后有一个点,那个是指 dockerfile的位置在当前位置,是相对路径
# --rm 设置镜像成功后删除中间容器

可以测试运行一下

docker images # 显示现在已经添加的镜像信息,找到已经添加成功的镜像
# 可以用下面的命令运行这个镜像,生成一个新的容器
命令格式:docker run -it -p 1521:1521 -v 宿主机目录:容器中目录 镜像名或镜像ID 要在容器中执行的命令(如 /bin/bash)
# -it 以交互式进入容器操作,可以理解为连接到容器中使用容器中的系统
# -P 随机指定宿主机端口与容器端口进行映射
# 以下参数可以加多个
# -p 指定宿主机端口与指定容器端口进行映射
# -v 指定宿主机目录引用至指定容器目录,可以使重要数据持久化,以防容器被删除

# 例如
docker run -it -p 1521:1521 -v /data:/ORCLData XXXXXXXXXX /bin/bash

你可能感兴趣的:(linux,docker,linux,centos,rootfs)