Docker实战【镜像部署】完成公司云迁移

文章目录

💥 简介

由于公司内部机器要做迁移,原系统机器部署在阿里云 ,要向亚马逊云 迁移,由于之前的服务实在windows远程机器部署,并且有些项目因为打包问题,需要远程机器的IDEA做启停控制,本次准备先解决相关打包问题,然后将服务通过镜像方式部署,服务部署后,性能相比之前更快了,下面是相关操作文档。

💡 基础-Tomcat镜像部署

检查本地环境

powershell 复制代码
[root@VM-12-2-opencloudos local]# cat /etc/os-release
NAME="OpenCloudOS"
VERSION="8.6"
ID="opencloudos"
ID_LIKE="rhel fedora"
VERSION_ID="8.6"
PLATFORM_ID="platform:oc8"
PRETTY_NAME="OpenCloudOS 8.6"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:opencloudos:opencloudos:8"
HOME_URL="https://www.opencloudos.org/"
BUG_REPORT_URL="https://bugs.opencloudos.tech/"

检查docker服务状态

powershell 复制代码
[root@VM-12-2-opencloudos local]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-11-01 21:57:27 CST; 3 weeks 2 days ago
     Docs: https://docs.docker.com
 Main PID: 34389 (dockerd)
    Tasks: 30
   Memory: 740.3M
   CGroup: /system.slice/docker.service
           ├─34389 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
           ├─35838 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3306 -container-ip 172.17.0.2 -container-port 3306
           └─35847 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 3306 -container-ip 172.17.0.2 -container-port 3306

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

检查Docker版本

powershell 复制代码
[root@VM-12-2-opencloudos local]# docker version
Client: Docker Engine - Community
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:09:18 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:08:20 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.24
  GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc:
  Version:          1.1.9
  GitCommit:        v1.1.9-0-gccaecfc
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

搜索Tomcat镜像版本 tomcat版本地址选择: javaforall.cn/179038.html 本次使用tomcat:8.5.46-jdk8-openjdk镜像 拉取镜像

powershell 复制代码
[root@VM-12-2-opencloudos local]# docker pull tomcat:8.5.46-jdk8-openjdk
8.5.46-jdk8-openjdk: Pulling from library/tomcat
092586df9206: Pull complete
ef599477fae0: Pull complete
4530c6472b5d: Pull complete
d34d61487075: Pull complete
272f46008219: Pull complete
12ff6ccfe7a6: Pull complete
f26b99e1adb1: Pull complete
21bec9c8ea28: Pull complete
b8a32f28e27c: Pull complete
94fdd0ba0430: Pull complete
Digest: sha256:bb4ceffaf5aa2eba6c3ee0db46d863c8b23b263cb547dec0942e757598fd0c24
Status: Downloaded newer image for tomcat:8.5.46-jdk8-openjdk
docker.io/library/tomcat:8.5.46-jdk8-openjdk

创建容器挂载目录

powershell 复制代码
[root@VM-12-2-opencloudos local]# mkdir -p /data/tomcat/data
[root@VM-12-2-opencloudos local]# chmod -R 777 /data/tomcat/

运行Tomcat容器

powershell 复制代码
[root@VM-12-2-opencloudos local]# docker run -d  --name my_web --restart always -p 8080:8080 -v /data/tomcat/data:/usr/local/tomcat/webapps/ROOT/   tomcat:8.5.46-jdk8-openjdk
5a8bf43b2c1568d0d72477ae4a8846421533b66a5bd946ac27978980efe908f6

查看tomcat运行状态

powershell 复制代码
[root@VM-12-2-opencloudos local]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
5a8bf43b2c15   tomcat:8.5.46-jdk8-openjdk   "catalina.sh run"        2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              my_web
70c4b01b0631   mysql                        "docker-entrypoint.s..."   3 weeks ago     Up 3 weeks     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

🎖️ 企业实战-制作Tomcat项目镜像

tomcat版本选取

参考地址:pythonjishu.com/rvyvovkfpgg...

tomcat 配置调优 参考地址: blog.csdn.net/z20021111/a... blog.csdn.net/vnjohn/arti... JDK8版本选取 JDK选用JDK 1.8.0_92

