当前位置: 首页 > 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.dtcms.com/a/282256.html

相关文章:

  • VUE指令大全
  • 使用Node搭建一个直播服务器,实时直播当前桌面
  • WAMP允许远程访问
  • WAN技术
  • 基于 Python/PHP/Node.js 的淘宝 API 商品数据抓取开发教程
  • 高德mcp结合智能体生成旅游计划推荐
  • Typecho插件开发:自定义表单验证规则addRule实战指南
  • 20250716|【继续19的快慢指针】Leetcodehot100之237【pass】今天计划
  • python--杂识--20 sse与websocket区别
  • 【RTSP从零实践】13、TCP传输AAC格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • 算法学习笔记:25.回溯算法之迷宫寻路——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • lazyvim恢复gt键
  • Redis 之数据过期策略
  • 机动车检测站授权签字人报考指南
  • (数据结构)复杂度
  • 快速掌握 Kafka:从核心概念到生产级部署指南
  • Kafka 与 RocketMQ 消息确认机制对比分析
  • MCU进入低功耗模式前的引脚处理原则和方法 --> 以最小化低功耗电流
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • MySQL 配置性能优化赛:用创意配置解锁性能潜能
  • 创建第二大脑的关键还是方法
  • 网络爬虫的相关知识和操作
  • AQS(AbstractQueuedSynchronizer)抽象队列同步器
  • 第十八节:第二部分:java高级:反射-获取构造器对象并使用
  • AI产品经理面试宝典第23天:AI赋能商业服务相关面试题与解答指导
  • vue的provide和inject
  • Liunx-Lvs配置项目练习
  • APIs案例及知识点串讲(上)
  • LVS-DR的ARP污染问题
  • Promise与Axios:异步编程