当前位置: 首页 > news >正文

【云原生】Docker基于Dockerfile多级构建,实现缩小镜像体积

目录

一、基于上次的nginx的Dockerfile做多级构建

二、基于上次的php的Dockerfile修改做多级构建

三、基于上次的mysql的Dockerfile修改做多级构建

基于以上三个镜像构建

四、镜像体积是不是越小越好?为什么要缩减镜像体积?

五、缩小镜像体积的方法有哪些?


一、基于上次的nginx的Dockerfile做多级构建

[root@localhost nginx]#cp Dockerfile{,.bak}
[root@localhost nginx]#ls
Dockerfile  Dockerfile.bak  html  nginx-1.24.0.tar.gz  nginx.conf
##修改dockerfile
[root@localhost nginx]#vim Dockerfile##多级构建nginx镜像
[root@localhost nginx]#docker build -t nginx:lnmp .[root@localhost nginx]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        lnmp      4dca9c42d983   5 seconds ago   208MB
nginx        centos    cd7bd0d67d77   6 hours ago     560MB
centos       7         eeb6ee3f44bd   2 years ago     204MB

FROM centos:7 as build
#基于centos7镜像
MAINTAINER nginx on centos7 by lxy-20240125
#注释信息
ADD nginx-1.24.0.tar.gz /opt/
#将nginx安装包传输到镜像中
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && \cd /opt/nginx-1.24.0 && \./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && \make && make install
#下载编译安装nginx的依赖环境,以及创建nginx用户,进入nginx目录中,完成配置--编译--安装
ENV PATH=$PATH:/usr/local/nginx/sbin/
#创建镜像的环境变量
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
#将配置文件传输的镜像中,覆盖原有的nginx.conf文件
RUN chmod 777 -R /usr/local/nginx/html/
#修改权限FROM centos:7
#再次基于centos7
COPY --from=build /usr/local/nginx /usr/local/nginx
#把第一阶段的安装目录复制到第二阶段
RUN useradd -M -s /sbin/nologin nginx
#必须的有个nginx用户
EXPOSE 80
#暴露80端口
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
#设置启动命令

二、基于上次的php的Dockerfile修改做多级构建

[root@localhost php]#cp Dockerfile{,.bak} 
[root@localhost php]#ls
Dockerfile  Dockerfile.bak  php-7.1.10.tar.bz2  php-fpm.conf  php.ini  www.conf[root@localhost php]#vim Dockerfile
[root@localhost php]#docker build -t php:lnmp .[root@localhost php]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
php          lnmp      0e64d9300be2   About a minute ago   520MB
php          centos    6ae7f531fd8a   4 hours ago          965MB

FROM centos:7
#基础镜像为centos7
MAINTAINER this is php image <lxy:20240125>
#注释信息
ADD php-7.1.10.tar.bz2 /opt/
#将文件传输到镜像中
RUN yum -y install  gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel gcc gcc-c++ make pcre-develgcc gcc-c++ make pcre-devel && \
yum clean all && \
cd /opt/php-7.1.10 && \./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make -j 2&& make install && \
useradd -M -s /sbin/nologin nginx
#通过RUN依次下载php的依赖环境,清理yum缓存
#进入文件,配置--编译--安装
#创建nginx用户
COPY php.ini    /usr/local/php/lib/php.ini
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY www.conf /usr/local/php/etc/php-fpm.d/www.conf
#将三个配置文件传输到镜像中FROM centos:7
RUN yum -y install  gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel gcc gcc-c++ make pcre-develgcc gcc-c++ make pcre-devel && \
yum clean all && \
useradd -M -s /sbin/nologin nginx
COPY --from=0 /usr/local/php /usr/local/php
EXPOSE 9000
#暴露9000端口
CMD [ "/usr/local/php/sbin/php-fpm", "-F" ]
#启动

三、基于上次的mysql的Dockerfile修改做多级构建

