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

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

公众号新闻


文章目录




    • 💥 简介

    • 💡 基础-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=256m25-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

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


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
8 个最佳 Docker 容器监控工具,收藏了Docker 与 DevOps 的无敌组合,引爆你的创新潜能Docker Swarm 有新特性了:Moby 项目更新频繁,2023年三个大版本Docker Compose部署Spug:实现内网穿透惊呆!中科院女博士PCR实验protocol遭泄露,看完秒发高分SCI……Mysql集群之PXC-Docker安装使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录七绝 跟韵在 Arch Linux 上安装 Docker | Linux 中国云原生面经分享:精心整理的 K8s / Docker / DevOps 面试真题!| 极客时间Python + Docker 还是 Rust + WebAssembly?这并不难选红色日记 政治挂帅 5.1-7Jenkins + Docker 一键自动化部署 SpringBoot 应用最精简流程White Hat, Black Hat: Bringing Hackers Out of the Shadows精选SDE岗位 | BlackRock、Zoom、BlackBerry公司岗位发布!如何在 Ubuntu 上安装 Docker | Linux 中国Docker与DevOps的无敌组合,引爆你的创新潜能下一代 Docker 来了!构建速度提高了 39 倍docker是怎么实现cpu隔离的?流落美国为人民服务:我和美国学生们深度好文|为什么Blackstone叫黑石,而Blackrock叫贝莱德?早餐吃什么精选SDE岗位 | ARM、Bayer、BlackRock公司岗位发布!XR芯片研发公司【万有引力】完成数亿元A轮融资 | 奇绩校友融资新闻为什么Blackstone叫黑石,而Blackrock叫贝莱德?Docker AI 来了,太酷了!第44集 离开左家 (及历任庄主)Docker的使用案例以及未来发展、Docker Hub 服务、环境安全、容器部署安全丢掉 LangChain、像 Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?像Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?美国四大2025 summer实习:扎堆开放申请,速投!Docker AI来了?啥来的?Docker 的诅咒:曾以为它是终极解法,最后却是“罪大恶极”?Docker 有什么优点?容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。