【Dockerfile】将自己的项目构建成镜像部署运行

目录

1.Dockerfile

2.镜像结构

3.Dockerfile语法

4.构建Java项目

5.基于Java8构建项目

1.Dockerfile

常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

而要自定义镜像,就必须先了解镜像的结构才行。

2.镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

我们以MySQL为例,来看看镜像的组成结构:

简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等

组合,然后编写好启动脚本打包在一起形成的文件。

我们要构建镜像,其实就是实现上述打包的过程。  

3.Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安

装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操

作来构建镜像。每一个指令都会形成一层Layer。

更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs  

4.构建Java项目

需求:基于Ubuntu镜像构建一个新镜像,运行一个java项目

  • 步骤1:新建一个空文件夹docker-demo

  • 步骤2:拷贝jdk、dockerfile、jar包到docker-demo

Dockerfile内容如下:

# 指定基础镜像
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# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
  •  步骤3:运行命令 构建镜像
docker build -t javaweb:1.0 
  • 步骤4:运行容器 并且访问
docker run --name web -p 8090:8090 -d javaweb:1.0

 

5.基于Java8构建项目

虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。

例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。

需求:基于java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

  • ① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  • ② 拷贝课前资料提供的docker-demo.jar到这个目录中

  • ③ 编写Dockerfile文件:

    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

      内容如下:

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar
  • ④ 使用docker build命令构建镜像

  • ⑤ 使用docker run创建容器并运行

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在VMcentos7上用docker部署SELKS(IDS系统)

基本安装所需环境: 2核(至少)10 GB 可用 RAM(经测试,4GB也能运行但会卡)至少 30 GB 可用磁盘空间(实际磁盘占用情况主要取决于规则数量和网络流量)。建议使用 200GB SSD 级别。git,…

【Linux】:信号在内核里的处理

信号的发送和保存 一.内核中的信号处理二.信号集操作函数1.一些信号函数2.sigprocmask3.sigpending4.写代码 三.信号在什么时候处理的四.再谈地址空间 一.内核中的信号处理 1.实际执行信号的处理动作称为信号递达(Delivery )2.信号从产生到递达之间的状态,称为信号未决(Pending…

深度学习18

卷积层 查看每个数据 使用tensorboard查看 池化层 使用数据集进行训练 创建实例,使用tensorboard进行显示 最大池化保留了图片信息,神经网络训练的数据量大大减小,可以加快训练 非线性激活 非线性激活为神经网络加入了一些非线性的特质…

【密码学】【安全多方计算】浅析隐私求交PSI

文章目录 隐私求交的定义隐私求交方案介绍1. 基于DH的PSI方案2. 基于OT的PSI方案3.基于OPRF的PSI方案 总结 隐私求交的定义 隐私集合求交使得持有数据参与方通过计算得到集合的交集数据,而不泄露任何交集以外的数据信息。 隐私求交方案介绍 1. 基于DH的PSI方案 …

linux查看emmc分区信息(10种方法 )

目录 ## 1 emmc ## 2 uboot查看 ## 3 kernel查看 方法1 方法2 方法3 方法4 方法5 方法6 方法7 方法8 方法9 方法10 ## 1 emmc 我们要说的是,User Data Partition中的再分区 可简化为 ## 2 uboot查看 u-boot> mmc partPartition Map for MMC device…

(Linux2.6内核)进程调度队列与切换

个人主页:Lei宝啊 愿所有美好如期而遇 我们首先来了解几个概念 1. 进程在CPU上运行的时候,一定要运行完才行吗?答案是否定的,我们大部分的操作系统,主流就是分时操作系统,即基于时间片进程轮转执行的。 …

Ubuntu18.04磁盘取证-中难度篇

涉及的镜像文件: sdb.vhd uac.tar ubuntu.20211208.mem 需要利用的工具: volatility3 volatility2.6.1 FTK/Autopsy Strings 题干 容器是一个Ubuntu Linux 蜜罐,用来观察利用 CVE-2021-41773 的漏洞攻击者想要做什么。 您将看到一个 cr…

SIT65HVD75,可替代SN65HVD75,3.0~5.5V 供电,ESD 15kV HBM,20Mbps 半双工 RS485/RS422 收发器

SIT65HVD75 是一款 3.0V~5.5V 电源供电、总线端口 ESD 保护能力 HBM 达到 15kV 以上、 总线耐压范围达到 15V 、半双工、低功耗,功能完全满足 TIA/EIA-485 标准要求的 RS-485 收发 器。 SIT65HVD75 包括一个驱动器和一个接收器,两者均可…

【Java学习笔记】72 - 满汉楼 - 餐饮管理系统

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter26 一、需求说明 满汉楼项目功能多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整: 1.去掉界面和事件处理(工作中使用很少),使…

小程序如何进行版本回退

当商家决定回退小程序版本时,可能是因为新版本出现了一些问题或者不符合预期,需要恢复到之前的稳定版本。下面具体介绍怎么回退小程序的版本。 在小程序管理员后台->版本设置处,点击版本回退。确认后,小程序会回退到上一次的版…

视频封面:视频图片提取技巧,从指定时长中捕捉需求的图片

在当今的数字时代,视频已成为日常生活中不可或缺的一部分。无论是社交媒体、博客,视频都发挥着重要的作用。而一个吸引的视频封面往往能吸引更多的观众点击观看,选择清晰度高、色彩鲜艳且能吸引人的图片。同时,确保图片与视频内容…

零基础可以学编程吗,不懂英语怎么学编程,中文编程工具实例

零基础可以学编程吗,不懂英语怎么学编程,中文编程工具实例 上图是中文编程工具界面、标尺实例。 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件&#x…