Docker之镜像的构建--封装apache镜像、nginx镜像-----nginx镜像优化

1、镜像更新版本
1) 导入镜像
[root@server1 images]# docker load -i busybox.tar
[root@server1 ~]# cd  /tmp/
[root@server1 tmp]# mkdir docker
[root@server1 tmp]# cd docker/
2)构建
[root@server1 docker]# vim Dockerfile
FROM busybox
RUN echo hellworld > /testfile

[root@server1 docker]# docker build -t busybox:v1 .
[root@server1 docker]# docker history busybox:v1

在这里插入图片描述

3)再次构建
	[root@server1 docker]# vim Dockerfile
	
	FROM busybox
	RUN echo hellworld > /testfile
	RUN echo redhat >> /testfile
	
	[root@server1 docker]# docker build -t busybox:v2 .
	[root@server1 docker]# docker history busybox:v2

在这里插入图片描述

2、封装apache镜像
1)导入基础镜像
[root@server1 images]# docker load -i rhel7.tar
2)测试yum源(此步只是测试yum源,与部署无关)
	[root@server1 images]# docker run -it --rm rhel7 bash
	bash-4.2# cd /etc/yum.repos.d/ 
	bash-4.2# vi dvd.repo
	[dvd]
	name=rhel7
	baseurl=http://172.25.47.250/westos
	gpgcheck=0
	bash-4.2# yum repolist
3)在docker目录下写一个yum源的文件
    [root@server1 docker]# pwd
	/tmp/docker
	[root@server1 docker]# vim dvd.repo
	[dvd]
	name=rhel7
	baseurl=http://172.25.47.250/westos
	gpgcheck=0
4)写Dockerfile
	[root@server1 docker]# vim Dockerfile 
	FROM rhel7
	EXPOSE 80
	COPY dvd.repo /etc/yum.repos.d/dvd.repo
	RUN rpmdb --rebuilddb && yum install -y httpd
	CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
5)封装
[root@server1 docker]# docker build -t rhel7:v1 .
6)开启
[root@server1 docker]# docker run --name vm1 -d rhel7:v1
923eaee75f87dc9caa3e1d2b96f046696790e43f091832e35a54a0edbfa619b0

在这里插入图片描述

[root@server1 docker]# docker ps
[root@server1 docker]# docker inspect  vm1

在这里插入图片描述
在这里插入图片描述

7)写一个发布页面
[root@server1 docker]# vim index.html
www.wanghaha.com
[root@server1 docker]# docker container cp index.html vm1:/var/www/html/
8)测试
[root@server1 docker]# curl 172.17.0.2
www.wanghaha.com

在这里插入图片描述

3、封装nginx镜像
1)准备nginx包
[root@foundation47 5.14docker]# scp nginx-1.15.8.tar.gz root@172.25.47.1:/root
[root@server1 ~]# cp nginx-1.15.8.tar.gz /tmp/docker/		##先准备一个nginx包,到/tmp/docker/	
2)写Dockerfile
	[root@server1 ~]# cd /tmp/docker/
	[root@server1 docker]# pwd
	/tmp/docker
	[root@server1 docker]# vim Dockerfile 
		FROM rhel7
		EXPOSE 80
		COPY dvd.repo /etc/yum.repos.d/dvd.repo
		ADD nginx-1.15.8.tar.gz /mnt		##解压到/mnt目录下
		WORKDIR /mnt/nginx-1.15.8
		RUN  rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel
		RUN ./configure --prefix=/usr/local/nginx
		RUN make
		RUN make install
		CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
3)封装
	[root@server1 docker]# docker build -t mynginx:v1 .

在这里插入图片描述

4)运行
[root@server1 docker]# docker run --name vm2 -d mynginx:v1
[root@server1 docker]# docker ps		## 查看进程

在这里插入图片描述
在这里插入图片描述

5)测试
	[root@server1 docker]# docker inspect vm2

在这里插入图片描述

		[root@server1 docker]# curl 172.17.0.3

在这里插入图片描述

4、镜像优化

在这里插入图片描述

1)减少镜像层数,清理中间产物
	[root@server1 docker]# pwd
	/tmp/docker
	[root@server1 docker]# vim Dockerfile 
		FROM rhel7
		EXPOSE 80
		COPY dvd.repo /etc/yum.repos.d/dvd.repo
		ADD nginx-1.15.8.tar.gz /mnt
		WORKDIR /mnt/nginx-1.15.8
		RUN   rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.15.8
		CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

在这里插入图片描述

		[root@server1 docker]# docker build -t mynginx:v2 .
		[root@server1 docker]# docker images mynginx
		可以看到优化后的v2版本镜像变小了

在这里插入图片描述

2)优化,使用多阶段构建镜像
	[root@server1 docker]# vim Dockerfile 
	
	FROM rhel7 as build
	COPY dvd.repo /etc/yum.repos.d/dvd.repo
	ADD nginx-1.15.8.tar.gz /mnt
	WORKDIR /mnt/nginx-1.15.8
	RUN   rpmdb --rebuilddb && yum install -y gcc make zlib-devel pcre-devel && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.15.8
	
	
	FROM rhel7
	EXPOSE 80
	COPY --from=build /usr/local/nginx /usr/local/nginx
	CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

在这里插入图片描述

	[root@server1 docker]# docker build -t mynginx:v3 .
	[root@server1 docker]# docker images mynginx			

在这里插入图片描述

3)优化镜像,选择最精简的基础镜像
1>导入基础镜像
[root@server1 images]# docker load -i  distroless.tar
2>写Dockerfile
[root@server1 docker]# pwd
/tmp/docker

[root@server1 docker]# vim Dockerfile 
FROM nginx as base

# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base

COPY --from=base /opt /

EXPOSE 80

ENTRYPOINT ["nginx", "-g", "daemon off;"]
3>封装
[root@server1 docker]# docker build -t mynginx:v4 .
4>查看大小
[root@server1 docker]# docker images mynginx

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值