一次构建,到处运行
第一步 拉取项目
第二步 编译
然后用 Maven 进行打包mvn clean deploy -Dmaven.test.skip=true
在打包的过程会从我的私有仓库 Nexus 上下载依赖并打包

以上显示表示打包完成
第三步 打包
第四步 构建镜像
用 Dockerfile 将项目构建成镜像
创建 Dockerfile 并将刚打包好的压缩文件上传
编辑 Dockerfile 内容如下:
FROM tomcat:8.5.38RUN 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/ROOTRUN unzip my-shop-web-admin-1.0.0-SNAPSHOT.zip \&& rm -fr my-shop-web-admin-1.0.0-SNAPSHOT.zipWORKDIR /usr/local/tomcatEXPOSE 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-admincontainer_name: myshop-adminports:- 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/adminUsing default tag: latestThe push refers to repository [192.168.3.202/myshop/admin]f4312d8a68c3: Pushed4f8707d41def: Pushedeb134ba0baa3: Pushedee934a1cf131: Pushed524e7c6c8f81: Pushed35e1fbb194d7: Pushed2489d7a0e827: Pushedb234086ec9dd: Pushedaf2a4009a54d: Pushed1908d3f22285: Pushed2fe266fe1ee6: Pushed12cb127eee44: Pushed604829a174eb: Pushedfbb641a8b943: Pushedlatest: 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 免登录进行推送和拉取操作
