[转帖]docker进阶教程之dockerfile优化镜像大小

docker,进阶,教程,dockerfile,优化,镜像,大小 · 浏览次数 : 0

小编点评

**关于docker进阶教程之dockerfile优化镜像大小** 该文章介绍了如何优化dockerfile,以减少镜像大小。文章包含以下几个部分: **一、无优化构建镜像** * 使用 `dockerfile` 从 `centos:7` 创建镜像。 * 使用 `yum` 安装依赖项。 * 使用 `sed` 替换CFLAGS指令。 * 使用 `make` 和 `install` 命令构建镜像。 **二、不需要输出的指令丢入/dev/null** * 将一些 `yum` 命令的输出丢入 `/dev/null`。 **三、减少RUN构建12345678910111213141516FROM centos:7 ADD nginx-1.22.0.tar.gz /mnt/nginxWORKDIR /mnt/nginx/nginx-1.22.0RUN ...** * 使用 `dockerfile` 从 `centos:7` 创建镜像。 * 使用 `yum` 安装依赖项。 * 使用 `sed` 替换CFLAGS指令。 * 使用 `make` 和 `install` 命令构建镜像。 **四、多阶段构建12345678910111213141516FROM centos:7** * 使用 `dockerfile` 从 `centos:7` 创建镜像。 * 将 `nginx-1.22.0.tar.gz` 添加到镜像中。 * 使用 `WORKDIR` 设置工作目录。 * 使用 `yum` 安装依赖项。 * 使用 `sed` 替换CFLAGS指令。 * 使用 `make` 和 `install` 命令构建镜像。 **五、使用更为轻量级的linux发行版本** * 使用 `debianalpineapt` 添加 `SandboxBusybox1234`。 * 从 `precreated` 文件夹中下载 `debian-7.0-x86-minimal.tar.gz`。 * 使用 `docker import` 命令生成镜像。 * 查看镜像详细信息。

正文

https://www.jb51.net/hack/

 

 
同样功能的镜像,但是不同的Dockerfile build出来的镜像大小是不一样的,下面这篇文章主要给大家介绍了关于docker进阶教程之dockerfile优化镜像大小的相关资料,需要的朋友可以参考下
 

一、无优化构建镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir /mnt/nginx
  
vim Dockerfile
FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
#关闭debug日志
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc 
RUN ./configure --prefix=/usr/local/nginx 
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]  

二、不需要输出的指令丢入/dev/null

1
2
3
4
5
6
7
8
9
10
11
12
FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/null
RUN rm -rf /mnt/nginx/nginx-1.22.0
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx""-g","daemon off;"]

三、减少RUN构建

1
2
3
4
5
6
7
8
9
10
11
12
FROM centos:7
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
 yum clean all && \
 sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
 ./configure --prefix=/usr/local/nginx &> /dev/null && \
 make &> /dev/null && make install &> /dev/null &&\
 rm -rf /mnt/nginx/nginx-1.22.0
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

docker build -t nginx:v3 . 构建镜像

docker images查看镜像

四、多阶段构建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FROM centos:7 as build 
ADD nginx-1.22.0.tar.gz /mnt/nginx 
WORKDIR /mnt/nginx/nginx-1.22.0
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all &&\
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &>/dev/null && \
make install &>/dev/null && \
rm -rf /mnt/nginx/nginx-1.22.0
 
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
1
2
docker build -t nginx:v4 . 构建镜像
docker images查看镜像

五、使用更为轻量级的linux发行版本 

debian
alpine
apt add
Sandbox
Busybox

1
2
3
4
#下载debian压缩包
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
docker import debian-7.0-x86-minimal.tar.gz -- debian:v1 生成镜像
docker images 查看

总结

到此这篇关于docker进阶教程之dockerfile优化镜像大小的文章就介绍到这了,更多相关dockerfile优化镜像大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

与[转帖]docker进阶教程之dockerfile优化镜像大小相似的内容:

[转帖]docker进阶教程之dockerfile优化镜像大小

https://www.jb51.net/hack/ 同样功能的镜像,但是不同的Dockerfile build出来的镜像大小是不一样的,下面这篇文章主要给大家介绍了关于docker进阶教程之dockerfile优化镜像大小的相关资料,需要的朋友可以参考下 + 目录 一、无优化构建镜像 1 2 3

[转帖]Jmeter连接InfluxDB2.0.4

Jmeter连接InfluxDB2.0.4 问题描述:在用Jmeter+InfluxDB构建监控时,因为docker构建的InfluxDB的版本是2.0.4,按照网上的教程进行后端监听器的填写,但是一直出现错误提示401等问题。网上的教程大多是1.X版本的,怀疑是数据库版本不一致导致的数据无法写入,

[转帖]docker 镜像分层原理及容器写时复制

https://xie.infoq.cn/article/19c98e8b15ff9f610a2ee26bd 一、镜像分层与容器层 在进行docker pull 下载镜像的时候,通过下图可以看到镜像是分层下载并解压的。如 nginx:1.20.2 的镜像,其镜像是分为 6 层。 当我们运行一个新的容

[转帖]Docker限制容器的资源

docker在默认运行容器的情况下,是不会对运行的容器进行资源限制的,在自己的实验环境的话是随便你怎么弄的,不过在生产中是一定会对docker运行的容器进行资源限制的,如果不限制的话在生产中会带来很多弊端的。例如当资源没有做限制时,资源用完了后会导致其他的容器无法运行,在生产中的话是会部署几十个或者

[转帖]Docker相关的概念和原理

https://www.jianshu.com/p/9737cbe33304 chroot chroot就是可以改变某进程的根目录,使这个程序不能访问目录之外的其他目录。Docker是利用Linux的Namespace、Cgroups和联合文件系统三大机制来保证实现的,它的原理是使用Namespac

[转帖]docker 容器基础技术:linux cgroup 简介

https://cizixs.com/2017/08/25/linux-cgroup/ Linux cgroups 的全称是 Linux Control Groups,它是 Linux 内核的特性,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、

[转帖]Docker、containerd的关系

Docker、containerd的关系 containerd囊括了单机运行一个容器时所需要的一切: 为了能够支持多种OCI Runtime,containerd 内部使用containerd-shim,每启动一个容器都会创建一个新的containerd-shim进程,指定容器ID,Bundle目录

[转帖]Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南

https://zhuanlan.zhihu.com/p/417472115 什么是cgroup? cgroups其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组(如CPU、内存、磁盘输入输出等)。 什么是Docker资源限制? 默

[转帖]如何优雅的使用 Systemd 管理服务

https://zhuanlan.zhihu.com/p/271071439 背景:我们在构建 Kubernetes 容器化平台时,会在节点上部署各种 agent ,虽然容器化当道的今天很多程序可以直接采用 docker 方式进行运行,但我们在整个集群内部仍然大量使用了 systemd 来管理基础服

[转帖]如何在一个Docker中同时运行多个程序进程?

https://cloud.tencent.com/developer/article/1683445 我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程 那么基本思路是在Dockerfile 的CMD 或者 ENTRYP