请按以下顺序阅读
- docker命令(镜像+帮助)
- docker命令(容器)
- docker数据容器卷
- Dockerfile基础知识
- 自定义mycentos镜像
- CMD与ENTRYPOINT的区别
- 自定义Tomcat镜像
- jar包镜像的构建以及war包镜像的构建
- docker的一些常用安装
1. jar包的构建
我们知道,通过doc命令窗口运行jar包的方式是java -jar jar包名
,因此,我们可以在Dockerfile文件中配置从而实现在运行镜像的时候就执行这条语句,达到运行项目的目的。
创建Springboot项目;创建User类和UserController类
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping("loadAllUser")
@ResponseBody
public List<User> loadAllUser(){
List<User> users = new ArrayList<>();
for(int i = 1; i <= 10; i++) {
User user = new User("富贵" + i, 18);
users.add(user);
}
return users;
}
}
1.1 创建Dockerfile
1.2 导入jar包,与Dockerfile同一个目录
1.3 编写Dockerfile文件,基于openjdk:
#基于openjdk:8u181-jdk-alpine
FROM openjdk:8u181-jdk-alpine
#声明工作区
ENV MYPATH /app
WORKDIR $MYPATH
#添加jar包,将当前文件夹的hello.jar重命名为app.jar
ADD hello.jar app.jar
#添加容器卷
VOLUME $MYPATH
EXPOSE 8080
#使用java -jar app.jar去运行
CMD ["java","-jar","app.jar"]
这里添加了容器卷,容器卷的目录就在工作目录下,创建了这个镜像,如果要运行其他的jar包,只需要把jar包重命名为hello.jar,再把jar包导入到工作目录中,直接运行镜像即可
1.4 构建镜像
1.5 运行镜像
测试:
下面我们来实现,更换jar包,不创建新的镜像,这里有点问题,实验了很多天都失败了,但还是先发博客为敬,日后再解决。如有大佬能够解决,不胜感激!
- 修改UserController
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("loadAllUser")
public List<User> loadAllUser(){
List<User> users = new ArrayList<>();
for(int i = 1; i <= 10; i++) {
User user = new User("富贵" + i, 18);
users.add(user);
}
return users;
}
@RequestMapping(" loadOneUser")
public User loadOneUser(){
return new User("富贵", 18);
}
}
我们在编写Dockerfile文件时,添加了容器卷,如果我们需要运行其他jar包,可以不创建新的镜像,而直接更换jar包;
我们需要先找到宿主机的目录,然后再把jar包放进去。
- 查看容器的详细信息:
找到如下文字,红框中的路径就是宿主机的目录,
复制目录进入目录,打开xftp。
将项目打成jar包,把名字更改为app.jar,放入xftp中,
测试:
2. war包的构建
1.1 将项目打包
创建一个Springboot项目,打包方式为war包,创建一个User 类,再创建一个UserController类
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("loadAllUser")
public List<User> loadAllUser() {
List<User> users = new ArrayList<>();
for(int i = 1; i <= 10; i++) {
User user = new User("富贵" + i, 18 + i);
users.add(user);
}
return users;
}
}
将项目打包
1.1 创建Dockerfile
1.2 导入war包
修改war包的名称为hello.war,放入xftp中
1.3 编写Dockerfile文件
运行war包需要依赖Tomcat,所以这里基于Tomcat:alpine 镜像之上构建镜像;
解压包的命令必须加上-dRUN unzip ./hello.war -d ./ROOT
;
#基于Tomcat:alpine
FROM tomcat:alpine
#作者
MAINTAINER young<yyggmmshen@foxmail.com>
#声明变量
ENV TOMCATPATH /usr/local/tomcat
#设置工作目录
WORKDIR ${TOMCATPATH}/webapps
#删除ROOT目录里的所有文件
RUN rm -rf *
#导入war包
COPY hello.war ./hello.war
#创建ROOT目录
RUN mkdir ROOT
#将war包解压到ROOT目录下
RUN unzip ./hello.war -d ./ROOT
#删除war包
RUN rm -rf hello.war
#暴露接口
EXPOSE 8080
#启动Tomcat
CMD ["../bin/catalina.sh","run"]
1.4 构建镜像
1.5 运行镜像
测试: