簡介
由于公司內部機器要做遷移,原系統機器部署在阿里云,要向亞馬遜云遷移,由于之前的服務實在windows遠程機器部署,并且有些項目因為打包問題,需要遠程機器的IDEA做啟停控制,本次準備先解決相關打包問題,然后將服務通過鏡像方式部署,服務部署后,性能相比之前更快了,下面是相關操作文檔。
基礎-Tomcat鏡像部署
檢查本地環境
[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:/oopencloudos: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 2127 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 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 0918 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 0920 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-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
創建容器掛載目錄
[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-openjdk 5a8bf43b2c1568d0d72477ae4a8846421533b66a5bd946ac27978980efe908f6
查看tomcat運行狀態
[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 70c4b01b0631mysql"docker-entrypoint.s…"3weeksagoUp3weeks0.0.0.0:3306->3306/tcp,:::3306->3306/tcp,33060/tcpmysql
企業實戰-制作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
# 引入基礎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鏡像
docker build -t zxht:1.0 .
啟動鏡像
docker run -d --name zxht -p 8080:8080 zxht:1.0
查看啟動結果
進入容器
docker exec -it 3e703eea724e /bin/bash cd /usr/local/tomcat/tomcat9/logs tail -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.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.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 /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項目,打包失敗
總結
1.編寫Dockerfile:這是鏡像構建的說明文件。它包含了構建步驟、依賴項、環境變量、命令和其它需要在運行時配置的信息。
2.構建鏡像:當Dockerfile編寫完畢后,使用docker build命令構建鏡像。
3.運行容器:使用docker run命令啟動容器并運行應用程序。
4.配置網絡和端口:在容器內部以及容器和外部網絡之間傳輸數據需要配置網絡和端口。
5.數據管理:在容器內部生成的文件和數據需要跨容器和主機存儲和管理。
6.監控和日志:當容器運行時,需要監控日志和性能指標來確保正常運行。
7.更新和維護:鏡像和容器需要不斷更新和維護,以確保應用程序始終保持在最新的環境中運行。
總之,使用Docker鏡像部署可以更加輕松、快捷地部署應用程序,并且可以幫助開發團隊更好地管理和維護應用程序。
-
WINDOWS
+關注
關注
3文章
3541瀏覽量
88622 -
鏡像
+關注
關注
0文章
164瀏覽量
10707 -
亞馬遜
+關注
關注
8文章
2650瀏覽量
83315 -
Docker
+關注
關注
0文章
457瀏覽量
11846
原文標題:Docker實戰【鏡像部署】完成公司云遷移
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論