前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Dockerfile为SpringBoot应用构建Docker镜像

使用Dockerfile为SpringBoot应用构建Docker镜像

作者头像
macrozheng
发布于 2019-07-22 06:42:16
发布于 2019-07-22 06:42:16
1.2K00
代码可运行
举报
文章被收录于专栏:mall学习教程mall学习教程
运行总次数:0
代码可运行

上次写过一篇使用Maven插件构建Docker镜像 ,讲述了通过docker-maven-plugin来构建docker镜像的方式,此种方式需要依赖自建的Registry镜像仓库。本文将讲述另一种方式,使用Dockerfile来构建docker镜像,此种方式不需要依赖自建的镜像仓库,只需要应用的jar包和一个Dockerfile文件即可。

Dockerfile常用指令

ADD

用于复制文件,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ADD <src> <dest>

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将当前目录下的mall-tiny-docker-file.jar包复制到docker容器的/目录下
ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar

ENTRYPOINT

指定docker容器启动时执行的命令,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ENTRYPOINT ["executable", "param1","param2"...]

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]

ENV

用于设置环境变量,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ENV <key> <value>

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# mysql运行时设置root密码
ENV MYSQL_ROOT_PASSWORD root

EXPOSE

声明需要暴露的端口(只声明不会打开端口),格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXPOSE <port1> <port2> ...

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 声明服务运行在8080端口
EXPOSE 8080

FROM

指定所需依赖的基础镜像,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM <image>:<tag>

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 该镜像需要依赖的java8的镜像
FROM java:8

MAINTAINER

指定维护者的名字,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MAINTAINER <name>

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MAINTAINER macrozheng

RUN

在容器构建过程中执行的命令,我们可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等,格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RUN <command>
RUN ["executable", "param1","param2"...]

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在容器构建过程中需要在/目录下创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'

使用Dockerfile构建SpringBoot应用镜像

编写Dockerfile文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
# 指定维护者的名字
MAINTAINER macrozheng

使用maven打包应用

在IDEA中双击package命令进行打包:

打包成功后展示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ mall-tiny-docker-file ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.749 s
[INFO] Finished at: 2019-06-16T14:11:07+08:00
[INFO] Final Memory: 43M/306M
[INFO] ------------------------------------------------------------------------

将应用jar包及Dockerfile文件上传到linux服务器

在Linux上构建docker镜像

在Dockerfile所在目录执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile
docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .

输出如下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sending build context to Docker daemon  36.37MB
Step 1/5 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/5 : ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar
 ---> c920c9e9d045
Step 3/5 : RUN bash -c 'touch /mall-tiny-docker-file.jar'
 ---> Running in 55506f517f19
Removing intermediate container 55506f517f19
 ---> 0727eded66dc
Step 4/5 : EXPOSE 8080
 ---> Running in d67a5f50aa7d
Removing intermediate container d67a5f50aa7d
 ---> 1b8b4506eb2d
Step 5/5 : ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
 ---> Running in 0c5bf61a0032
Removing intermediate container 0c5bf61a0032
 ---> c3614dad21b7
Successfully built c3614dad21b7
Successfully tagged mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT

查看docker镜像:

运行mysql服务并设置

1.使用docker命令启动:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
2.进入运行mysql的docker容器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it mysql /bin/bash
3.使用mysql命令打开客户端:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql -uroot -proot --default-character-set=utf8
4.修改root帐号的权限,使得任何ip都能访问:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grant all privileges on *.* to 'root'@'%'
5.创建mall数据库:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create database mall character set utf8
6.将mall.sql文件拷贝到mysql容器的/目录下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker cp /mydata/mall.sql mysql:/
7.将sql文件导入到数据库:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use mall;
source /mall.sql;

运行mall-tiny-docker-file应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -p 8080:8080 --name mall-tiny-docker-file \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-docker-file/logs:/var/logs \
-d mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT

访问接口文档地址http://192.168.3.101:8080/swagger-ui.html:

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-docker-file

