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

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


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创建容器并运行
相关文章
|
5月前
|
前端开发 关系型数据库 MySQL
IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】
IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】
|
1月前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
103 2
|
4月前
|
存储 Serverless 对象存储
函数计算产品使用问题之项目打包为docker镜像,该如何部署上去
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
Java 应用服务中间件 Docker
【Docker】部署启动java项目
【Docker】部署启动java项目
177 2
|
12月前
|
JavaScript 前端开发 Go
Docker 入门:如何打包、部署并运行你的应用
Docker 入门:如何打包、部署并运行你的应用
1388 0
|
消息中间件 JavaScript 安全
使用 Dockerfile 构建生产环境镜像
1202 年了,如果你连 Docker 都不知道是什么,我建议买一本书看看——或者谷歌一下,博客已经写烂了。为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大量的坑……
194 3
|
移动开发 前端开发 Java
Docker——使用Dockerfile构建SpringBoot项目(打包 & 部署 & 运行)
Docker——使用Dockerfile构建SpringBoot项目(打包 & 部署 & 运行)
2079 0
Docker——使用Dockerfile构建SpringBoot项目(打包 & 部署 & 运行)
|
Ubuntu 应用服务中间件 Shell
认识 Dockerfile 文件之镜像构建
了解 Dockerfile 指令语法并熟练掌握,如何编写 Dockerfile 文件来定制一个镜像。
252 1
认识 Dockerfile 文件之镜像构建
|
jenkins Java 持续交付
jenkins-CICD系列之-jenkins 打包maven项目并且构建镜像
使用jenkis 直接在本地机器上构建maven镜像
|
弹性计算 Java jenkins
Gradle从0入门到实战系列【十】集成Dockerfile构建Docker镜像
在工作中,我们会将SpringBoot程序打包成Docker镜像,这就需要在Gradle中配置Dockerfile构建程序,并且能将打包后的镜像部署并启动为一个容器,Gradle的插件能够帮我们完成这件事
1161 0
Gradle从0入门到实战系列【十】集成Dockerfile构建Docker镜像
下一篇
无影云桌面