上次写过一篇使用Maven插件为SpringBoot应用构建Docker镜像 ,讲述了经过docker-maven-plugin来构建docker镜像的方式,此种方式须要依赖自建的Registry镜像仓库。本文将讲述另外一种方式,使用Dockerfile来构建docker镜像,此种方式不须要依赖自建的镜像仓库,只须要应用的jar包和一个Dockerfile文件便可。html
用于复制文件,格式:java
ADD <src> <dest>
复制代码
示例:mysql
# 将当前目录下的mall-tiny-docker-file.jar包复制到docker容器的/目录下
ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar
复制代码
指定docker容器启动时执行的命令,格式:linux
ENTRYPOINT ["executable", "param1","param2"...]
复制代码
示例:git
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
复制代码
用于设置环境变量,格式:github
ENV <key> <value>
复制代码
示例:spring
# mysql运行时设置root密码
ENV MYSQL_ROOT_PASSWORD root
复制代码
声明须要暴露的端口(只声明不会打开端口),格式:sql
EXPOSE <port1> <port2> ...
复制代码
示例:docker
# 声明服务运行在8080端口
EXPOSE 8080
复制代码
指定所需依赖的基础镜像,格式:shell
FROM <image>:<tag>
复制代码
示例:
# 该镜像须要依赖的java8的镜像
FROM java:8
复制代码
指定维护者的名字,格式:
MAINTAINER <name>
复制代码
示例:
MAINTAINER macrozheng
复制代码
在容器构建过程当中执行的命令,咱们能够用该命令自定义容器的行为,好比安装一些软件,建立一些文件等,格式:
RUN <command>
RUN ["executable", "param1","param2"...]
复制代码
示例:
# 在容器构建过程当中须要在/目录下建立一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
复制代码
# 该镜像须要依赖的基础镜像
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
复制代码
在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服务器:
在Dockerfile所在目录执行如下命令:
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile
docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .
复制代码
输出以下信息:
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镜像:
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
复制代码
docker exec -it mysql /bin/bash
复制代码
mysql -uroot -proot --default-character-set=utf8
复制代码
grant all privileges on *.* to 'root'@'%'
复制代码
create database mall character set utf8
复制代码
docker cp /mydata/mall.sql mysql:/
复制代码
use mall;
source /mall.sql;
复制代码
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:
mall项目全套学习教程连载中,关注公众号第一时间获取。