[docker] 利用Dockerfile多级构建缩减镜像大小

一、nginx

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

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

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)使用多阶段构建;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是DDOS流量攻击,DDoS防护安全方案

随着互联网的发展普及&#xff0c;云计算成新趋势&#xff0c;人们对生活方式逐渐发生改变的同时&#xff0c;随之而来的网络安全威胁也日益严重&#xff01; 目前在网络安全方面&#xff0c;网络攻击是最主要的威胁之一&#xff0c;其中DDoS攻击是目前最为常见的网络攻击手段…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m&#xff0c;为什么如此之大额。用studio打开后发现都是c不同的pu架构。 2.解决办法 增加ndk配置&#xff0c;不选配置那么多的cpu结构&#xff0c;根据自己需要调整。 defaultConfig { applicationId "com.matt.linphoneca…

2023美赛A题之Lotka-Volterra【完整思路+代码】

这是2023年的成功&#xff0c;考虑到曾经付费用户的负责&#xff0c;2024年可以发出来了。去年我辅导队伍数量&#xff1a;15&#xff0c;获奖M为主&#xff0c;个别F&#xff0c;H&#xff0c;零S。言归正传&#xff0c;这里我开始分享去年的方案。由于时间久远&#xff0c;我…

FPGA——芯片手册学习(AD7606)

芯片手册学习&#xff08;AD7606&#xff09; 芯片封装图引脚功能图总结要操作的端口芯片时序 芯片封装图 引脚功能图 总结要操作的端口 6 PAR/SER/BYTE/ SEL :并行、串行、字节选择&#xff0c;我们使用并行&#xff0c;设置为0 7 STBY:睡眠控制&#xff0c;0电平睡眠 9 10 C…

8-小程序数据promise化、共享、分包、自定义tabbar

小程序API Promise化 wx.requet 官网入口 默认情况下&#xff0c;小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…

银行数据仓库体系实践(14)--数据应用之内部报表及数据分析

在银行日常经营中&#xff0c;每个部门、分支行随时随地都需要进行数据统计和分析&#xff0c;才能对银行当前业务状况及时了解&#xff0c;以进行后续经营策略、营销活动、风险策略的调整和决策。那在平时进行数据分析时除了各数据应用系统&#xff08;如各类监管报表系统、财…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为&#xff1a; 运行效果为&#xff1a; from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

Android悬浮窗实现步骤详解

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

基于springboot招生管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括招生管理系统的网络应用&#xff0c;在外国招生管理系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。招生管理系统具有招生公告信息管理功能的选择…

三款精选数字孪生产品大比拼

作为一名数据可视化领域的资深用户&#xff0c;我接触过众多数据可视化产品。本文将介绍三款备受关注的数据可视化工具&#xff0c;并对它们进行详细的比较。 首先&#xff0c;让我们了解一下数据可视化产品的核心价值。在信息爆炸的时代&#xff0c;数据可视化成为快速理解复…

Kubernetes k8s

Kubernetes k8s 一个开源的容器编排引擎&#xff0c;用来对容器化应用进行自动化部署、 扩缩和管理。 从架构设计层面&#xff0c;k8s能很好的解决可用性&#xff0c;伸缩性&#xff1b;从部署运维层面&#xff0c;服务部署&#xff0c;服务监控&#xff0c;应用扩容和故障处…

C++——特殊类

特殊类 文章目录 特殊类一、请设计一个类&#xff0c;不能被拷贝二、请设计一个类&#xff0c;只能在堆上创建对象方案一&#xff1a;析构函数私有化方案二&#xff1a;构造函数私有化 三、请设计一个类&#xff0c;只能在栈上创建对象四、请设计一个类&#xff0c;不能被继承五…

互联网加竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

初学者在Python中的基本图像处理库 - OpenCV和imutils

处理图像处理和操作的最常用的库之一是 Python 的 OpenCV。对于图像分类、目标检测或光学字符识别&#xff0c;在人工智能领域与图像相关的任何工作大多数时候都需要某种形式的图像处理和操作。 在本教程中&#xff0c;我们将专注于 OpenCV 的一些基本功能。这些功能基础且有时…

tcpdump在手机上的使用

首先手机得root才可以&#xff0c;主要分析手机与手机的通信协议 我使用的是一加9pro&#xff0c; root方法参考一加全能盒子、一加全能工具箱官方网站——大侠阿木 (daxiaamu.com)https://optool.daxiaamu.com/index.php tcpdump&#xff0c;要安装在/data/local/tmp下要arm6…

ES(ElasticSearch)技术栈简介

ElasticSearch简介 Elaticsearch&#xff0c;简称为es&#xff0c; es是一个基于apache开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。es也使用Ja…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归&#xff1a; 举例&#xff1a;蝉&#xff08;昆虫物种&…

深度学习(7)--卷积神经网络项目详解

一.项目介绍&#xff1a; 用Keras工具包搭建训练自己的一个卷积神经网络(Simple_VGGNet&#xff0c;简单版VGGNet)&#xff0c;用来识别猫/狗/羊三种图片。 数据集&#xff1a; 二.卷积神经网络构造 查看API文档 Convolution layers (keras.io)https://keras.io/api/layers/…

氢气传感器报警值:守护实验室安全的隐形卫士

随着科技的发展&#xff0c;我们的生活变得越来越便捷&#xff0c;但是与此同时&#xff0c;安全问题也日益凸显。其中&#xff0c;氢气作为一种清洁能源&#xff0c;被广泛应用于各个领域&#xff0c;但是如果不加以控制&#xff0c;氢气泄漏也可能带来严重的安全隐患。因此&a…

burp靶场--xss上篇【1-15】

burp靶场–xss https://portswigger.net/web-security/cross-site-scripting 1. 什么是xss: 跨站脚本 (XSS) 是一种通常出现在 Web 应用程序中的计算机安全漏洞。XSS 允许攻击者将恶意代码注入网站&#xff0c;然后在访问该网站的任何人的浏览器中执行该代码。这可能允许攻击…