Docker-自定义镜像

news2025/1/18 19:11:04

目录

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 使用我们的镜像

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

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

相关文章

MySQL:数据库中有哪些锁

1、全局锁 加上全局锁后整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞: 对数据的增删改操作,比如 insert、delete、update等语句;对表结构的更改操作,比如 alter table、drop table 等…

shell脚本一键部署docker

Docker介绍 Docker 是一个开源的平台,用于开发、交付和运行应用程序。它利用容器化技术,可以帮助开发人员更轻松地打包应用程序及其依赖项,并将其部署到任何环境中,无论是开发工作站、数据中心还是云中。以下是 Docker 的一些关键…

mini-spring|基于JDK和Cglib动态代理,实现AOP核心功能

AOP 的核心技术实现主要是动态代理的使用 那么我们就需要先来实现一个可以代理方法的 Proxy,其实代理方法主要是使用到方法拦截器类处理方法的调用 MethodInterceptor#invoke,而不是直接使用 invoke 方法中的入参 Method method 进行 method.invoke(targ…

CleanMyMac X4.14.7永久免费Mac电脑清理和优化软件

CleanMyMac X 是一款功能强大的 Mac 清理和优化软件,适合以下几类人群使用: 需要定期清理和优化 Mac 的用户:随着时间的推移,Mac 设备上可能会积累大量的无用文件、缓存和垃圾,导致系统运行缓慢。CleanMyMac X 的智能扫…

记录第一次使用QT

今晚和舍友准备搞一个QT网盘的项目,我之前也没有用过QT。在舍友的指导下,我安装了QT creator,然后完成了第一次的QT的编译运行,记录一下这激动的感觉(2024-03-07)。 使用qmake进行的编译。qDebug进行输出调试hello qt…

github一定要把github-recovery-codes.txt保存好,多备份

之前github让必须2FA,使用了Authy Desktop Setup 2.4.2.exe,但是现在authy不能用了,中国的手机号收不到验证码,急的忙了一天没想到好办法,然后给github发过去消息,反馈的信息如下: 还好没换电脑…

论文笔记 - 基于振动信号的减速器故障诊断方法

1.论文摘要 基于振动信号的减速器故障诊断方法, 沈晴,《起重运输机械》,2018 原作者联系方式: shenqing@zmpc.com 这篇文章包含了一个从工程到数据处理和故障定位的完整过程。是一篇综述文档。它介绍了机械设备常见的三类故障(轴,齿轮、轴承)的故障特征,并在一个故障追…

获取别人店铺的所有商品API接口

使用淘宝淘口令接口的步骤通常包括: 注册成为淘宝开放平台的开发者:在淘宝开放平台网站上注册账号并完成认证。 创建应用以获取API密钥:在您的开发者控制台中创建一个应用,并获取用于API调用的密钥,如Client ID和Clie…

Flink:Temporal Table 的两种实现方式 Temporal Table DDL 和 Temporal Table Function

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

直播预告|小白开箱: 云数据库在五朵云上的评测

3 月 7 日,周四晚上 19:00-20:30 由明说三人行组织,邀请了 NineData 国际总经理(GM) Ni Demai、云猿生数据 CTO & 联合创始人子嘉,和《明说三人行》创始人 &主持人明叔,共同围绕《小白开箱: 云数据库在五朵云上的评…

vim 中 命令模式下 常见指令

首先,Vim 是一款常用的文本编辑器,具有强大的功能和灵活的操作方式。 vim 分为 三种模式: 命令模式、底行模式、插入模式。 在使用 VIM 编译器 进入文件时,初始默认是命令模式,三种模式转换如下图: 下列使用 Vim 编译…

《探索自动驾驶技术的前景与挑战》

自动驾驶技术,作为现代科技的一大突破,正逐渐改变着我们的交通方式、生活方式以及整个社会结构。本文将围绕自动驾驶技术的现状、优势、局限性以及未来发展趋势展开探讨。 自动驾驶技术的现状概述 自动驾驶技术作为当今科技领域的一项前沿技术,已经取得了巨大的进展并在不同…

扭蛋机小程序开发,企业提升利润的“神器”

扭蛋机在当下消费市场也是比较常见的,价格较低,性价比高,并且具有非常高的收藏价值,能够吸引到各个年龄层的消费者。 扭蛋机与盲盒一样,具有未知性和神秘性,刺激着消费者的购买欲望。此外,扭蛋…

Spring之Bean详解

Spring之Bean详解 什么是Bean? 在Spring中,Bean是指由Spring容器管理的对象,这些对象是由Spring IoC容器负责创建、组装和管理的。Bean可以是Java类的实例,也可以是其他Spring管理的组件,例如数据源、事务管理器等。…

深空通信DTN总结

这里写自定义目录标题 A novel Federated Computation approach for Artificial Intelligence applications in Delay and Disruption Tolerant NetworksabstractintroductionDELAY AND DISRUPTION TOLERANT NETWORKS联邦计算用于容忍延迟和干扰的网络的联合学习框架DTN-ML Orc…

MySQL 学习笔记(基础篇 Day2)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. MySQL 学习笔记(基础篇 Day1) 目录 3 函数 3.1 字符串函数 3…

关于springboot一个接口请求后,主动取消后,后端是否还在跑

1、最近在思考一个问题,如果一个springboot的请求的接口比较耗时,中途中断该请求后,则后端服务是否会终止该线程的处理,于是写了一个demo RequestMapping(value "/test", method RequestMethod.GET)public BasicResul…

响应人大代表王旭的提议:996程序员也要每天一节体育课

哈喽,我是熊子峰,38岁程序员,正在结合AI写作进行自我成长,穿越程序员的中年危机,这是第 69 篇日更文章。 每天一节体育课 今天,看到一条新闻,人大代表王旭提议中小学生每天应该有一节体育课&am…

docker安装和使用kafka

1. 启动zookeeper Kafka依赖zookeeper, 首先安装zookeeper -p:设置映射端口(默认2181) docker run --name zookeeper \--network app-tier \-e ALLOW_ANONYMOUS_LOGINyes \--restartalways \-d bitnami/zookeeper:latest2. 启动kafka docker…

Vscode 使用SSH远程连接树莓派的教程(解决卡在Downloading with wget)

配置Vscode Remote SSH 安装OpenSSH 打开Windows开始页面,直接进行搜索PowerShell,打开第一个Windows PowerShell,点击以管理员身份运行 输入指令 Get-WindowsCapability -Online | ? Name -like OpenSSH* 我是已经安装好了,…