查看原文
其他

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

梦想de星空 macrozheng 2020-08-20
来自专辑
mall学习教程(参考篇)

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

Dockerfile常用指令

ADD

用于复制文件,格式:

  1. ADD <src> <dest>

示例:

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

  2. ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar

ENTRYPOINT

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

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

示例:

  1. # 指定docker容器启动时运行jar包

  2. ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]

ENV

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

  1. ENV <key> <value>

示例:

  1. # mysql运行时设置root密码

  2. ENV MYSQL_ROOT_PASSWORD root

EXPOSE

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

  1. EXPOSE <port1> <port2> ...

示例:

  1. # 声明服务运行在8080端口

  2. EXPOSE 8080

FROM

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

  1. FROM <image>:<tag>

示例:

  1. # 该镜像需要依赖的java8的镜像

  2. FROM java:8

MAINTAINER

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

  1. MAINTAINER <name>

示例:

  1. MAINTAINER macrozheng

RUN

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

  1. RUN <command>

  2. RUN ["executable", "param1","param2"...]

示例:

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

  2. RUN bash -c 'touch /mall-tiny-docker-file.jar'

使用Dockerfile构建SpringBoot应用镜像

编写Dockerfile文件

  1. # 该镜像需要依赖的基础镜像

  2. FROM java:8

  3. # 将当前目录下的jar包复制到docker容器的/目录下

  4. ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar

  5. # 运行过程中创建一个mall-tiny-docker-file.jar文件

  6. RUN bash -c 'touch /mall-tiny-docker-file.jar'

  7. # 声明服务运行在8080端口

  8. EXPOSE 8080

  9. # 指定docker容器启动时运行jar包

  10. ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]

  11. # 指定维护者的名字

  12. MAINTAINER macrozheng

使用maven打包应用

在IDEA中双击package命令进行打包:打包成功后展示:

  1. [INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ mall-tiny-docker-file ---

  2. [INFO] Replacing main artifact with repackaged archive

  3. [INFO] ------------------------------------------------------------------------

  4. [INFO] BUILD SUCCESS

  5. [INFO] ------------------------------------------------------------------------

  6. [INFO] Total time: 30.749 s

  7. [INFO] Finished at: 2019-06-16T14:11:07+08:00

  8. [INFO] Final Memory: 43M/306M

  9. [INFO] ------------------------------------------------------------------------

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

在Linux上构建docker镜像

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

  1. # -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile

  2. docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .

输出如下信息:

  1. Sending build context to Docker daemon 36.37MB

  2. Step 1/5 : FROM java:8

  3. ---> d23bdf5b1b1b

  4. Step 2/5 : ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar

  5. ---> c920c9e9d045

  6. Step 3/5 : RUN bash -c 'touch /mall-tiny-docker-file.jar'

  7. ---> Running in 55506f517f19

  8. Removing intermediate container 55506f517f19

  9. ---> 0727eded66dc

  10. Step 4/5 : EXPOSE 8080

  11. ---> Running in d67a5f50aa7d

  12. Removing intermediate container d67a5f50aa7d

  13. ---> 1b8b4506eb2d

  14. Step 5/5 : ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]

  15. ---> Running in 0c5bf61a0032

  16. Removing intermediate container 0c5bf61a0032

  17. ---> c3614dad21b7

  18. Successfully built c3614dad21b7

  19. Successfully tagged mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT

查看docker镜像:

运行mysql服务并设置

1.使用docker命令启动:

  1. docker run -p 3306:3306 --name mysql \

  2. -v /mydata/mysql/log:/var/log/mysql \

  3. -v /mydata/mysql/data:/var/lib/mysql \

  4. -v /mydata/mysql/conf:/etc/mysql \

  5. -e MYSQL_ROOT_PASSWORD=root \

  6. -d mysql:5.7

2.进入运行mysql的docker容器:

  1. docker exec -it mysql /bin/bash

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

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

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

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

5.创建mall数据库:

  1. create database mall character set utf8

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

  1. docker cp /mydata/mall.sql mysql:/

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

  1. use mall;

  2. source /mall.sql;

运行mall-tiny-docker-file应用

  1. docker run -p 8080:8080 --name mall-tiny-docker-file \

  2. --link mysql:db \

  3. -v /etc/localtime:/etc/localtime \

  4. -v /mydata/app/mall-tiny-docker-file/logs:/var/logs \

  5. -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

推荐阅读



欢迎关注,点个在看

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存