Docker-自定义镜像

目录

1 前言

2 构建java应用的步骤及镜像结构图

2.1 构建步骤

2.2 镜像结构图

3 Dockerfile常用指令

4 Dockerfile的内容举例

4.1 一般形式

4.2 一般形式的优化

5 构建镜像

5.1 指令

5.2 实操

5.2.1 加载jdk镜像(基础镜像)

5.2.2 构建我们的镜像

5.2.3 使用我们的镜像


1 前言

本文参考自黑马程序员,算是学习笔记。

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。具体如下。

2 构建java应用的步骤及镜像结构图

2.1 构建步骤

①准备一个Linux运行环境

②安装JRE并配置环境变量

③拷贝Jar包

④编写运行脚本

2.2 镜像结构图

该图片来自黑马程序员:

3 Dockerfile常用指令

指令说明示例
FROM指定基础镜像FROM centos:7
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录COPY ./jre11.tar.gz /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的,只是一个描述EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

更多详细内容可查看官网:

Dockerfile reference | Docker Docs

4 Dockerfile的内容举例

4.1 一般形式

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

语句解释:

  1. FROM ubuntu:16.04:指定基础镜像为Ubuntu 16.04。

  2. ENV JAVA_DIR=/usr/local:设置环境变量JAVA_DIR/usr/local,表示JDK的安装目录。

  3. COPY ./jdk8.tar.gz $JAVA_DIR/:将本地的jdk8.tar.gz文件复制到容器的/usr/local/目录下。

  4. COPY ./docker-demo.jar /tmp/app.jar:将本地的docker-demo.jar文件复制到容器的/tmp/目录下。

  5. RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8:在容器中执行的命令,解压jdk8.tar.gz文件,并将解压后的目录重命名为java8

  6. ENV JAVA_HOME=$JAVA_DIR/java8:设置环境变量JAVA_HOME/usr/local/java8,指定JDK的安装路径。

  7. ENV PATH=$PATH:$JAVA_HOME/bin:将Java的bin目录添加到系统的PATH环境变量中,以便可以直接运行Java命令。

  8. ENTRYPOINT ["java", "-jar", "/app.jar"]:指定容器启动时执行的默认命令,即运行Java应用程序。这里使用java -jar /app.jar启动/tmp/app.jar中的Java应用程序。

4.2 一般形式的优化

一般形式中存在着许多可以复用的内容,在我们编程的时候,我们经常会将可复用的内容写成一个函数。同理,有人也将Dockerfile的可复用部分打包成了一个基础镜像。因此可以优化如下:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

5 构建镜像

5.1 指令

docker build -t myImage:1.0 .

这个命令中,最后一部分表示在目录中查找名为 Dockerfile 的文件(如果是点则表示当前目录),并使用它来构建(-t)一个名为 myImage 版本号为 1.0(没指定版本号默认latest)的Docker镜像。

5.2 实操

5.2.1 加载jdk镜像(基础镜像)

jdk镜像的百度网盘链接如下:

链接: https://pan.baidu.com/s/1p7jNRQX42cyZ3M4uOaSOMA?pwd=5ew2

提取码: 5ew2

5.2.2 构建我们的镜像

5.2.3 使用我们的镜像

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

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

相关文章

Excel中怎么求排名

使用Rank函数 1.在需要显示排名的单元格内,输入“RANK(数值,数值列表,排序方式)” 2.将“数值”替换为需要计算排名的单元格的地址,例如E2单元格。 3.将“数值列表”替换为排名的数值范围,例…

C++写食堂菜品管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:学校拟开发一套食堂菜品管理系统,以便对菜品和同学们的评价进行管理,其中包含如下信息: 商户:商户名称、柜面位置、电话…… 菜品:菜品编号、菜品名称、价格、所属商户…… 学生:注册账号、昵称、电话…… 食堂里的商户…

ubuntu 20.04 安装 huggingface transformers 环境

1. 安装 cuda 大多数新发布的大语言模型使用了较新的 PyTorch v2.0 版本,Pytorch 官方认为 CUDA 最低版本是 11.8 以及匹配的 GPU 驱动版本。详情见Pytorch官方 如下图: 1.1 下载 cuda cuda 12.1 官方网站: 下载: $wget htt…

答题pk小程序源码技术大解析

答题pk小程序源码解析 在数字化时代,小程序因其便捷性、即用性而受到广泛欢迎。其中,答题pk小程序更是成为了一种寓教于乐的现象。它不仅为用户提供了趣味性的知识竞技平台,还为企业、教育机构等提供了互动营销和知识传播的新途径。本文将对…

异步编程实战:使用C#实现FTP文件下载及超时控制

