首页 > 其他分享 >Dockerfile说明-镜像最小化-docker-squash镜像压缩工具

Dockerfile说明-镜像最小化-docker-squash镜像压缩工具

时间:2024-09-11 16:24:08浏览次数:10  
标签:压缩工具 squash 6.5 elasticsearch usr && 镜像 docker

 

概述

很多时候,构建的镜像总是在构建完之后分了好几个镜像层,有些镜像层还是因为只改变了一点东西,就多了整个目录的大小。那么,如何让镜像在构建的时候保持最小化,就是我们运维需要关心的问题。毕竟,有时候镜像太大,可能会被某些厂家的云仓库给限制上传的问题。

 

Dockerfile用法介绍

 

 在构建镜像之前,先了解一下dockerfile的几个常用参数的用法。

FROM
用法:FROM <image> 或 FROM <image>:<tag>
描述:设置基础镜像,之后的指令都会基于这个镜像进行。这是Dockerfile中的第一个指令。
示例:FROM ubuntu:latest
RUN
用法:RUN <command>(在shell中执行,默认/bin/sh -c) 或 RUN ["executable", "param1", "param2"](使用exec形式)
描述:在镜像中执行命令,并创建新的镜像层。常用于安装软件包、编译应用等。
示例:yum install -y nginx

EXPOSE
用法:EXPOSE <port> [<port>...]
描述:声明容器运行时监听的端口。这并不会让端口在宿主机上监听,但它会告诉Docker和潜在的使用者,容器想要使用哪些端口。
示例:EXPOSE 80 443
ENV
用法:ENV <key> <value> 或 ENV <key>=<value> ...
描述:设置环境变量。这些变量可以在后续的RUN指令中使用,也可以在容器运行时通过docker run命令的-e选项覆盖。
示例:ENV NODE_VERSION 10.16.0
ADD 和 COPY
ADD:用法较为复杂,主要用于从URL或tar文件中添加内容到镜像。由于其行为较为复杂,现在推荐使用COPY。
COPY:COPY <src>... <dest>
描述:从Dockerfile所在的上下文目录中复制文件或目录到镜像中。COPY比ADD更透明和简单。
示例:COPY ./myapp /usr/src/myapp
WORKDIR
用法:WORKDIR /path/to/workdir
描述:设置工作目录,之后的RUN、CMD、ENTRYPOINT等指令都会在这个目录下执行。
示例:WORKDIR /app
LABEL
用法:LABEL <key>=<value> <key>=<value> ...
描述:为镜像添加元数据。这些信息可以用docker inspect命令查看。
示例:LABEL maintainer="[email protected]"
CMD
用法:CMD ["executable","param1","param2"](exec形式,推荐)、CMD ["param1","param2"](为ENTRYPOINT提供默认参数)、CMD command param1 param2(shell形式)
描述:提供容器运行时的默认命令。Dockerfile中可以有多条CMD指令,但只有最后一条会生效。如果docker run命令后面有命令,CMD指定的命令会被覆盖。
示例1:CMD ["echo", "Hello Docker!"]
示例2:CMD "echo Hello Docker!"
ENTRYPOINT 用法:ENTRYPOINT ["executable", "param1", "param2"](exec形式,推荐)、ENTRYPOINT command param1 param2(shell形式) 描述:配置容器启动时运行的命令,让容器以某种方式运行。与CMD不同,ENTRYPOINT不会被docker run命令指定的参数覆盖,而是会将这些参数作为ENTRYPOINT指定的命令的参数。 示例:ENTRYPOINT ["/usr/sbin/nginx"]

简单总结,CMD和ENTPRYPOINT的区别就是。启动容器的时候,如果执行的命令是docker run -it --name test test:v1 /bin/bash,那么CMD的参数就会被/bin/bash覆盖。

 

Dockerfile构建镜像示例

在以下dockerfile例子中,保持镜像体积小的使用技巧有:

①安装完所需插件后,清理yum缓存

②RUN参数使用的时候,进行将多命令合并为一条命令

③软件的压缩包,在安装完成后清理

这个elasticsearch的dockerfile是经过实际使用的。更换下es版本和jdk版本可以直接用。

FROM kylinv10

# 拷贝安装OpenJDK 8 for ARM64 COPY jdk-8u381-linux-aarch64.tar.gz /opt/
#安装passwd tar vi 并清空yum缓存 RUN yum install -y tar vi passwd && \ useradd es && \ yum clean all && \ cd /opt/ && \ tar -xvf jdk-8u381-linux-aarch64.tar.gz

#设置jdk环境变量 ENV JAVA_HOME /opt/jdk1.8.0_381/ ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin
#拷贝es到ARM64 COPY elasticsearch-6.5.4.tar.gz /usr/local
#安装es RUN cd /usr/local && \ tar -xzf elasticsearch-6.5.4.tar.gz && \ rm elasticsearch-6.5.4.tar.gz && \ mkdir -p /usr/local/elasticsearch-6.5.4/plugins/ik && \ mkdir -p /usr/local/elasticsearch-6.5.4/plugins/analysis-icu && \ mkdir -p /var/lib/elasticsearch-6.5.4/
#安装IK分词器 COPY ik /usr/local/elasticsearch-6.5.4/plugins/ik COPY analysis-icu /usr/local/elasticsearch-6.5.4/plugins/analysis-icu
#复制配置文件 COPY elasticsearch.yml /usr/local/elasticsearch-6.5.4/config #COPY sysctl.conf /etc/sysctl.conf
#es授权 RUN chown -R es:es /opt/jdk1.8.0_381/ && \ chown -R es:es /var/lib/elasticsearch-6.5.4/ && \ rm /opt/jdk-8u381-linux-aarch64.tar.gz && \ ln -s /opt/jdk1.8.0_381/bin/java /usr/bin/java && \ chown -R es:es /usr/local/elasticsearch-6.5.4 && \ chmod +x /usr/local/elasticsearch-6.5.4/bin/elasticsearch
# 设置Elasticsearch运行用户 USER es
# 暴露Elasticsearch的HTTP和传输端口 EXPOSE 9200 9300
# 运行Elasticsearch CMD ["/usr/local/elasticsearch-6.5.4/bin/elasticsearch"]

做完这个镜像之后,为什么会出现两个同样大小的/var/lib/elasticsearch-6.5.4/层呢?

原因很简单。docker build 的时候,会根据dockerfile的RUN指令修改文件(如更改权限、所有者等)时,这个修改会导致当前层与前一层之间的不同,并因此创建一个新的层 。

 

docker-squash镜像压缩工具

那么,来隆重介绍一个简单粗暴的压缩工具docker-squash。它的作用就是,压缩镜像层,达到减小镜像体积的作用。非常好用。想要用的小伙伴,复制就能用了。麒麟的换个yum源。

这个工具有个弊端。就是镜像太大的话,会把/tmp目录空间占满,然后docker就凉了,所以别在生成环境用哦,到时候后果自负。自己找台测试机器装个docker用就行。

该工具如果镜像层数越多,压缩率就越大。

安装pip命令
yum install python-pip
python3 --version
如果安装不了就安装阿里云源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
安装docker-squash压缩工具
python3 -m pip install docker-squash
python3 -m pip install --user docker-squash
find / -name docker-squash
/usr/local/bin/docker-squash --version

镜像压缩示例
/usr/local/bin/docker-squash -t kms_elasticsearch:6.5.4-arm64 kms_elasticsearch:kylin_v10
压缩后的镜像名 被压缩的镜像

麒麟yum源参考

纯麒麟v10阿里云镜像源
[ks10-adv-cdrom]
name = Kylin Linux Advanced Server 10 - cdrom
baseurl = file:///run/media/root/Kylin-Server-10
gpgcheck = 0
enabled = 1
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/base/aarch64/
gpgcheck = 0
enabled = 1
 
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://archive2.kylinos.cn/rpm/kylin/production/KY-KY10-GFB-aarch64/custom/kylin-server/KY10-GFB-aarch64-2204/
#baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/base/$basearch/
gpgcheck = 0
enabled = 1

 

标签:压缩工具,squash,6.5,elasticsearch,usr,&&,镜像,docker
From: https://www.cnblogs.com/cndr/p/18408448

相关文章

  • 如何将Go项目制作为docker镜像
    在Go项目中,将应用打包成Docker镜像是一种常见的做法,这有助于应用的部署和环境的一致性。下面,我将分步骤介绍如何创建一个Dockerfile来打包Go应用,并简要介绍如何使用goctl工具(尽管goctl主要用于生成Go的RPC代码,而不是直接用于Docker镜像的构建)。1.编写DockerfileDockerfile是构......
  • docker镜像构建libreoffice转换文件
    具体需求: 根据Libreoffice最新版本,创建一个容器环境,用于文件不同类型的转换#使用阿里云的Python镜像FROMdockerpull.com/python:3.9-slim#设置工作目录WORKDIR/app#更新debian系统的APT源列表为阿里ARGDEBIAN_FRONTEND=noninteractiveRUNapt-getclean&&\......
  • Ubuntu设置科大镜像源
    修改Ubuntu的镜像源为中科大镜像源1、首先使用以下命令备份现有的镜像源:sudocpetc/apt/sources.listetc/apt/sources.list.bak2、使用以下命令打开镜像源文件:sudovim/etc/apt/sources.list3、在vim插入模式下使用以下内容替换掉原镜像源文件sources.list中的内容:debhtt......
  • 镜像:PHP 8.0、Apache 和 phpMyAdmin 的集成​
    一、引言背景随着云计算和容器技术的快速发展,Docker已经成为了现代应用开发和部署的重要工具。在本文中,我们将介绍如何使用Docker镜像来集成PHP8.0、Apache和phpMyAdmin,以构建一个高效、可靠的Web应用开发环境。通过使用Docker,我们可以轻松地管理应用的依赖关系,提高开发......
  • 阿里云服务器镜像,有大用处
    大家好,我是小悟有时候阿里云旧服务器快到期了,想把项目、数据、软件挪到新服务器上,如果全部重新搭建的话,那无疑是耗时又费力。有了镜像迁移,就方便了许多。新旧服务器的类型要一致,比如都是ECS服务器,所属地域要选一样的。新服务器在配置上最好不低于旧服务器,不然可能会出现未......
  • 国内加速拉取docker镜像的几种方法
    参考首页快捷命令,使用本站代理拉取镜像,并修改回原始镜像名,在删除代理镜像名。参考以下dockercli和docker-compose.yml修改镜像名后,继续一直使用本站代理服务未启动或更新新镜像。参考下文修改daemon.json配置文件,来更便捷地使用代理服务。 源站替换为平台do......
  • 极狐GitLab 新一代容器镜像仓库正式上线啦!
    从极狐GitLab17.3开始,私有化部署实例也可以使用新一代容器镜像仓库啦!新一代容器镜像仓库具有更高效的零宕机垃圾收集功能和其他优势。从去年开始,极狐GitLab就启动了重构容器镜像仓库的计划,用以构建具有更强功能的镜像仓库,比如零宕机垃圾收集。自从将此功能成功迁移到极狐GitL......
  • 更换Linux系统镜像源
    更换Linux系统镜像源切换镜像源通常是为了提高软件包下载的速度和稳定性。以下是CentOS7切换镜像源的一般步骤:一、安装wget(如果尚未安装)首先,需要确保系统中安装了wget工具,因为wget可以用来下载文件。如果系统中没有wget,可以通过以下命令安装:yuminstall-ywget二、选择并......
  • Docker镜像使用
    一、查看设置docker镜像仓库地址cat/etc/docker/daemon.json修改完成后,需要重启docker才会生效,systemctlrestartdockerdockerinfo在最后就能看到镜像仓库地址列表在通过dockerpull域名/library/镜像名称:版本号可以拉取镜像到本地dockerimages查看本地镜像列表......
  • pip速度太慢解决(使用清华镜像)
    python的包管理工具pip速度太慢,经常下载时报错,可以使用清华镜像代替默认下载源。以下两种方法任何电脑都可以使用,演示电脑为Windows10版本1909。临时方法使用pip下载时,临时使用镜像(命令行):pipinstall<包名称>-ihttps://pypi.tuna.tsinghua.edu.cn/simple永久方法打开......