推荐阅读

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 macrozheng 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Dockerfile构建Springboot项目为Docker镜像,并发布测试通过【保姆级教学】
小编最近在研究docker,学习了一段时间后,最近想在研究一下把Springboot打成镜像,然后运行镜像,在使用windows进行访问。看了一些教程,觉得不好,知道找到狂神的视频,讲的很不错的,在B站,大家可以去看看。 下面跟着小编一起搭建一下,要对Docker命令有一定的了解哈!!如果安装你的Docker还没安装的话,看一下小编的另一篇教学,点进来了,小编就包学包会哈!!
掉发的小王
2022/07/11
1.1K0
使用Dockerfile构建Springboot项目为Docker镜像,并发布测试通过【保姆级教学】
Sprint Boot整合Dockerfile
在前面的文章中主要演示了Dockerfile在不同的编程语言中环境部署的案例应用,也就是更多的是通过Dockerfile来构建成镜像文件信息,从而运行镜像文件来达到环境部署的目的。下面详细的演示下如何在Spring Boot中整合Dockerfile。
无涯WuYa
2021/12/31
5030
Sprint Boot整合Dockerfile
Docker with Spring Boot
前段时间在我厂卷爷的指导下将Docker在我的实际项目中落地,最近几个小demo都尽量熟悉docker的使用,希望通过这篇文章分享我截止目前的使用经验(如有不准确的表述,欢迎帮我指出)。本文的主要内容是关于Java应用程序的docker化,首先简单介绍了docker和docker-compose,然后利用两个案例进行实践说明。
阿杜
2018/08/06
8850
《docker高级篇(大厂进阶):3.Docker微服务实战》
构建镜像,执行命令:docker build -t zzyy_docker:1.6 .
刘大猫
2024/12/22
760
还在使用第三方Docker插件?SpringBoot官方插件真香!
SpringBoot官方Maven插件避免了编写Docker镜像构建过程,同时充分利用了SpringBoot 2.3以后的Jar分层技术,但对于需要自定义构建镜像的场景造成了一定的麻烦。
macrozheng
2020/12/08
1.1K0
还在使用第三方Docker插件?SpringBoot官方插件真香!
一键部署项目!IDEA官方Docker插件真香!
今天体验了一把IDEA的官方Docker插件,不使用命令行就可以实现远程Docker镜像与容器的管理,还支持Docker Compose部署,功能确实很强大!在平时开发过程中,使用这款插件来打包、部署、运行SpringBoot应用确实很方便,感兴趣的小伙伴可以尝试下它!
macrozheng
2024/03/26
3.1K0
一键部署项目!IDEA官方Docker插件真香!
使用Docker Compose部署SpringBoot应用
注意:如果遇到mall-tiny-docker-compose服务无法连接到mysql,需要在mysql中建立mall数据库,同时导入mall.sql脚本。具体参考使用Dockerfile为SpringBoot应用构建Docker镜像中的运行mysql服务并设置部分。
macrozheng
2019/07/22
1.1K0
使用Docker Compose部署SpringBoot应用
还在手动部署SpringBoot应用?试试这个自动化插件!
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric
macrozheng
2020/09/08
6410
还在手动部署SpringBoot应用?试试这个自动化插件!
DockerHub访问慢怎么破?自建个企业级镜像仓库试试!
Harbor是一款开源的Docker镜像仓库服务,在Github上目前有13.4k+Star。提供了基于角色的镜像访问机制,可以保护你的镜像安全。
macrozheng
2020/12/21
1.3K0
DockerHub访问慢怎么破?自建个企业级镜像仓库试试!
Docker服务开放了这个端口,服务器分分钟变肉机!
Docker为了实现集群管理,提供了远程管理的端口。Docker Daemon作为守护进程运行在后台,可以执行发送到管理端口上的Docker命令。
macrozheng
2020/08/13
1.5K0
Docker之Dockerfile实战(三)
在Docker之Dockerfile实战(二)中详细了介绍了使用Dockerfile来部署基于Python语言开发的应用程序和服务,下面详细的演示使用Dockerfile来部署基于jar的应用程序,也就是Java的技术栈。
无涯WuYa
2021/12/31
3850
Docker之Dockerfile实战(三)
Docker一键部署 SpringBoot 应用的方法,贼快贼好用!
一款可以通过远程API管理Docker镜像和容器的插件,专为Java应用打造,原生支持SpringBoot。
macrozheng
2021/04/16
1.1K0
Docker一键部署 SpringBoot 应用的方法,贼快贼好用!
再见命令行!一键部署应用到远程服务器,IDEA官方Docker插件真香!
今天体验了一把IDEA的官方Docker插件,不使用命令行就可以实现远程Docker镜像与容器的管理,还支持Docker Compose部署,功能确实很强大!在平时开发过程中,使用这款插件来打包、部署、运行SpringBoot应用确实很方便,感兴趣的小伙伴可以尝试下它!
macrozheng
2022/07/24
1.1K0
再见命令行!一键部署应用到远程服务器,IDEA官方Docker插件真香!
_SpringBoot项目部署
SpringBoot项目是依赖于Maven构建的,但打包时如果只依赖Maven打包工具则会打包不完整,我们还需要在SpringBoot项目中引入SpringBoot打包插件 :
会洗碗的CV工程师
2023/11/16
6900
_SpringBoot项目部署
我常用的自动化部署技巧,贼好用,推荐给大家!
主要是定义了如何将Jar包打包成Docker镜像,对DockerFile不了解的朋友可以看下《使用Dockerfile为SpringBoot应用构建Docker镜像》,具体内容如下。
macrozheng
2020/05/26
1.4K1
我常用的自动化部署技巧,贼好用,推荐给大家!
【docker系列】docker之部署springboot项目
本篇主题主要实战如何使用Docker部署springboot项目,那么首先保证服务器上已经安装完docker容器,如果尚未安装请移步《详解阿里云服务器安装docker》文章完成docker安装操作;以下直接搭建springboot项目;以下也是springboot项目中最基本的依赖项;因为我们想测试接口访问,故搭建的是一个web项目,那么我们提供一个controller层
沁溪源
2022/05/06
3.1K0
【docker系列】docker之部署springboot项目
基于win10+Docker+idea的SpringBoot项目容器化部署
软件安装这个就不多说了,大家可以参考这个帖子 :链接如下:https://blog.csdn.net/hunan961/article/details/79484098 主要注意两点就行了: 1.允许版本:64位Windows 10 Pro,专业版、企业版和教育版 2.开启虚拟化。
JAVA葵花宝典
2019/05/24
1.4K0
Docker学习笔记(2):使用Dockerfile构建镜像
Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本。每条指令都必须为大写字母且后面要跟随至少一个参数,每条指令都会创建一个新的镜像层,并对镜像进行提交。
布禾
2020/10/29
5580
Docker学习笔记(2):使用Dockerfile构建镜像
使用Maven插件构建Docker镜像
如果遇到镜像下载不下来的情况,需要修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值,然后重启docker服务:
macrozheng
2019/07/22
1.4K0
使用Maven插件构建Docker镜像
Docker 镜像构建之 Dockerfile
在 Docker 中构建镜像最常用的方式,就是使用 Dockerfile。Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。官方文档:https://docs.docker.com/engine/reference/builder/
贾维斯Echo
2024/03/21
4.2K0
Docker 镜像构建之 Dockerfile
推荐阅读
相关推荐
使用Dockerfile构建Springboot项目为Docker镜像,并发布测试通过【保姆级教学】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验