当前位置: 首页 > news >正文

Docker化Web服务部署全景指南:从基础服务器到企业级应用

Docker化Web服务部署全景指南:从基础服务器到企业级应用

本文全面介绍使用Docker部署主流Web服务与应用的两种镜像构建方法:简单服务用Dockerfile,复杂系统用Commit方式

一、基础Web服务器部署

使用Dockerfile构建(推荐方式)

Nginx高性能服务器
FROM nginx:alpine# 拷贝自定义配置
COPY nginx.conf /etc/nginx/conf.d/default.conf# 部署静态网站
COPY dist/ /usr/share/nginx/html# 暴露端口并启动
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]

构建与运行

docker build -t custom-nginx .
docker run -d -p 80:80 --name web-server custom-nginx
Apache HTTP Server
FROM httpd:2.4# 启用模块
RUN sed -i '/mod_proxy/s/^#//g' /usr/local/apache2/conf/httpd.conf
COPY vhost.conf /usr/local/apache2/conf/extra/EXPOSE 80
CMD ["httpd-foreground"]

二、应用服务器部署策略

Tomcat服务(Dockerfile方式)

FROM tomcat:9.0-jre11# 优化配置
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY settings.xml /usr/local/tomcat/conf/
COPY target/app.war /usr/local/tomcat/webapps/ROOT.war# 环境变量
ENV JAVA_OPTS="-Xms512m -Xmx2048m"
EXPOSE 8080

多阶段构建示例