博客标题: 异步编程实战:使用C#实现FTP文件下载及超时控制 如果你的函数不是async,你仍然可以实现相同的超时功能,但你将不得不依赖更多的同步代码或使用.Result或.GetAwaiter().GetResult()来阻塞等待任务完成,这可能导致死锁的风…

【C语言】Infiniband驱动mlx4_load_one函数

一、中文注释 以下是针对mlx4_load_one函数的主要代码路径的中文注释。该函数是用于加载并初始化Mellanox网络设备的驱动函数。通过注释,可以了解函数在初始化过程中执行的关键步骤。 /* mlx4_load_one函数:用于加载并初始化PCI设备(例如网…

Rust入门:Rust如何调用C静态库的函数

关于Rust调用C,因为接口比较复杂,貌似Rust不打算支持。而对于C函数,则相对支持较好。 如果要研究C/Rust相互关系的话,可以参考: https://docs.rs/cxx/latest/cxx/ Rust ❤️ C 这里只对调用C静态库做一个最简短的介…

安卓部分手机使用webview加载链接后白屏(Android低版本会出现的问题)

前言 大爷:小伙我这手机怎么打开你们呢这个是白屏什么都不显示。 大娘:小伙我这也是打开你们呢这功能,就是一个白屏什么也没有,你们呢的应用不会有病毒吧。 小伙:我的手机也正常; 同事:我的也正…

4.Rust中的所有权(Rust成名绝技)

Rust成名绝技 Rust 之所以能成为万众瞩目的语言,就是因为其内存安全性。在以往,内存安全几乎都是通过 GC 的方式实现,但是 GC 会引来性能、内存占用以及全停顿等问题,在高性能场景、实时性要求高和系统编程上是不可接受的&#x…

seo蜘蛛池的概念!蚂蚁SEO

蜘蛛池是一种特殊的网络营销技术,它的主要作用是吸引搜索引擎爬虫,提高网站的收录和排名,从而增加网站的流量和曝光度。 蚂蚁SEO是一个SEO工具,可以帮助您提高网站权重,吸引更多的搜索引擎爬虫,提高网站的…

idea2023版使用废弃类没有删除线处理方法

idea2023版使用废弃类没有删除线处理方法 新版Idea使用废弃类时,默认是黄色警告处理方法1. 打开file -> setting2. 编辑(Editor) -> 检查(Inspections) -> 搜索Deprecated API usage 新版Idea使用废弃类时,默认是黄色警告 处理方法 1. 打开file -> setting 2. 编…

Igraph入门指南 2

3、图的基本要素——边(Edge|Arc) 图的最本质的内容是一种二元关系,如果给这种二元关系赋予一个方向,就产生了有向图和无向图的分类,在教材中,无向的边叫Edge,有向的边叫Arc,另外,根据两个顶点…

【数据集】MSWEP(多源加权集合降水)再分析数据

MSWEP全球降水数据 数据概述数据下载参考数据概述 MSWEP(Multi-Source Weighted-Ensemble Precipitation)降水数据集是一种高分辨率、全球覆盖的降水数据产品,它融合了多种来源的降水信息,包括卫星遥感数据、雷达观测、地面气象站观测数据以及数值天气预报模型的输出。MSW…

Java基于微信小程序的校园失物招领小程序

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

超分辨率(1)--基于GAN网络实现图像超分辨率重建

目录 一.项目介绍 二.项目流程详解 2.1.数据加载与配置 2.2.构建生成网络 2.3.构建判别网络 2.4.VGG特征提取网络 2.5.损失函数 三.完整代码 四.数据集 五.测试网络 一.项目介绍 超分辨率(Super-Resolution),简称超分&#xff08…

智慧安防视频远程监控平台EasyCVR集成后播放只有一帧画面是什么原因?

智慧安防视频监控平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台可支持的接入协议包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议…

利用GPT开发应用002:Transformer架构及其在LLMs中的作用

文章目录 一、交叉注意力(cross-attention)二、自注意力(self-attention)三、Transformer优势四、Transformer组件五、LLMs演变过程 Transformer架构彻底改变了自然语言处理。它大量采用了名为交叉注意力(cross-attent…

java SSM二手交易网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM厂房管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

【TensorFlow】P1 Google Colab 使用

目录 访问 Google Colab快速切换 (文本/脚本)构建 Google 云开发生态Colab 支持运行 bash 脚本下载 Colab 代码文件为 .py .ipynb 访问 Google Colab Google Colab 需要科学上网,如何科学上网不多赘述。 Google Colab 网址:https://colab.research.goo…

Java面试篇【RabbitMQ】常见面试题(2024最新)

RabbitMQ 1.为什么使用MQ?优点是什么 因为MQ可以异步处理,提高系统吞吐量。 应用解耦,系统之间可以通过消息通信,不关心其他系统的处理。 流量削峰,可以通过消息队列的长度,控制请求量。可以缓解短时间内的高并发请…