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

原创: 梦想de星空 macrozheng 6月17日

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

Dockerfile常用指令

ADD

用于复制文件,格式:

ADD <src> <dest>

示例:

# 将当前目录下的mall-tiny-docker-file.jar包复制到docker容器的/目录下ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar

ENTRYPOINT

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

ENTRYPOINT ["executable", "param1","param2"...]

示例:

# 指定docker容器启动时运行jar包ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]

ENV

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

ENV <key> <value>

示例:

# mysql运行时设置root密码ENV MYSQL_ROOT_PASSWORD root

EXPOSE

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

EXPOSE <port1> <port2> ...

示例:

# 声明服务运行在8080端口EXPOSE 8080

FROM

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

FROM <image>:<tag>

示例:

# 该镜像需要依赖的java8的镜像FROM java:8

MAINTAINER

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

MAINTAINER <name>

示例:

MAINTAINER macrozheng

RUN

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

RUN <command>RUN ["executable", "param1","param2"...]

示例:

# 在容器构建过程中需要在/目录下创建一个mall-tiny-docker-file.jar文件RUN bash -c 'touch /mall-tiny-docker-file.jar'

使用Dockerfile构建SpringBoot应用镜像

编写Dockerfile文件

# 该镜像需要依赖的基础镜像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命令进行打包:打包成功后展示:

[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所在目录执行以下命令:

# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfiledocker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .

输出如下信息:

Sending build context to Docker daemon  36.37MBStep 1/5 : FROM java:8 ---> d23bdf5b1b1bStep 2/5 : ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar ---> c920c9e9d045Step 3/5 : RUN bash -c 'touch /mall-tiny-docker-file.jar' ---> Running in 55506f517f19Removing intermediate container 55506f517f19 ---> 0727eded66dcStep 4/5 : EXPOSE 8080 ---> Running in d67a5f50aa7dRemoving intermediate container d67a5f50aa7d ---> 1b8b4506eb2dStep 5/5 : ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"] ---> Running in 0c5bf61a0032Removing intermediate container 0c5bf61a0032 ---> c3614dad21b7Successfully built c3614dad21b7Successfully tagged mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT

查看docker镜像:

运行mysql服务并设置

1.使用docker命令启动:

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容器:

docker exec -it mysql /bin/bash

3.使用mysql命令打开客户端:

mysql -uroot -proot --default-character-set=utf8

4.修改root帐号的权限,使得任何ip都能访问:

grant all privileges on *.* to 'root'@'%'

5.创建mall数据库:

create database mall character set utf8

6.将mall.sql文件拷贝到mysql容器的/目录下:

docker cp /mydata/mall.sql mysql:/

7.将sql文件导入到数据库:

use mall;source /mall.sql;

运行mall-tiny-docker-file应用

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

转载于:https://www.cnblogs.com/guoyinghome/p/11220323.html

使用Dockerfile为SpringBoot应用构建Docker镜像相关推荐

  1. docker 运行jar exit_使用Dockerfile为SpringBoot应用构建Docker镜像

    上次写过一篇使用Maven插件构建Docker镜像 ,讲述了通过docker-maven-plugin来构建docker镜像的方式,此种方式需要依赖自建的Registry镜像仓库.本文将讲述另一种方式 ...

  2. SpringBoot 项目构建 Docker 镜像调优实践

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:超级小豆丁 http://www.mydlq.club/article/16/ PS ...

  3. 【Docker实战之入门】Dockerfile详细分析:构建docker镜像(4)构建动态网站WordPress...

    代码文件 [root@Optimus /]# cd docker-training/ [root@Optimus docker-training]# ls centos7 mysql php-fpm ...

  4. oppoJava面试!springboot分层构建Docker镜像实践

    前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事Java开发的工作,和多数人一样,最开始从事crud的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态. ...

  5. SpringBoot打包成Docker镜像

    1. 本文环境 Maven:3.6.3 (Maven配置参考) SpringBoot version:2.3.4.RELEASE Docker version: 19.03.11 (Docker搭建参 ...

  6. docker eclipse打包_【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)...

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  7. 如何在构建docker镜像时执行SonarQube扫描.NET Core应用

    前言 SonarQube是一款静态代码质量分析工具,它常用于检测代码中的Bug.漏洞和代码异味,并且能够集成在IDE.Jenkins.Git等服务中,方便随时查看代码质量分析报告. 一般情况下,我们在 ...

  8. 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上

    一个用于构建和推送Docker镜像的Maven插件. 使用Maven插件构建Docker镜像,将Docker镜像push到DockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇 ...

  9. jar构建docker镜像_dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例...

    dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例 1.镜像构建命令:docker build 图解 启动命令:(注意最后面有一个点,不要忘记) doc ...

最新文章

  1. Coinbase调查发现,BCH上市前没有发生不当交易
  2. 【数据结构基础】-串-顺序结构的基本操作实现
  3. php对mysql进行增删改查,php对mysql进行增删改查
  4. Python 定义源码编码 (Source Encoding)
  5. 2017百度之星资格赛:1005. 寻找母串(卡特兰数+分块打表)
  6. n的m划分 整数拆分问题
  7. iOS获取iPhone系统等信息和服务器返回空的异常处理
  8. Android 网络请求(OKHttp框架)
  9. 全网首发:C++中通过POST向服务器发送JSON的代码
  10. 容器技术Docker K8s 22 容器服务ACK基础与进阶-存储管理
  11. 【C语言】排序详解——冒泡排序
  12. C语言冒泡排序和选择排序
  13. 100+个Java项目视频教程+源码+笔记,项目经验不用愁了!
  14. 坚果云 我的电脑图标_坚果云使用教程
  15. 2.SpringCloud学习(二)——Spring Cloud Eureka 服务注册中心
  16. html中常见标签及其用法归纳大全
  17. 【美港探案】奈飞Q2宛如鸡肋
  18. 塔夫斯大学计算机教授,史上第一次生物创造,全球首个活体机器人诞生!
  19. VS2010中使用AnkhSvn
  20. CSS学习笔记 01、CSS3基础知识学习

热门文章

  1. sql主键可以有多个_干货 | 新手请速戳!30个精选SQL面试问题Qamp;A集锦
  2. 如何查看静态库中有哪些函数
  3. maya中的桥接命令
  4. 植物病害鉴定真的需要深度CNN吗?
  5. python生成验证码的程序_Python基础篇生成4位随机验证码
  6. DFS和BFS算法介绍
  7. ros melodic控制真实机械臂之moveit_setup_assistant配置
  8. rtcp webrtc 接收_WebRTC RTP/RTCP 源码分析(四):RTCP 的接收和解析
  9. 【Python数据分析】数据预处理2——数据集成
  10. yolox-keras的源码,超越YOLOv5,可以用于训练自己的模型