FROM maven:3.8-jdk-11 AS builder
COPY . /app
RUN mvn -f /app/pom.xml clean packageFROM tomcat:9.0
COPY --from=builder /app/target/*.war /usr/local/tomcat/webapps/

三、LAMP环境搭建

Docker Compose全栈方案

version: '3'
services:apache:image: custom-apachebuild: ./apacheports:- "80:80"volumes:- ./php:/var/www/htmlphp:build: context: ./phpdockerfile: Dockerfilevolumes:- ./php:/var/www/htmlmysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: secure_passMYSQL_DATABASE: app_dbvolumes:- db_data:/var/lib/mysqlvolumes:db_data:

PHP Dockerfile

FROM php:7.4-apache
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN a2enmod rewrite

四、CI/CD服务容器化

Jenkins持续集成

FROM jenkins/jenkins:lts-jdk11# 预装插件
RUN jenkins-plugin-cli --plugins \blueocean git github-branch-source pipeline-utility-steps# 配置工具
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false"
COPY init.groovy /usr/share/jenkins/ref/init.groovy.d/USER root
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y nodejs maven
USER jenkins

启动命令

docker run -d --name jenkins \-p 8080:8080 -p 50000:50000 \-v jenkins_data:/var/jenkins_home \custom-jenkins

五、复杂应用部署:WebLogic

使用commit方式创建(企业级应用)

步骤1:准备基础容器

docker pull container-registry.oracle.com/middleware/weblogic:12.2.1.4docker run -d --name weblogic-base \-e ADMIN_PASSWORD=W3bL0gic#Admin \container-registry.oracle.com/middleware/weblogic:12.2.1.4

步骤2:进入容器配置

docker exec -it weblogic-base bash# 在容器内执行
. $ORACLE_HOME/wlserver/server/bin/setWLSEnv.sh
java weblogic.WLST# WLST配置脚本
connect('weblogic','W3bL0gic#Admin','t3://localhost:7001')
createDomain('/u01/oracle/domains/custom_domain','base_domain')

步骤3:应用部署

# 复制EAR文件到容器内
docker cp app.ear weblogic-base:/u01/oracle/# 在WLST中部署
deploy('myapp', '/u01/oracle/app.ear')

步骤4:提交镜像

docker commit weblogic-base mycorp/weblogic-custom:v1# 验证
docker run -d -p 7001:7001 --name prod-app mycorp/weblogic-custom:v1

六、容器网络架构设计

Web服务网络拓扑

HTTP/HTTPS
FastCGI
AJP
构建
用户
负载均衡
Nginx
PHP
Tomcat
MySQL
Redis
Jenkins
DockerDaemon
镜像仓库

网络配置示例

# 创建专用网络
docker network create web-tier# 连接多个服务
docker run -d --net web-tier --name mysql mysql:8.0
docker run -d --net web-tier -p 8080:8080 --name app-server tomcat-app

七、两种构建方法对比

Dockerfile vs Commit方式选择矩阵

特性Dockerfile方式Commit方式
可重复性★★★★★★★☆☆☆
版本控制★★★★★★★☆☆☆
简易程度★★★★☆★★★★★
构建速度★★★★☆★★★★★
适用场景标准化应用部署复杂系统定制

Weblogic推荐配置流程

官方基础镜像
启动临时容器
手动配置
应用部署
测试验证
Commit镜像
推送到私有仓库

最佳实践与进阶技巧

存储优化

# 日志集中管理
docker run -d --log-driver=fluentd --log-opt fluentd-address=logserver:24224 nginx

安全加固

# 在Dockerfile中添加
RUN adduser --disabled-password --gecos '' appuser
USER appuser

混合架构部署

# docker-compose混合编排
services:frontend:image: nginx-alpineports: ["80:80"]legacy-app:image: custom-weblogicplatform: linux/amd64

性能监控

docker stats
docker run -d --name monitor \-v /var/run/docker.sock:/var/run/docker.sock \portainer/portainer

结语:对于Apache/Nginx等标准化服务,优先选择Dockerfile实现版本控制;对于WebLogic等包含复杂配置的企业级应用,Commit方式能快速满足定制需求。随着Docker技术的演进,推荐逐渐将复杂应用拆解为微服务架构,向全Dockerfile化迁移。

http://www.lryc.cn/news/590610.html

相关文章:

  • 暑期算法训练.2
  • 【代码】基于CUDA优化的RANSAC实时激光雷达点云地面分割
  • 前端vue3获取word二进制流在页面展示
  • FAISS深度学习指南:构建高效向量检索系统的完整方法论
  • Node.js Process Events 深入全面讲解
  • 网络安全初级(Python实现sql自动化布尔盲注)
  • flink sql如何对hive string类型的时间戳进行排序
  • 设计模式三:观察者模式 (Observer Pattern)
  • ubuntu--自启动程序
  • 7.isaac sim4.2 教程-Core API-数据记录
  • 【cobalt strike手册0x06】Sleep Mask
  • JAVA进阶 项目实战:汽车租聘系统
  • 关于squareLineStudio软件使用步骤教程(LVGL软件组件编程)
  • Linux应急Rootkit后门查杀病毒查杀软件
  • 0系统与软件工程-标准体系
  • 1软件工程概念及其基本要素-思考题
  • 基于paddleDetect的半监督目标检测实战
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(4)
  • 基于C#开发solidworks图库中文件(SLDPRT,SLDASM,SLDDRW等)转换为HTML和PDF,提供批量和实时转换
  • 【论文阅读 | IF 2025 | COMO:用于多模态目标检测的跨 Mamba 交互与偏移引导融合】
  • 【论文阅读 | CVPR 2023 |CDDFuse:基于相关性驱动的双分支特征分解的多模态图像融合】
  • Python+Tkinter制作音频格式转换器
  • 使用token调用Spring OAuth2 Resource Server接口错误 insufficient_scope
  • Scrapy无缝集成Splash:轻量级动态渲染爬虫终极解决方案
  • Oracle 数据库常见等待事件参数详解
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(上)
  • FPGA基础 -- Verilog 访问寄存器数组的指定位示例
  • 从函数调用到进程通信:Linux下的多语言协作实践
  • 识别装甲板
  • 【Jupyter】个人开发常见命令