FROM centos:7
#基于centos7镜像
MAINTAINER this is mysql image <lxy>
#注释信息
ADD mysql-boost-5.7.44.tar.gz /opt/
#将安装包和配置文件传输到镜像中
RUN yum -y install make gcc gcc-c++ ncurses ncurses-devel bison cmake openssl-devel && \yum clean all && \cd /opt/mysql-5.7.44/ && \cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j 2 && make install
#依次安装依赖环境,注意新版本必须要openssl环境,注意提示报错查看
#清理yum缓存
#进入mysql解压包中,完成cmake--编译--安装
FROM centos:7
COPY --from=0 /usr/local/mysql /usr/local/mysql
COPY my.cnf /etc/my.cnf
RUN useradd -M -s /sbin/nologin  mysql && \chown mysql:mysql /etc/my.cnf && \chown -R mysql:mysql /usr/local/mysql/ &&\/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#创建一个mysql用户
#修改配置文件的权限
#修改安装目录的权限
#直接用命令启动mysql
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#配置环境变量
EXPOSE 3306
#暴露端口
CMD ["/usr/local/mysql/bin/mysqld"]
#设置默认启动命令

 

基于以上三个镜像构建

 

四、镜像体积是不是越小越好?为什么要缩减镜像体积?

核心:降本增效以及安全

容器是镜像运行起来的实例,容器是宿主机的一个进程,那么肯定是镜像越小越好

  • 镜像越小说明占用宿主机的磁盘、内存资源越少,节约资源;
  • 镜像越小说明需要处理的文件越少,构建越快,提高效率;
  • 镜像越小,那么可以被攻击的面越小,就越安全。

五、缩小镜像体积的方法有哪些?

1)尽量使用体积小的基础镜像,比如alpine,这是专门为容器创建的;

2)尽量减少dockerfile的指令,因为每一条指令对应一层文件系统;(镜像是一层一层文件系统叠加的整体文件系统,对外展现为一个整体);

3)RUN指令的最后可以清理一下yum缓存,清理一下安装包等;

4)COPY尽量放在RUN后面,docker可以更好使用缓存功能;

5)使用.dockerignore文件,将不复制的文件定义在文件中;

6)容器镜像里一般只运行单个应用,这样体积更小,也更好管理;

7)使用多阶段构建;

 FROM 第一构建阶段的基础镜像 as 别名
....
FROM 第二构建阶段的基础镜像
COPY --from=别名|阶段ID(第一阶段为0)  第一阶段构建的文件|目录  当前阶段的路径
....
CMD|ENTRYPOINT 指定启动命令

在mysql镜像构建过程中的报错

 No space left on device
表示磁盘空间不足,当前是虚拟机测试环境,虚拟机只给了40G,没想到报错,也查看挂载点使用量,确实是磁盘空间不够了。这个时候直接重新换一台主机太难受了,然后通过逻辑卷扩容实现的

 

相关文章:

【云原生】Docker基于Dockerfile多级构建,实现缩小镜像体积

目录 一、基于上次的nginx的Dockerfile做多级构建 二、基于上次的php的Dockerfile修改做多级构建 三、基于上次的mysql的Dockerfile修改做多级构建 基于以上三个镜像构建 四、镜像体积是不是越小越好&#xff1f;为什么要缩减镜像体积&#xff1f; 五、缩小镜像体积的方法…...

第七十一周周报

学习目标&#xff1a; 一、实验 二、小程序 学习时间&#xff1a; 2024.1.20-2024.1.26 学习产出&#xff1a; 一、小程序 这周花了两天根据陈勇和纪行之的代码优化了小程序的代码 二、实验 根据stylegan2仓库的redeme文件重新跑了stylegan2和diffusion-stylegan2 DV…...

绿色制造的行业标杆OEKO-TEX STeP认证

STeP是“OEKO-TEX国际环保纺织协会”推出的一个独立的第三方认证体系。STeP全称Sustainable Textile & Leather Production&#xff08;可持续纺织和皮革生产&#xff09;&#xff0c;是面向纺织和皮革供应链中环保且负有社会责任的生产工厂推出的透明认证体系。 STeP认证的…...

第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

文章目录 3.1 函数&#xff1a;编写你的代码乐曲3.1.1 什么是函数&#xff1f;3.1.2 如何定义函数&#xff1f;3.1.3 如何调用函数&#xff1f;3.1.4 函数的返回值3.1.5 函数的文档字符串3.1.6 默认参数值3.1.7 可变数量的参数3.1.8 局部变量和全局变量3.1.9 递归函数 3.2 模块…...

