一、镜像构建
部署有nginx的rhel7系统的镜像
删掉之前实验留下的镜像
将rhel7.tar传给server1
导入rhel7镜像,相当于使用rhel7的内核
将server1的仓库配置文件复制到docker目录下
编写dockerfile创建镜像
通过Dockerfile建立镜像rhel7:gv1,执行命令创建镜像rhel7:v1
成功创建
拉起容器demo;
docker inspect demo查看容器信息
分配的 ip 为 172.17.0.2
在宿主机上挂载的路径
但访问时报错403 (403错误是网站访问过程中,常见的错误提示,意思为资源不可用,服务器理解客户的请求,但拒绝处理它),因为数据挂载在真实主机路径上,真实路径上没有数据,无法访问到内容
在宿主机挂载路径上创建默认发布文件index.html,进行访问;
此时成功获取到发布内容
查看到镜像rhel7:v1的大小303MB,需要进行优化
二、镜像优化
选择最精简的基础镜像
减少镜像的层数
清理镜像构建的中间产物
注意优化网络请求
尽量去用构建缓存
使用多阶段构建镜像
优化思路:减少镜像层数,合并所有RUN指令,清理镜像构建的中间产物包括编译好的安装包和缓存/mnt/nginx-1.20.1 /var/cache/*,继续编辑文件Dockerfile,创建镜像v2
查看镜像大小,v2大小为255MB,还需要优化
用构建缓存,使用多阶段构建镜像;
刚刚的构建过程产生了我们想要的ngnix还生成了相对应的编译环境,然而我们并不需要这个环境,还占用内存,所以使用多阶段构建镜像;
先用基础模块产生ngnix等一系列产物,然后只把这个基础模块中的 /usr/local/nginx目录复制给第二个模块,我们只需要拿第二个模块的东西,这样可以大大缩小内存
新的镜像rhel7:v3大小为141M,又有一定的优化
运行v3镜像创建一个容器,ldd( 列出动态库依赖关系)查看结构;
由于rhel7中组件过多,很多东西用不上,还占空间,若是还想优化镜像的话,可以选择最精简的基础镜像替换原有的rhel7,但需要安装nignx所需要的函数库,如下
将真机的base-debian10.tar传给server1
导入base镜像;
docker images查看大小,仅仅19.2MB
编写文件Dockerfile,给ngnix最基本的函数库,使用最基本的镜像base-debian10;
由于此时需要nginx镜像
真机scp给server1
导入nginx镜像
build生成新的镜像rhel7:v4此时再次查看大小为31M
创建一个由rhel7:v4这个镜像产生的容器demo
curl 172.17.0.2,成功访问到nginx默认发布页面