JDK 1.8.0_92是Java Development Kit的最新版本,于2016年12月发布。它是Java SE 8u92的更新版本,包含了许多新的功能和改进,包括:

  • 改进的安全性:Java 8引入了一些安全性改进,包括增强的安全管理器、更强的加密算法、更好的SSL/TLS支持等。

  • 改进的垃圾回收:Java 8引入了一些垃圾回收改进,包括并行垃圾回收、低停顿垃圾回收、更好的内存使用等。

  • 改进的性能:Java 8引入了一些性能改进,包括更快的JIT编译器、更快的字符串操作、更快的数组操作等。

  • 改进的API:Java 8引入了一些新的API,包括Stream API、Optional类、Date/Time API等。

  • 改进的工具:Java 8引入了一些新的工具,包括JavaFX工具箱、Nashorn JavaScript引擎等。

    总的来说,Java 8的改进包括安全性、垃圾回收、性能、API和工具等方面。这些改进使得Java 8更加稳定、可靠和高效

上传文件 上传jdk+tomcat的tar.gz文件

powershell 复制代码
-rw-r--r-- 1 root root 181599521 Nov 25 13:33 jdk1.8.0_92.tar.gz
-rw-r--r-- 1 root root  11582260 Nov 25 11:37 tomcat9.tar.gz
[root@VM-12-2-opencloudos tomcat]# pwd
/usr/local/tomcat

编写DockerFile jvm参数调优项参考:blog.csdn.net/hadues/arti...

powershell 复制代码
# 引入基础centos
FROM centos:7
# 时区
ENV TZ=Asia/Shanghai
#将dk和tomcat加入到容器
ADD jdk1.8.0_92.tar.gz /usr/local/tomcat
ADD tomcat9.tar.gz /usr/local/tomcat
RUN rm -rf /usr/local/tomcat/tomcat9/webapps/*
COPY ROOT.war /usr/local/tomcat/tomcat9/webapps/
#安装vim命令
RUN yum -y install vim
#设置环境
ENV MYPATH /usr/local
ENV JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -Xmx2g -Xms2g -Xmn768m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xss256k -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:-ResizePLAB -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=200  -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"
#设置工作目录
WORKDIR $MYPATH
#设置JAVA_HOME 环境变量,后边版本对应上方安装包
ENV JAVA_HOME /usr/local/tomcat/jdk1.8.0_92
#设置CLASSPATH 环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#设置CATALINA_HOME 环境变量
ENV CATALINA_HOME /usr/local/tomcat/tomcat9
#设置CATALINA_BASE 环境变量
ENV CATALINA_BASE /usr/local/tomcat/tomcat9
#设置PATH
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#指定容器启动后执行的命令
# 初始化文件上传目录
RUN mkdir /usr/local/zhixiao
RUN mkdir /usr/local/zhixiao/file
RUN chmod a+rwx /usr/local/zhixiao/
VOLUME [ "/usr/usr/local/zhixiao/file/",  "/usr/local/tomcat/tomcat9/webapps/"]
# 指定容器启动时执行的脚本
ENTRYPOINT [ "/usr/local/tomcat/tomcat9/bin/catalina.sh", "run" ]
# EXPOSE 映射端口
EXPOSE 8080

构建Docker镜像

powershell 复制代码
docker build -t zxht:1.0 .

启动镜像

powershell 复制代码
docker run -d --name zxht -p 8080:8080  zxht:1.0

查看启动结果

进入容器

powershell 复制代码
docker exec -it 3e703eea724e /bin/bash
cd /usr/local/tomcat/tomcat9/logs
tail -f -n 1000  catalina.2023-11-25.log

可以看到配置的JVM参数生效了,同时项目启动成功,访问服务成功!

powershell 复制代码
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/tomcat9/conf/logging.properties
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+HeapDumpOnOutOfMemoryError
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2g
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms2g
25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmn768m
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MetaspaceSize=256m
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxMetaspaceSize=256m
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xss256k
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseG1GC
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+AlwaysPreTouch
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:-ResizePLAB
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ParallelRefProcEnabled
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ExplicitGCInvokesConcurrent
25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxGCPauseMillis=200
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:ParallelGCThreads=4
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:ConcGCThreads=2
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat/tomcat9
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat/tomcat9
25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/tomcat9/temp
25-Nov-2023 07:16:47.714 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
25-Nov-2023 07:16:48.044 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio2-8080"]
25-Nov-2023 07:16:48.099 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [585] milliseconds
25-Nov-2023 07:16:48.125 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
25-Nov-2023 07:16:48.125 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.64]
25-Nov-2023 07:16:48.145 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/tomcat9/webapps/ROOT.war]
25-Nov-2023 07:16:55.093 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
25-Nov-2023 07:17:03.556 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/tomcat9/webapps/ROOT.war] has finished in [15,411] ms
25-Nov-2023 07:17:03.559 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio2-8080"]
25-Nov-2023 07:17:03.562 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [15462] milliseconds

退出容器

powershell 复制代码
ctrl+D 

🎯 企业实战-Docker部署SpringBoot项目

DockerFile文件编写

powershell 复制代码
FROM centos:7
#将dk加入到容器
ADD jdk1.8.0_92.tar.gz /usr/local/jdk
# 声明工作目录
WORKDIR /opt
RUN mkdir -p /opt
#设置JAVA_HOME 环境变量,后边版本对应上方安装包
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_92
#设置CLASSPATH 环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#设置PATH
ENV PATH $PATH:$JAVA_HOME/bin
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 传包
COPY *.jar /opt/app.jar
EXPOSE 8080
# JVM启动参数设置
ENV JAVA_OPTS="\
-server \
-Xss256k \
-XX:MaxMetaspaceSize=256m \
-XX:+UseG1GC \
-XX:+AlwaysPreTouch \
-XX:-ResizePLAB \
-XX:+ParallelRefProcEnabled \
-XX:+ExplicitGCInvokesConcurrent \
-XX:MaxGCPauseMillis=200 \
-XX:ParallelGCThreads=4 \
-XX:ConcGCThreads=2 \
-Xmn768m \
-Xmx2g \
-Xms2g \
-XX:+PrintGCDetails \
-XX:+PrintTenuringDistribution \
-XX:+PrintGCTimeStamps \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/opt \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=5 \
-XX:GCLogFileSize=20M"
ENTRYPOINT java ${JAVA_OPTS} -jar /opt/app.jar

-XX:+HeapDumpOnOutOfMemoryError 是指OOM时,自动生成dump文件。

倒数第二行的RUN命令,创建start.sh及授权,这里是为解决容器启动运行后,java应用进程号等于1的问题,进程号等于1会导致jstack等命令无法运行。

构建镜像 [root@VM-12-2-opencloudos tomcat]# docker build -t pc:1.0 . 启动镜像

docker run -d -p 8080:8080 --name pc pc:1.0

🚀 问题复盘

1、only whitespace content allowed before start tag and not ^ (position: START_DOCUMENT seen ^... @1:1) 重新删除问题jar包所在目录文件,重新刷新mvn下载文件即可 2、Groovy和java并存的web项目,打包失败 参考地址: blog.csdn.net/zzfengxia/a...

🍓 总结

1.编写Dockerfile:这是镜像构建的说明文件。它包含了构建步骤、依赖项、环境变量、命令和其它需要在运行时配置的信息。

2.构建镜像:当Dockerfile编写完毕后,使用docker build命令构建镜像。

3.运行容器:使用docker run命令启动容器并运行应用程序。

4.配置网络和端口:在容器内部以及容器和外部网络之间传输数据需要配置网络和端口。

5.数据管理:在容器内部生成的文件和数据需要跨容器和主机存储和管理。

6.监控和日志:当容器运行时,需要监控日志和性能指标来确保正常运行。

7.更新和维护:镜像和容器需要不断更新和维护,以确保应用程序始终保持在最新的环境中运行。

总之,使用Docker镜像部署可以更加轻松、快捷地部署应用程序,并且可以帮助开发团队更好地管理和维护应用程序。

相关推荐
星霜笔记23 分钟前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
数据知道3 小时前
容器化部署:用Docker封装机器翻译模型与服务详解
docker·容器·机器翻译
uzong5 小时前
技术故障复盘模版
后端
GetcharZp5 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack8 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt