基于Docker构建CentOS7_Java8_Tomcat8.5 的镜像及Web应用的部署

本文涉及的产品
云防火墙,500元 1000GB
简介: 我所渴求的无非是将心中脱颖欲出的本性付诸生活。为什么竟如此艰难呢? ----黑塞

写在前面


  • 公司项目去OracleteleDB,都在容器上部署,所以系统的学习下,之前着急忙慌的。
  • 本博客笔记属于实战类,适用于小白
  • 博文有错误的地方,或者关于博文的问题,可以留言讨论。
  • 生活加油!

我所渴求的无非是将心中脱颖欲出的本性付诸生活。为什么竟如此艰难呢? ----黑塞
*

安装 Docker

Win 10 安装 Docker

关于 WSL 简单了解下
WSL允许您 直接在Windows上运行Linux环境(包括命令行工具和应用程序),而不需要传统虚拟机或双引导设置的开销。WSL特别有助于web开发人员以及使用Bash和linux优先工具(例如。Ruby, Python)在Windows上使用它们的工具链,并确保开发环境和生产环境之间的一致性。当您在Windows上安装Linux版本时,您将获得一个完整的Linux环境。WsL1与Windows是隔离的- Ul是终端,你可以安装工具。在不修改或中断Windows安装的情况下,将语言和编译器导入Linux环境。我们推荐使用WsL2。

完成上述步骤之后,可以启动docker

##这是一个基本docker教程
git clone https://github.com/docker/getting-started.git

cd  getting-started
docker build -t docker101tutorial .

之后启动点击restart 完成Dokcer启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Ak86kxZ-1627389782504)(imgclip_1.png "imgclip_1.png")]

PS C:\Users\lenovo> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS
NAMES
PS C:\Users\lenovo> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE


Linux 安装 Docker

安装条件:
  • 需要64位操作系统,至少 RHEL6.5 以上的版本,强烈推荐 RHEL7
  • docker安装时,内核要求在3.0以上,RHEL7的内核默认在3.0以上,不满足可以单独升级系统内核。uname -r 或者cat /proc/version
  • 关闭防火墙 (不是必须):firewalld【RHEL7使用】,Iptables【RHEL6使用】,Docker安装时,会自动的接管防火墙,并向防火墙里添加配置,如果防火墙存在,会产生冲突。
安装步骤:
  • 卸载防火墙 yum remove -y firewalld-*
  • 安装软件包 yum install docker
  • 开启路由转发 /etc/sysctl.conf net.ipv4.ip_forward=1 使用sysctl -p让配置立刻生效(否则需要重新虚拟机)docker是通过虚拟交互机来进行通讯的,需要开启路由转发的功能。

软件的 BUG : iptables -nL FORWARD 版本 大于 1.12 时会设置 FORWARD 的默认规则,被设置为 DROP,对于有些docker的版本中,FORWARD链的规则被设置成了DROP,会造成容器和宿主机之间无法通讯。
在这里插入图片描述

解决办法:修改 /lib/systemd/system/docker.server

在这里插入图片描述

重载配置文件,重启服务

systemctl daemon-reload 
systemctl restart docker

基于Docker构建CentOS_7&JDK_1.8&Tomcat8.5 的镜像。

使用 commit构建基础环境镜像:拉取一个centOS_7&jdk_1.8的镜像,基于该镜像启动容器后装一个tomcat8.5,另存为一个新镜像。


PS E:\docker> docker pull docker.io/mamohr/centos-java
Using default tag: latest
latest: Pulling from mamohr/centos-java
469cfcc7a4b3: Pull complete
6c9a0d503960: Pull complete
Digest: sha256:11988ca920fe0a3f3dd382b62690d993e843b668b1fb7f31142494f1e7b5d136
Status: Downloaded newer image for mamohr/centos-java:latest
docker.io/mamohr/centos-java:latest
PS E:\docker> docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
centos               latest              300e315adb2f        7 months ago        209MB
mamohr/centos-java   latest              e041132b8b32        3 years ago         577MB
  • 根据镜像启动容器
