一次构建,到处运行
第一步 拉取项目
第二步 编译
然后用 Maven 进行打包mvn clean deploy -Dmaven.test.skip=true
在打包的过程会从我的私有仓库 Nexus 上下载依赖并打包
以上显示表示打包完成
第三步 打包
第四步 构建镜像
用 Dockerfile 将项目构建成镜像
创建 Dockerfile 并将刚打包好的压缩文件上传
编辑 Dockerfile 内容如下:
FROM tomcat:8.5.38
RUN rm -fr /usr/local/tomcat/webapps/ROOT/*
COPY my-shop-web-admin-1.0.0-SNAPSHOT.zip /usr/local/tomcat/webapps/ROOT/
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN unzip my-shop-web-admin-1.0.0-SNAPSHOT.zip \
&& rm -fr my-shop-web-admin-1.0.0-SNAPSHOT.zip
WORKDIR /usr/local/tomcat
EXPOSE 8080
需要指定 tomcat 版本,2018 年,Java EE 改名为 Jakarta EE。这导致一些 JAR 包的包名也在之后的版本中进行了更改。这对本项目的影响是,Spring 本身是不含 Servlet、JSP 的 JAR 包的,但其依赖这些 JAR 包。如果在 Tomcat 服务器中部署的项目使用了 Spring,则这部分的 JAR 包将由 Tomcat 服务器来提供。而问题在于,Spring 5.2.9.RELEASE 期望的 JAR 包前缀是 javax,而Tomcat 10.0.0 提供的 JAR 包前缀是 jakarta。因此,Spring 报了一个认为没有 Servlet、JSP 的 JAR 包的错。
开始构建镜像# docker build -t myshop-admin .
构建成功
第五步 构建容器
编辑 docker-compose.yml 文件
version: '3.1'
services:
myshop-admin:
image: myshop-admin
container_name: myshop-admin
ports:
- 8085:8080
启动容器:# docker-compose up -d
容器已启动
测试访问:
第六步 镜像上传私服
将镜像上传到 docker 的 harbor 私有仓库
标记:docker tag myshop-admin 192.168.3.202/myshop/admin
推送:docker push 192.168.3.202/myshop/admin
[root@brettwu ~]# docker push 192.168.3.202/myshop/admin
Using default tag: latest
The push refers to repository [192.168.3.202/myshop/admin]
f4312d8a68c3: Pushed
4f8707d41def: Pushed
eb134ba0baa3: Pushed
ee934a1cf131: Pushed
524e7c6c8f81: Pushed
35e1fbb194d7: Pushed
2489d7a0e827: Pushed
b234086ec9dd: Pushed
af2a4009a54d: Pushed
1908d3f22285: Pushed
2fe266fe1ee6: Pushed
12cb127eee44: Pushed
604829a174eb: Pushed
fbb641a8b943: Pushed
latest: digest: sha256:dc02dbd996e6adcd8fe2e2e9b5d33386805b0721234f6acbc2319612310086b7 size: 3257
推送完成后可以在仓库中看到
复制拉取命令,这就可以在其他服务器上拉取镜像部署容器了
前提是拉取镜像的服务器要配置 harbor 的客户端 “insecure-registries”: [ “192.168.3.202”]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://pixarvda.mirror.aliyuncs.com"],
"insecure-registries": [ "192.168.3.202"]
}
拉取镜像:docker pull 192.168.3.202/myshop/admin:latest
拉取的时候会提示需要登录,先登录再拉取# docker login 192.168.3.202 - u admin -p Harbor12345
至此,一次构建,到处运行的步骤就完成了,后续还要优化 harbor 免登录进行推送和拉取操作