社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

马哥Linux运维 • 5 月前 • 81 次点击  


文章目录




    • 💥 简介

    • 💡 基础-Tomcat镜像部署

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

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

    • 🚀 问题复盘

    • 🍓 总结


💥 简介



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


💡 基础-Tomcat镜像部署


检查本地环境


[root@VM-12-2-opencloudos local]# cat /etc/os-releaseNAME="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服务状态


[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版本


[root@VM-12-2-opencloudos local]# docker versionClient


    
: 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镜像 拉取镜像


[root@VM-12-2-opencloudos local]# docker pull tomcat:8.5.46-jdk8-openjdk8.5.46-jdk8-openjdk: Pulling from library/tomcat092586df9206: Pull completeef599477fae0: Pull complete4530c6472b5d: Pull completed34d61487075: Pull complete272f46008219: Pull complete12ff6ccfe7a6: Pull completef26b99e1adb1: Pull complete21bec9c8ea28: Pull completeb8a32f28e27c: Pull complete94fdd0ba0430: Pull completeDigest: sha256:bb4ceffaf5aa2eba6c3ee0db46d863c8b23b263cb547dec0942e757598fd0c24Status: Downloaded newer image for tomcat:8.5.46-jdk8-openjdkdocker.io/library/tomcat:8.5.46-jdk8-openjdk


创建容器挂载目录


[root@VM-12-2-opencloudos local]# mkdir -p /data/tomcat/data[root@VM-12-2-opencloudos local]# chmod -R 777 /data/tomcat/


运行Tomcat容器


[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-openjdk5a8bf43b2c1568d0d72477ae4a8846421533b66a5bd946ac27978980efe908f6

查看tomcat运行状态

[root@VM-12-2-opencloudos local]# docker psCONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                                  NAMES5a8bf43b2c15   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_web70c4b01b0631   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版本选取


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文件


-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 


# 引入基础centosFROM centos:7# 时区ENV TZ=Asia/Shanghai#将dk和tomcat加入到容器ADD jdk1.8.0_92.tar.gz /usr/local/tomcatADD tomcat9.tar.gz /usr/local/tomcatRUN rm -rf /usr/local/tomcat/tomcat9/webapps/*COPY ROOT.war /usr/local/tomcat/tomcat9/webapps/#安装vim命令RUN yum -y install vim#设置环境ENV MYPATH /usr/localENV 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#设置PATHENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin#指定容器启动后执行的命令# 初始化文件上传目录RUN mkdir /usr/local/zhixiaoRUN mkdir /usr/local/zhixiao/fileRUN 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镜像


docker build -t zxht:1.0 .


启动镜像


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

查看启动结果


进入容器


docker exec -it 3e703eea724e /bin/bashcd /usr/local/tomcat/tomcat9/logstail -f -n 1000  catalina.2023-11-25.log


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


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.properties25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+HeapDumpOnOutOfMemoryError25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2g25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms2g25-Nov-2023 07:16:47.710 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmn768m25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MetaspaceSize=256m25-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: -Xss256k25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseG1GC25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+AlwaysPreTouch25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:-ResizePLAB25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ParallelRefProcEnabled25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ExplicitGCInvokesConcurrent25-Nov-2023 07:16:47.711 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxGCPauseMillis=20025-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:ParallelGCThreads=425-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:ConcGCThreads=225-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=204825-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources25-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=002725-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/tomcat925-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat/tomcat925-Nov-2023 07:16:47.712 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/tomcat9/temp25-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] milliseconds25-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] ms25-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.start
up.Catalina.start Server startup in [15462] milliseconds


退出容器


ctrl+D


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


DockerFile文件编写


FROM centos:7#将dk加入到容器ADD jdk1.8.0_92.tar.gz /usr/local/jdk# 声明工作目录WORKDIR /optRUN 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#设置PATHENV PATH $PATH:$JAVA_HOME/bin# VOLUME 指定了临时文件目录为/tmp。# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmpVOLUME /tmp# 传包COPY *.jar /opt/app.jarEXPOSE 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项目,打包失败


🍓 总结


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

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

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

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

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

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

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

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

链接:https://juejin.cn/post/7307146429003989030

(版权归原作者所有,侵删)


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/165430
 
81 次点击