docker run -it --privileged mamohr/centos-java:latest /usr/sbin/init
# 进入容器
docker exec -it f6209e004f2f /bin/bash
  • 下载一个tomcat
[root@f6209e004f2f /]# cd /tmp/;wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.69/bin/apache-tomcat-8.5.69.tar.gz
--2021-07-27 02:52:02--  https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.69/bin/apache-tomcat-8.5.69.tar.gz
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 101.6.8.193, 2402:f000:1:408:8100::1, ...
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10561246 (10M) [application/octet-stream]
Saving to: 'apache-tomcat-8.5.69.tar.gz'

100%[==================================================================================>] 10,561,246  7.44MB/s   in 1.4s

2021-07-27 02:52:07 (7.44 MB/s) - 'apache-tomcat-8.5.69.tar.gz' saved [10561246/10561246]

[root@f6209e004f2f tmp]# tar -zxvf apache-tomcat-8.5.69.tar.gz
[root@f6209e004f2f tmp]# ls
apache-tomcat-8.5.69  apache-tomcat-8.5.69.tar.gz  hsperfdata_root  ks-script-hE5IPf  yum.log
[root@f6209e004f2f tmp]# mkdir /usr/tomcat8.5 ; mv apache-tomcat-8.5.69 /usr/tomcat8.5
[root@f6209e004f2f tmp]# cd /usr/tomcat8.5/
[root@f6209e004f2f tomcat8.5]# ls
apache-tomcat-8.5.69
[root@f6209e004f2f tomcat8.5]# chown -hR tomcat:tomcat apache-tomcat-8.5.69
chown: invalid user: 'tomcat:tomcat'
#create tomcat user and group
[root@f6209e004f2f tomcat8.5]# groupadd tomcat;useradd -g tomcat -s /sbin/nologin tomcat
[root@f6209e004f2f tomcat8.5]# chown -hR tomcat:tomcat apache-tomcat-8.5.69
  • 添加tomcat自启动systemd服务单元文件
vim /lib/systemd/system/tomcat.service
#=====
[Unit]
Description=Apache Tomcat 8.5
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=JAVA_HOME=/usr/java/latest/jre
## tomcat as link -s
Environment=CATALINA_PID=/usr/tomcat8.5/apache-tomcat-8.5.69/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/tomcat8.5/apache-tomcat-8.5.69
Environment=CATALINA_BASE=/usr/tomcat8.5/apache-tomcat-8.5.69
Environment='CATALINA_OPTS=-Xms512M -Xmx4096M -server -XX:+UseParallelGC'
Environment='CATALINA_OPTS=-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/usr/tomcat8.5/apache-tomcat-8.5.69/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
                                                                                                                                                                               
  • 加载systemd服务单元配置,并启动测试。
[root@cdd43dfcdf88 system]# systemctl daemon-reload
[root@cdd43dfcdf88 system]# systemctl start tomcat
[root@cdd43dfcdf88 system]#
[root@cdd43dfcdf88 system]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
[root@cdd43dfcdf88 system]#
[root@cdd43dfcdf88 system]# systemctl status tomcat
● tomcat.service - Apache Tomcat 8.5
   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-07-27 08:24:19 UTC; 18s ago
  Process: 1179 ExecStart=/usr/tomcat8.5/apache-tomcat-8.5.69/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 1186 (java)
   CGroup: /docker/cdd43dfcdf8828b963c7b761ba2301fbd14643d99a44232badefa0a641fde60b/system.slice/tomcat.service
           └─1186 /usr/java/latest/jre/bin/java -Djava.util.logging.config.file=/usr/tomcat8.5/apache-tomcat-8.5.69/conf/logging.properties -Djava.util....
           ‣ 1186 /usr/java/latest/jre/bin/java -Djava.util.logging.config.file=/usr/tomcat8.5/apache-tomcat-8.5.69/conf/logging.properties -Djava.util....

Jul 27 08:24:18 cdd43dfcdf88 systemd[1]: Starting Apache Tomcat 8.5...
Jul 27 08:24:19 cdd43dfcdf88 systemd[1]: Started Apache Tomcat 8.5.

