1、镜像更新版本

1) 导入镜像
[[email protected] images]# docker load -i busybox.tar
[[email protected] ~]# cd  /tmp/
[[email protected] tmp]# mkdir docker
[[email protected] tmp]# cd docker/
2)构建
[[email protected] docker]# vim Dockerfile
FROM busybox
RUN echo hellworld > /testfile

[[email protected] docker]# docker build -t busybox:v1 .
[[email protected] docker]# docker history busybox:v1

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

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

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

2、封装apache镜像

1)导入基础镜像
[[email protected] images]# docker load -i rhel7.tar
2)测试yum源(此步只是测试yum源,与部署无关)
	[[email protected] 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源的文件
    [[email protected] docker]# pwd
	/tmp/docker
	[[email protected] docker]# vim dvd.repo
	[dvd]
	name=rhel7
	baseurl=http://172.25.47.250/westos
	gpgcheck=0
4)写Dockerfile
	[[email protected] 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)封装
[[email protected] docker]# docker build -t rhel7:v1 .
6)开启
[[email protected] docker]# docker run --name vm1 -d rhel7:v1
923eaee75f87dc9caa3e1d2b96f046696790e43f091832e35a54a0edbfa619b0

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

[[email protected] docker]# docker ps
[[email protected] docker]# docker inspect  vm1

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

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

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

3、封装nginx镜像

1)准备nginx包
[[email protected] 5.14docker]# scp nginx-1.15.8.tar.gz [email protected]:/root
[[email protected] ~]# cp nginx-1.15.8.tar.gz /tmp/docker/		##先准备一个nginx包,到/tmp/docker/	
2)写Dockerfile
	[[email protected] ~]# cd /tmp/docker/
	[[email protected] docker]# pwd
	/tmp/docker
	[[email protected] 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)封装
	[[email protected] docker]# docker build -t mynginx:v1 .

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

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

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

5)测试
	[[email protected] docker]# docker inspect vm2

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

		[[email protected] docker]# curl 172.17.0.3

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

4、镜像优化

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

1)减少镜像层数,清理中间产物
	[[email protected] docker]# pwd
	/tmp/docker
	[[email protected] 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;"]

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

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

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

2)优化,使用多阶段构建镜像
	[[email protected] 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;"]

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

	[[email protected] docker]# docker build -t mynginx:v3 .
	[[email protected] docker]# docker images mynginx			

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

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

[[email protected] 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>封装
[[email protected] docker]# docker build -t mynginx:v4 .
4>查看大小
[[email protected] docker]# docker images mynginx

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

相关文章:

  • 2021-10-12
  • 2021-04-29
  • 2021-06-30
  • 2021-07-14
  • 2021-09-16
  • 2021-10-23
猜你喜欢
  • 2021-12-06
  • 2022-12-23
  • 2021-11-19
  • 2021-07-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案