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

使用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

时间: 2024-08-03 00:28:21

使用Dockerfile为SpringBoot应用构建Docker镜像的相关文章

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

一个用于构建和推送Docker镜像的Maven插件. 使用Maven插件构建Docker镜像,将Docker镜像push到DockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇文章借助开源插件docker-maven-plugin 进行操作 以下操作.默认你已经阅读过我上一篇文章: Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo http://www.ymq.io/2018/01/11/Docker-deploy-spring-bo

使用Jenkins构建Docker镜像

Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时Jenkins能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性.并且Jenkins提供了大量的插件,能够完成各种任务. 今天我需要使用Jenkins构建一个Docker镜像,然后自动push到docker registry中.到了docker registry中,后面测试人员就可以把镜像发布到测试环境,测试如

构建Docker镜像实战之构建Tomcat9.0镜像(RPM一键安装Java环境)

构建Docker镜像实战之构建Tomcat9.0镜像(RPM一键安装Java环境) tomcat是一个免费开源的轻量级web服务器,在中小型企和并发访问量不高的场合普遍使用,是开发和调试JSP程序的首选.下面使用Dockerfile文件的方式来创建带有tomcat服务的Dockerfile镜像.(注:这里的Java环境是使用rpm一键式安装的且小编创建的是tomcat9.0的镜像) 下面直接开始实验 关闭防火墙及SELinux systemctl stop firewalld.service s

使用dockerfile构建docker镜像

一,简单介绍 docker镜像构建方式有两种方式,第一种是启动基础容器之后,进入容器安装所需要的文件,配置,变量等,完成后使用docker commit提交成为一个新的镜像,第二种则是通过编写dockerfile文件,进行镜像制作,使用docker  build命令进行镜像的构建.第一种方式可以看到镜像的生成过程,但是不便于自动化:第二种方式则比较直观,可以结合devops实现自动打包发布,本文则介绍如何利用dockerfile实现docker镜像的制作. Dockerfile描述了组装镜像的步

构建Docker镜像实战

简介 Nginx是一款轻量级的Web服务器,Tomcat是一款免费开源的轻量级web服务器,在中小型企业和并发访问量不高的场合使用,是开发和调试JSP程序的首选.MSQL是当下最流行的关系型数据库,以上这些都可以使用Dockerfile文件的方式来创建其Docker镜像. 构建nginx镜像 下载基础镜像 # docker pull centos 建立工作目录 # mkdir /nginx # cd /nginx/ 创建并编写Dockerfile文件 # vim Dockerfile //一定是

构建Docker镜像实战案例

Dockerfile介绍 Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像. Dockerfile大致结构:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行指令.每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释. Dockerfile操作指令: FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 :说明新镜像的维护人RUN 命令 : 在所基于的镜像上执行命令,并

构建Docker镜像:nginx

Dockerfile介绍 Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像.Dockerfile大致结构:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行指令.每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释.Dockerfile操作指令: FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 :说明新镜像的维护人RUN 命令 : 在所基于的镜像上执行命令,并提交

构建Docker镜像:tomcat

Dockerfile介绍 Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像.Dockerfile大致结构:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行指令.每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释.Dockerfile操作指令: FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 :说明新镜像的维护人RUN 命令 : 在所基于的镜像上执行命令,并提交

构建docker镜像

一.通过docker commit命令构建镜像 docker commit 构建镜像可以想象为是将运行的镜像进行重命名另存一份.我们先创建一个容器,并在容器里做出修改,就像修改代码一样,最后再将修改提交为一个镜像. # docker run -i -t ubuntu /bin/bash [email protected]:/# apt-get -yqq update [email protected]:/# apt-get -y install apache2 以上的操作我们启动了一个容器,并在