重庆网站建设leco tec,ui设计案例作品,seo资讯,怎样注册公司网站建设网页前言在之前的项目中#xff0c;我基于五台虚拟机搭建了一套高可用架构#xff08;Keepalived Nginx Tomcat MySQL#xff09;。随着容器化技术的普及#xff0c;我决定将这些服务迁移到 Docker 中#xff0c;实现更便捷的部署和管理。本文记录了将 Nginx 和 Tomcat 容器…前言在之前的项目中我基于五台虚拟机搭建了一套高可用架构Keepalived Nginx Tomcat MySQL。随着容器化技术的普及我决定将这些服务迁移到 Docker 中实现更便捷的部署和管理。本文记录了将 Nginx 和 Tomcat 容器化的全过程包括遇到的问题和解决方法希望能为正在学习容器化的你提供参考。环境准备· 操作系统Red Hat Enterprise Linux 9 (CentOS Stream 9) · Docker 版本26.1.3 · 基础镜像nginx:1.28.1、tomcat:11.0.18 · 项目文件nginx.conf、tomcat.conf、testdb.jsp、server.xml一、容器化 Nginx1.1 准备配置文件首先将宿主机上 Nginx 的配置文件复制到工作目录mkdir -p /dockerdemo1 cp /etc/nginx/nginx.conf /dockerdemo1/ cp /etc/nginx/conf.d/tomcat.conf /dockerdemo1/ cd /dockerdemo11.2 编写 Dockerfile创建一个名为 Dockerfile 的文件内容如下FROM nginx:1.28.1 COPY nginx.conf /etc/nginx/nginx.conf COPY tomcat.conf /etc/nginx/conf.d/ EXPOSE 80这里直接将宿主机的配置文件覆盖到镜像中这样构建出的镜像就包含了我们自定义的配置。1.3 构建镜像docker build -t my-nginx:1.0 .构建成功后会显示镜像 ID。1.4 运行测试容器docker run -d -p 8080:80 --name nginx-test my-nginx:1.0映射宿主机的 8080 端口到容器的 80 端口方便测试。1.5 验证curl http://localhost:8080如果看到 Nginx 欢迎页说明容器运行正常。你也可以通过浏览器访问 http://宿主机IP:8080 查看效果。问题记录一开始我直接访问 localhost:8080 时总是得到宿主机 Nginx 的页面后来发现是宿主机 Nginx 也监听了 80 端口。通过 systemctl stop nginx 停止宿主机服务后问题解决。这也提醒我们容器化前最好先关闭冲突的服务。二、容器化 Tomcat2.1 准备文件Tomcat 需要 JSP 文件和配置文件。我复制了项目中的 testdb.jsp 和自定义的 server.xml 到工作目录的 tomcat 子目录mkdir -p /dockerdemo1/tomcat cp testdb.jsp /dockerdemo1/tomcat/ cp server.xml /dockerdemo1/tomcat/ cd /dockerdemo1/tomcat2.2 编写 DockerfileFROM tomcat:11.0.18 COPY testdb.jsp /usr/local/tomcat/webapps/ROOT/ COPY server.xml /usr/local/tomcat/conf/server.xml EXPOSE 8080关键点Tomcat 默认的 Web 应用根目录是 webapps/ROOT必须将 JSP 文件放到这个目录下才能直接通过 /文件名 访问。2.3 构建镜像docker build -t my-tomcat:1.0 .2.4 运行容器为了避免与宿主机原有的 Tomcat 端口冲突我将容器的 8080 映射到宿主机的 8081 端口docker run -d -p 8081:8080 --name tomcat-test my-tomcat:1.02.5 验证curl http://localhost:8081/testdb.jsp如果返回 JSP 页面的内容即使数据库连接失败说明 Tomcat 已经正确加载了 JSP 文件。2.6 踩坑记录问题 1webapps/ROOT 被覆盖成文件第一次编写 Dockerfile 时我错误地写成了COPY testdb.jsp /usr/local/tomcat/webapps/ROOT注意目标路径末尾没有加斜杠导致 Docker 将 testdb.jsp 直接复制成了名为 ROOT 的文件覆盖了原本的 ROOT 目录。正确的写法应该是 /usr/local/tomcat/webapps/ROOT/以斜杠结尾表示这是一个目录或者指定完整文件名 /usr/local/tomcat/webapps/ROOT/testdb.jsp。问题 2大小写敏感另一个常见错误是路径大小写。Tomcat 的根目录名是 ROOT全大写如果写成 Root 或 root也会导致文件放错位置Tomcat 找不到页面而返回 404。问题 3镜像标签不存在拉取基础镜像时tomcat:11.0.18 可能不存在需要加上 -jdk21 或 -jre21 等后缀。建议先搜索官方仓库确认可用标签docker search tomcat docker pull tomcat:11.0.18-jdk21问题 4网络问题导致拉取失败在国内网络环境下Docker Hub 访问不稳定。配置镜像加速器是关键{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] }配置后务必重启 Dockersudo systemctl daemon-reload sudo systemctl restart docker三、验证容器间的网络连通可选如果你已经将 Nginx 和 Tomcat 都容器化并希望它们能够互相通信例如 Nginx 反向代理到 Tomcat可以通过创建自定义网络实现docker network create mynet docker run -d --net mynet --name nginx-container my-nginx:1.0 docker run -d --net mynet --name tomcat-container my-tomcat:1.0然后在 Nginx 配置文件中将 proxy_pass 指向 tomcat-container:8080因为同一个网络内容器名可以作为主机名直接访问。四、总结通过本次实践我成功将原本在虚拟机中手动配置的 Nginx 和 Tomcat 服务容器化。整个过程并不复杂核心在于· 理解基础镜像的使用 · 正确复制配置文件到指定路径 · 注意目录和文件名的拼写容器化带来了极大的便利不再需要手动安装软件、配置环境一条 docker run 命令就能启动完整服务并且可以轻松分享给他人。