通过Dockerfile构建镜像

news2024/11/14 12:15:04

案例一:

使用Dockerfile构建tomcat镜像

cd /opt
mkdir tomcat
cd tomcat/
上传tomcat所需的依赖包
使用tar xf 解压三个压缩包
 
vim Dockerfile
FROM centos:7
LABEL function="tomcat image" author="tc" createtime="2024-07-16"
 
ADD jdk-8u391-linux-x64.tar.gz /opt/
ENV JAVA_HOME=/opt/jdk1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
ADD apache-tomcat-9.0.16.tar.gz /opt/
EXPOSE 8080
CMD ["/opt/apache-tomcat-9.0.16/bin/catalina.sh", "run"]
 
 
docker build -t tomcat:9.0 .   #构建镜像
docker images   #查看镜像
docker run -d --name tomcat1 -p 666:8080 tomcat:9.0   #启动容器

 

登录网页查看 

通过ARG传参构建不同版本的tomcat

以上述构建的tomcat镜像为基础

cd /opt/tomcat
vim Dockerfile
 
FROM centos:7
LABEL function="tomcat image" author="tc" createtime="2024-07-16"
 
ADD jdk-8u391-linux-x64.tar.gz /opt/
ENV JAVA_HOME=/opt/jdk1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
ARG VER
ADD $VER /opt/tomcat
EXPOSE 8080
CMD ["/opt/tomcat/bin/catalina.sh", "run"]
 
 
docker build --build-arg VER=apache-tomcat-8.5.16 -t tomcat:8.5 . #构建8.5版本tomcat镜像
docker build --build-arg VER=apache-tomcat-9.0.16 -t tomcat:9.0 . #构建9.0版本tomcat镜像

 

验证:

案例二:缩小镜像的体积

方法一:使用较小体积的基础镜像

以上述实验为基础

cd /opt/tomcat
mv Dockerfile Dockerfile.bak
 
vim Dockerfile
FROM openjdk:8-jdk-alpine
ARG VER
COPY $VER /opt/tomcat/
CMD ["/opt/tomcat/bin/catalina.sh", "run"]
 
 
docker build --build-arg VER=apache-tomcat-9.0.16 -t tomcat:9 . #构建镜像
docker run -d --name a3 -p 1313:8080 tomcat:9

测试访问

方法二:多级构建减少体积

1、先源码编译nginx

cd /opt
mkdir nginx_bian
cd nginx_bian/
上传nginx压缩包
cd /etc/yum.repos.d/
cp CentOS-Base.repo /opt/nginx_bian/
 
cd /opt/nginx_bian/
vim Dockerfile
FROM centos:7
 
LABEL author="ikun" createtim="2024-07-15" usage="nginx image"
 
ADD nginx-1.26.1.tar.gz /opt/
ADD CentOS-Base.repo /etc/yum.repos.d/
 
RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make && \
    useradd -M -s /sbin/nologin nginx && \
    cd /opt/nginx-1.26.1/ && \
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && \
    make && \
    make install
 
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
 
 
docker build -t nginxsrc:v1 .
 
docker run -id nginx:v1
docker ps -a
 
cd /opt/nginx
cp -r html /opt/nginx_bian/
 
docker run -id --name aaa -p 123:80 -v /opt/nginx_bian/html/:/usr/local/nginx/html/ nginx:v1
 
docker ps -a

 

 2、多级构建减小体积

vim Dockerfile
FROM centos:7 as first   #为第一级构建镜像设置别名
 
ADD nginx-1.26.1.tar.gz /opt/
ADD CentOS-Base.repo /etc/yum.repos.d/
 
RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make && \
    useradd -M -s /sbin/nologin nginx && \
    cd /opt/nginx-1.26.0/ && \
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && \
    make && \
    make install
 
FROM centos:7      #开启第二级构建
COPY --from=first /usr/local/nginx/ /usr/local/nginx/     #copy --from 从其他构建阶级中复制源文件
RUN useradd -M -s /sbin/nologin nginx   #运行用户必要命令
 
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
 
 
 
docker build -t nginx:v2 .
docker images
docker run -d --name mmm -p 80:80 nginx:v2
docker ps -a

 

 浏览器访问测试:http://192.168.10.101:10

总结:

如何缩小镜像的体积大小?

1)尽可能的使用较小体积的基础镜像(推荐使用 alpine 镜像)
2)尽可能的减少Dockerfile中的指令数量,从而减少镜像的层数
3)在RUN指令结尾添加清空安装软件的缓存和软件包的命令
4)使用 .dockerignore 文件,添加不需要复制到镜像里的文件名或子目录名
5)容器镜像里一般只运行单个应用
6)使用多阶段构建的方法           
FROM 第一构建阶段的基础镜像 as 阶段别名      #在第一阶段,安装依赖项并构建项目
....  
FROM 第二构建阶段的基础镜像                  #在第二阶段,复制上一阶段构建产物的文件或目录,并使用它来运行应用程序,这样最终的镜像中就不会有不必要的依赖和代码
COPY --from=第一构建阶段的别名  第一构建阶段的项目文件或目录  当前阶段的路径
....
CMD或ENTRYPOINT 指定容器启动命令     

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

橙芯创想:香橙派AIPRO解锁升腾LLM与Stable Diffusion的创意密码

文章目录 引言 一. 香橙派AI PRO配置以及展示优秀的扩展能力实物展示 二、Ascend-LLM模型部署开机xshell连接香橙派实战运行部署运行结果分析开发版表现 三、Stable Diffusion文生图性能表现 四、体验总结性能噪音便捷性 引言 在科技的浪潮中,一场融合智慧与创意的盛…

AI 和平台工程对云原生演进的影响:将云之旅自动化到光速

2024 年和云原生 AI 技术的曙光标志着计算能力的重大飞跃。我们正在经历一个新时代,人工智能 (AI) 和平台工程融合在一起,改变云计算格局。人工智能现在正在与云计算融合,我们正在经历一个人工智能超越传统界限的时代&…

IDEA实现NPM项目的自打包自发布自部署

目录 前言 正文 操作背景 NPM自发布 Package自发布 NPM部署 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ningbo China&#x1f…

【软件测试】RobotFramework常见问题如何解决 ?

附加-问题解决 1. 执行robot用例的时候提示WebDriverException: Message: invalid argument: cant kill an exited process 查看驱动的log是否是提示 如果是的话,参照第七步安装图形界面 2. jenkins启动后发现打不开jenkins页面的问题解决 打开jenkins页面提…

变频器CE认证如何办理?

随着国际贸易的蓬勃发展,现在越来越多的企业开始将自己的产品销往欧洲市场。然而,要想在欧洲市场上站稳脚跟,产品必须满足一系列的安全和性能标准。其中,CE认证是进入欧洲市场的“通行证”,对于变频器这类电气产品来说…

Java实验4

实验内容 考试题 要求在一个界面内至少显示5道选择题,每道题4个选项。题目从数据库读取。表结构自定义。 另有2个命令按钮,分别为“重新答题”(全部选项及正确答题数清空)和“提交”(计算),在…

2024最新最全MidJourney新手入门教程 参数设置教程

文章目录 MJ的基本使用提示词基本提示高级提示提示说明提示词分类Vary Region多提示分割 MJ 命令blenddescribeinfosettingshorten MJ 参数Aspect Ratios 横纵比Chaos 混乱程度Character Reference 引用图像no 不包含Quality 质量Repeat 重复Seeds 种子Stop 停止Sytle 风格Styl…

W外链创建抖音私信卡片教程,私信卡片跳转微信工具

W外链地址wai.cn 在数字化时代的浪潮中,私域流量的价值愈发凸显,成为企业获取用户、建立品牌忠诚度、提升转化率的关键手段。抖音,作为当下最热门的短视频社交平台之一,其用户基数庞大、互动性强,为企业私域引流提供了…

自己搭建邮件服务器时如何保障数据安全性?