[root@cdd43dfcdf88 system]# curl http://127.0.0.1:8080



<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.5.69</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>
.。。。。
  • tomcat 沒有起來问题排查,一般为加载脚本的路径错误,或者说是设计到读写的权限问题。

[root@cdd43dfcdf88 bin]# systemctl start tomcat
Job for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.
## 日志消息写到文本里,在文本里排查问题: cat log | grep tomcat
journalctl -xe >> log
  • 生成新的镜像
[root@f6209e004f2f /]# yum clean all
Loaded plugins: fastestmirror, ovl
Cleaning repos: base extras updates
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@f6209e004f2f /]# exit
exit
PS E:\docker> docker  commit cdd43dfcdf88   centos7_java8_tomcat8.5:latest
sha256:b8c89e810729ae3f9870bac9273f883f9f0bb5ca88ffec7b84f88b64451d805b
PS E:\docker> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
centos7_java8_tomcat8.5                latest              b8c89e810729        7 seconds ago       700MB
centos7_java8_tomcat8.5_base           latest              e9e848ab97f6        2 hours ago         679MB
centos                                 latest              300e315adb2f        7 months ago        209MB
mamohr/centos-java                     latest              e041132b8b32        3 years ago         577MB
hub.c.163.com/housan993/centos7_jdk8   latest              0f793ba5281b        3 years ago
  • 使用docker run 来验新的容器
docker> docker run -it --privileged mamohr/centos-java:latest /usr/sbin/init

  • 备份做好的镜像
PS E:\docker> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
centos7_java8_tomcat8.5                latest              b8c89e810729        39 minutes ago      700MB
centos7_java8_tomcat8.5_base           latest              e9e848ab97f6        3 hours ago         679MB
centos                                 latest              300e315adb2f        7 months ago        209MB
mamohr/centos-java                     latest              e041132b8b32        3 years ago         577MB
hub.c.163.com/housan993/centos7_jdk8   latest              0f793ba5281b        3 years ago         356MB
PS E:\docker> docker save centos7_java8_tomcat8.5:latest -o  centos7_java8_tomcat8.5.tar

通过 Dockerfile 创建服务镜像

这里的话,我们用之前的一個镜像為基础镜像。发布一个web应用。如果有使用docker客户端工具,那么每次可以远程直接替换,war实现部署, UAWeb.war 是我们自己的应用war包。

  • 编写 Dockerfile 文件
FROM centos7_java8_tomcat8.5:latest

MAINTAINER LIRUILONG

COPY UAWeb.war   /usr/tomcat8.5/apache-tomcat-8.5.69/webapps/UAWeb.war

EXPOSE 8080 
  • 创建新的镜像
docker build -t uag_image .

  • 因为容器的特殊性,所以数据没办法持久。所以一般会通过映射宿主机的方式。
# 给一下权限
chmod 777 /usr/tomcat8.5/apache-tomcat-8.5.69/logs
docker run -it -v  /logs:/usr/tomcat8.5/apache-tomcat-8.5.69/logs --privileged uag_image:latest  /usr/sbin/init
  • 发布docker服务,同样需要和宿主机做端口映射。
docker run -it -v /logs:/usr/tomcat8.5/apache-tomcat-8.5.69/logs  -p 9090:8080  --privileged uag_image:latest  /usr/sbin/init

相关文章
|
21天前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
147 3
|
7天前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
83 8
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
103 10
|
23天前
|
人工智能 Java 物联网
Java与边缘AI:构建离线智能的物联网与移动应用
随着边缘计算和终端设备算力的飞速发展,AI推理正从云端向边缘端迁移。本文深入探讨如何在资源受限的边缘设备上使用Java构建离线智能应用,涵盖从模型优化、推理加速到资源管理的全流程。我们将完整展示在Android设备、嵌入式系统和IoT网关中部署轻量级AI模型的技术方案,为构建真正实时、隐私安全的边缘智能应用提供完整实践指南。
194 3
|
22天前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
139 0
|
22天前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
129 4
|
5月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
5月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
5月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
228 104

热门文章

最新文章

下一篇
开通oss服务