网络安全产品之认识漏洞扫描设备

文章目录 一、什么是漏洞扫描设备二、漏洞扫描设备的主要功能三、漏洞扫描设备的主要技术四、漏洞扫描设备的主要类型五、漏洞扫描设备的使用方式六、漏洞扫描设备如何与其他安全设备联动七、漏洞扫描设备的应用场景 漏洞是指在硬件、软件、协议的具体实现或系统安全策略上存在…...

Hadoop增加新节点环境配置(自用)

完成Hadoop集群增添一个新的节点配置&#xff08;文中命名为&#xff09;Hadoop106&#xff0c;没有进行继续为该节点分配身份职能的步骤 1.在VMware中安装CentOS 7 新建虚拟机 1.⾸先我们创建⼀个新的虚拟机&#xff0c;也可以点⽂件-新建虚拟机。 2.选择⾃定义&#xff0c…...

Apache Shiro 安全框架

前言 Apache Shiro 是一个强大且容易使用的Java安全矿建&#xff0c;执行身份验证&#xff0c;授权&#xff0c;密码和会话管理。使用Shiro的易于理解的API您可以快速轻松的获得任何应用程序直到大的项目。 一丶什么是Shiro 1.Shiro是什么 Apache Shiro是一个强大且易于使用…...

防火墙的NAT

目录 1. NAT 概念解析 2. 配置NAT策略&#xff1a; 1. NAT 概念解析 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多的NAPT 服务器映射 源NAT --- 基于源IP地址进行转换。我们之前接过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属…...

Java基础进阶03-注解和单元测试

目录 一、注解 1.概述 2.作用 3.自定义注解 &#xff08;1&#xff09;格式 &#xff08;2&#xff09;使用 &#xff08;3&#xff09;练习 4.元注解 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;常见元注解 &#xff08;3&#xff09;Target &#x…...

Mac+Android Studio配置 Flutter环境

Fluttrer中文下载官网 Flutter下载官网 1、环境变量 .zshrc #Flutter export PUB_HOSTED_URL"https://pub.flutter-io.cn" export FLUTTER_STORAGE_BASE_URL"https://storage.flutter-io.cn" export FLUTTER_HOME/Users/leon/Flutter/flutter_3_10_4/f…...

架构整洁之道-设计原则

4 设计原则 通常来说&#xff0c;要想构建一个好的软件系统&#xff0c;应该从写整洁的代码开始做起。这就是SOLID设计原则所要解决的问题。 SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类&#xff0c;以及如何将这些类链接起来成为程序。请注意&#xff0c;这里…...

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表&#xff0c;特殊之处在于他只允许在表的前端(front)进行删除操作&#xff0c;而在表的后端(rear)进行插入操作。和栈一样&#xff0c;队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾&#xff0c;进行删除操作的…...

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹&#xff0c;找到对应容器的位置&#xff1a; docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话&#xff0c;可能会出现权限…...

C语言实现归并排序算法(附带源代码)

归并排序 把数据分为两段&#xff0c;从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 动态效果过程演示&#xff1a; 归并排序&#xff08;Merge Sort&#xff09;是一种分治算法&#xff0c;它将一个数组分为两个子数组&#xff0c;分别对这两个…...

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…...

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…...

数学建模-------误差来源以及误差分析

绝对误差&#xff1a;精确值-近似值&#xff1b; 举个例子&#xff1a;从A到B&#xff0c;应该有73千米&#xff0c;但是我们近似成了70千米&#xff1b;从C到D&#xff0c;应该是1373千米&#xff0c;我们近似成了1370千米&#xff0c;如果使用绝对误差&#xff0c;结果都是3…...

Arduino和MPLAB X 开发STM32F103和PIC16F15376

要点&#xff1a; 使用Arduino开发STM32F103&#xff08;Blue Pill&#xff09;&#xff0c;MPLAB X 开发PIC16F15376&#xff08;Curiosity Nano&#xff09;C/C嵌入式开发ESP32(Arduino、ESP-IDF)和STM32实时操作系统FreeRTOS STM32使用FreeRTOS示例 在使用 FreeRTOS 时&a…...

手机操作系统Android

▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发&#xff0c;它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备&#xff0c;如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机&#xff0c;以后Android逐渐扩展到平板计算机、电视、…...

2024年,你是否还在迷茫?

2024年&#xff0c;你是否还在迷茫&#xff1f; 别担心&#xff01;鸿蒙来了&#xff0c;这个未来技术的制高点&#xff0c;为你提供了答案&#xff01; 诸多大厂疯抢、24年预计鸿蒙相关的岗位需求将达到百万级、就业均薪达到19K&#xff0c;全国高校开课…… 种种现象都在表…...

工程师着装文化变迁:从安全规范到效率优化

1. 项目概述&#xff1a;从“着装规范”到工程师文化观察那天早上&#xff0c;我像往常一样&#xff0c;准备去马萨诸塞州纳蒂克的MathWorks公司拜访。出门前&#xff0c;我习惯性地套上了长裤。七月的波士顿&#xff0c;夏天终于姗姗来迟&#xff0c;气温宜人&#xff0c;其实…...

Claude集成Spring Boot全链路实践:从零搭建智能API网关的7步标准化流程

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude集成Spring Boot全链路实践&#xff1a;从零搭建智能API网关的7步标准化流程 环境准备与依赖声明 确保 JDK 17、Maven 3.8 和 Spring Boot 3.2.x 基础环境就绪。在 pom.xml 中引入 Claude 官方…...

React Native跨平台AI聊天应用开发实战:架构设计与性能优化

1. 项目概述&#xff1a;一个全功能的跨平台AI聊天伴侣如果你和我一样&#xff0c;既是移动端开发者&#xff0c;又是AI应用的深度用户&#xff0c;那么你肯定经历过这样的困境&#xff1a;想在手机上随时随地、流畅地和ChatGPT对话&#xff0c;却发现官方App要么功能受限&…...

Docker Compose 镜像检测脚本(支持自动扫描 + 手动输入 YAML)

在日常运维中&#xff0c;经常会遇到这样一个问题&#xff1a; docker-compose 文件里定义了很多镜像&#xff0c;但本地是否已经存在不清楚 如果一个个 docker pull 或 docker images 去对比&#xff0c;会非常低效。 因此我们可以写一个脚本&#xff0c;自动解析 docker-com…...

使用Taotoken后模型API调用的延迟与稳定性观测体验分享

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后模型API调用的延迟与稳定性观测体验分享 作为一名日常需要与多种大模型API打交道的开发者&#xff0c;模型服务的稳…...

AI应用着陆页模板:快速构建专业产品门户的实战指南

1. 项目概述&#xff1a;一个面向AI应用落地的着陆页模板 最近在折腾AI应用开发的朋友&#xff0c;估计都遇到过同一个问题&#xff1a;模型和算法好不容易调好了&#xff0c;后端API也搭起来了&#xff0c;但一到“怎么让用户用起来”这一步&#xff0c;就卡壳了。尤其是那个…...

京东自动评价工具:3分钟解决购物评价难题的智能助手

京东自动评价工具&#xff1a;3分钟解决购物评价难题的智能助手 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为购物后的评价烦恼吗&#xff1f;每次收到京东的"待评价"提醒&…...

图解人工智能(12)自动做化学实验的机器

近年来&#xff0c;人工智能和传统科学的结合备受瞩目。2019年&#xff0c;英国利物浦大学在《自然》杂志发表论文&#xff0c;介绍了一种可以自动做化学实验的机器人。查找相关资料&#xff0c;并讨论一下类似的工作能给人类社会带来怎样的变革。首先&#xff0c;实验人员的培…...

为ae做片段视频项目配置专属AI模型并控制成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为AE做片段视频项目配置专属AI模型并控制成本 对于小型视频工作室或独立制作人而言&#xff0c;在After Effects等工具中处理大量视…...

星际软件开发:为火星殖民地编写第一批代码

一、引言&#xff1a;当测试左移到大气层之外2041年&#xff0c;第一批火星殖民者即将启程。他们携带的不仅是氧气和速食&#xff0c;还有一座预装在密封舱里的微型数据中心。在这片红色荒漠上&#xff0c;代码将比氧气更早醒来——生命维持系统的控制逻辑、通讯中继的协议栈、…...