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

发布于:2025-07-17 ⋅ 阅读:(24) ⋅ 点赞:(0)

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 package

FROM tomcat:9.0
COPY --from=builder /app/target/*.war /usr/local/tomcat/webapps/

三、LAMP环境搭建

Docker Compose全栈方案

version: '3'
services:
  apache:
    image: custom-apache
    build: ./apache
    ports:
      - "80:80"
    volumes:
      - ./php:/var/www/html

  php:
    build: 
      context: ./php
      dockerfile: Dockerfile
    volumes:
      - ./php:/var/www/html

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secure_pass
      MYSQL_DATABASE: app_db
    volumes:
      - db_data:/var/lib/mysql

volumes:
  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.4

docker 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-alpine
    ports: ["80:80"]
  legacy-app:
    image: custom-weblogic
    platform: 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化迁移。


网站公告

今日签到

点亮在社区的每一天
去签到