0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker部署迁移实战

马哥Linux运维 来源:稀土掘金技术社区 2023-12-12 14:22 次阅读

简介

由于公司内部机器要做迁移,原系统机器部署在阿里云,要向亚马逊迁移,由于之前的服务实在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 .

3f25ee06-957b-11ee-8b88-92fbcf53809c.png

启动镜像

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

    文章

    3440

    浏览量

    87144
  • 镜像
    +关注

    关注

    0

    文章

    153

    浏览量

    10587
  • 亚马逊
    +关注

    关注

    8

    文章

    2480

    浏览量

    82372
  • Docker
    +关注

    关注

    0

    文章

    437

    浏览量

    11603

原文标题:Docker实战【镜像部署】完成公司云迁移

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    借助Docker弹性部署自己的服务

    Docker弹性部署自己的服务
    发表于 04-19 10:15

    docker中java环境的部署

    docker 部署java环境以及常用应用(持续更新)
    发表于 05-24 15:44

    docker流程部署步骤

    为女朋友写一个小程序(五)— —如何用docker简化部署
    发表于 09-12 08:26

    Docker部署Redis服务器集群的方法

    Docker部署Redis服务器集群
    发表于 06-13 09:12

    RK3399 debian系统如何使用docker部署app呢

    RK3399 debian系统如何使用docker部署app呢?有哪些操作流程呢?
    发表于 03-07 07:24

    如何在RDKx3部署docker镜像?

    一种在RDKx3部署docker镜像跑tros历程的方法 为了保持主系统环境干净整洁,有在docker部署代码的习惯。 docker pu
    发表于 08-02 11:02

    使用Spring Cloud与Docker实战微服务

    使用Spring Cloud与Docker实战微服务
    发表于 09-09 08:31 7次下载
    使用Spring Cloud与<b class='flag-5'>Docker</b><b class='flag-5'>实战</b>微服务

    Docker监控实战分析

    Docker 优势 那为什么 Docker 越来越火呢?一谈起 Docker 总是会跟着让人联想到轻量这个词,甚至会有一种通过 Docker 启动一个服务会节省很多资源的错觉。然而
    发表于 10-13 17:05 2次下载
    <b class='flag-5'>Docker</b>监控<b class='flag-5'>实战</b>分析

    如何把Docker Registry迁移到Harbor

    “要如何将 docker registry 中的镜像迁移至 harbor?本文介绍了四种具体的思路和想法供大家参考。 Registry Docker Distribution Docker
    的头像 发表于 09-07 16:29 1281次阅读
    如何把<b class='flag-5'>Docker</b> Registry<b class='flag-5'>迁移</b>到Harbor

    如何迁移docker的存储目录

    那就准备迁移 docker 的存储目录吧,或者对 /var 设备进行扩容来达到相同的目的。更多关于 dockerd 的详细参数,请点击查看 官方文档 地址。
    的头像 发表于 07-03 09:21 4452次阅读

    docker微服务架构实战

    随着云计算和容器化技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署的服务,每个服务负责独立的业务功能。其中,Docker作为一个流行
    的头像 发表于 11-23 09:26 313次阅读

    linux docker安装部署

    Docker是一种开源的容器化平台,可以帮助开发者在不同的环境中快速构建、测试和部署应用程序。它能够解决不同操作系统之间的兼容性问题,简化了应用程序的部署过程,并提供了高效的资源利用。本文将带您详细
    的头像 发表于 11-23 09:27 436次阅读

    docker部署mysql的坏处

    Docker 是一种虚拟化技术,它允许开发人员在容器内打包应用程序及其所有依赖项,从而实现在不同环境中运行相同的应用程序的能力。然而,在使用 Docker 部署 MySQL 时,也存在一些潜在
    的头像 发表于 11-23 09:29 703次阅读

    docker部署对性能的影响

    Docker 是一个流行的容器化平台,它提供了一种轻量级的虚拟化技术,使得应用程序可以在独立的容器中运行。然而,部署应用程序到 Docker 容器中可能会对性能产生一些影响。在本文中,我们将探讨
    的头像 发表于 11-23 09:31 675次阅读

    Windows Docker部署Redis的流程

    由于 Docker 部署 Redis 后,Redis 容器中默认是没有 redis.conf 配置文件的,需要自己手动挂在进去。
    的头像 发表于 11-27 10:02 343次阅读
    Windows <b class='flag-5'>Docker</b><b class='flag-5'>部署</b>Redis的流程