自己搭建邮件服务器的要求?如何正确配置邮件服务器? 自己搭建邮件服务器成为许多企业和个人用户的选择,以实现更高的自主性和定制化需求。下面,AokSend将从几个方面探讨如何在自己搭建邮件服务器的过程中,有效保障数据…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中,精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中,任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象,严重时甚至可能影响整机的性能。因此&#x…

内衣裤洗衣机有必要买吗?五样超卓臻品专业推荐!

在当今繁忙的生活中,内衣洗衣机已成为我们日常生活中不可或缺的家电。但是,面对市场上众多品牌的内衣洗衣机,那么,到底内衣洗衣机哪个牌子好?本次我将在这篇文章中探讨内衣洗衣机的选购策略,以帮助大家找到…

软件测试好就业吗?软件测试行业的就业前景分析

一、软件测试的重要性 在当今信息化的时代,软件产品的质量至关重要。随着软件行业的蓬勃发展,软件测试作为保障软件质量的关键环节,其重要性日益凸显。软件测试工程师的角色不再仅仅局限于找出软件的缺陷,他们更是软件质量保障的守…

Adobe XD中文设置指南:专业设计师的现场解答

Adobe XD是世界领先的在线合作UI设计工具。它摆脱了Sketch、Figma等传统设计软件对设备的依赖,使设计师可以随时随地使用任何设备打开网页浏览器,轻松实现跨平台、跨时空的设计合作。然后,为了提高国内设计师的使用体验,Adobe XD如…

Django F()函数

F()函数的作用 F()函数在Django中是一个非常强大的工具,主要用于在查询表达式中引用模型的字段。它允许你在数据库层面执行各种操作,而无需将数据加载到Python内存中。这不仅提高了性能,还允许你利用数据库的优化功能。 字段引用 在查询表达…

《藏语翻译通》App功能升级,支持藏文词典在线查单词!iPhone用户推荐使用的藏语学习工具!

《藏语翻译通》App上线了藏文词典查单词功能,该功能可以帮助你更有效地学习藏语,以及掌握工作中涉及到的专业术语。本次更新提供了藏汉词典、藏汉大词典、新术语在线查单词功能。 打开App Store搜索关键词:藏文词典 下载这个官方软件 点击首…

如何理解Spring事务

1 Spring事务是干什么的,解决了什么 Spring事务其实准备来讲叫Spring事务管理,拿mysql来说,事务已在其默认引擎innodb中实现了,我们是通过它提供的sql指令去开启事务、提交/回滚事务。 那么有的疑问是什么呢? 事务不…

企业资源管理的变革:ERP软件的消失与整合型OA系统的崛起

企业资源管理在现代企业运营中起着至关重要的作用。过去,ERP(Enterprise Resource Planning,企业资源计划)系统因其强大的整合能力和广泛的功能性,被誉为企业管理的中枢。然而,随着技术的迅猛发展和企业需求…

黑马头条微服务学习day02-app端文章查看,静态化freemarker,分布式文件系统MinlO

文章目录 app端文章列表需求分析实现思路实现步骤编写mapper文件编写控制器代码 文章详情实现思路FreemarkerminIO app端文章列表 需求分析 实现思路 实现步骤 ArticleHomeDto package com.heima.model.article.dtos;import lombok.Data;import java.util.Date;Data public c…

某oa代码审计

简介 这次是一次网盘搜索找到的代码。原本因为要下载一些资源顺手充了个网盘会员,结果发现意外的发现网盘搜索出来的资源还挺丰富。于是便开始搜索一些源码。。。 然后安装完毕之后进入web目录中,将web目录单独打包出来。 ps: 由于源码貌似是个备份文件…

超详细Python安装教程(包含python解释器和pycharm)

目录 一,安装python解释器 二,安装PyCharm开发工具 一,安装python解释器 下载地址:https://www.python.org/downloads/ 如果是在windows上下载的话,选择Downloads->Windows 我选择了最新版本的64位安装&#xf…