云计算百科
云计算领域专业知识百科平台

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 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服务网络拓扑

#mermaid-svg-mm13iJpvV7gTKPQX {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .error-icon{fill:#552222;}#mermaid-svg-mm13iJpvV7gTKPQX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mm13iJpvV7gTKPQX .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-mm13iJpvV7gTKPQX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mm13iJpvV7gTKPQX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mm13iJpvV7gTKPQX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mm13iJpvV7gTKPQX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mm13iJpvV7gTKPQX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mm13iJpvV7gTKPQX .marker.cross{stroke:#333333;}#mermaid-svg-mm13iJpvV7gTKPQX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mm13iJpvV7gTKPQX .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .cluster-label text{fill:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .cluster-label span{color:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .label text,#mermaid-svg-mm13iJpvV7gTKPQX span{fill:#333;color:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .node rect,#mermaid-svg-mm13iJpvV7gTKPQX .node circle,#mermaid-svg-mm13iJpvV7gTKPQX .node ellipse,#mermaid-svg-mm13iJpvV7gTKPQX .node polygon,#mermaid-svg-mm13iJpvV7gTKPQX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mm13iJpvV7gTKPQX .node .label{text-align:center;}#mermaid-svg-mm13iJpvV7gTKPQX .node.clickable{cursor:pointer;}#mermaid-svg-mm13iJpvV7gTKPQX .arrowheadPath{fill:#333333;}#mermaid-svg-mm13iJpvV7gTKPQX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mm13iJpvV7gTKPQX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mm13iJpvV7gTKPQX .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-mm13iJpvV7gTKPQX .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-mm13iJpvV7gTKPQX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mm13iJpvV7gTKPQX .cluster text{fill:#333;}#mermaid-svg-mm13iJpvV7gTKPQX .cluster span{color:#333;}#mermaid-svg-mm13iJpvV7gTKPQX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mm13iJpvV7gTKPQX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}HTTP/HTTPSFastCGIAJP构建用户负载均衡NginxPHPTomcatMySQLRedisJenkinsDockerDaemon镜像仓库

网络配置示例:

# 创建专用网络
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推荐配置流程

#mermaid-svg-RNSlqobOkuEP3WXc {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .error-icon{fill:#552222;}#mermaid-svg-RNSlqobOkuEP3WXc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RNSlqobOkuEP3WXc .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-RNSlqobOkuEP3WXc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RNSlqobOkuEP3WXc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RNSlqobOkuEP3WXc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RNSlqobOkuEP3WXc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RNSlqobOkuEP3WXc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RNSlqobOkuEP3WXc .marker.cross{stroke:#333333;}#mermaid-svg-RNSlqobOkuEP3WXc svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RNSlqobOkuEP3WXc .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .cluster-label text{fill:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .cluster-label span{color:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .label text,#mermaid-svg-RNSlqobOkuEP3WXc span{fill:#333;color:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .node rect,#mermaid-svg-RNSlqobOkuEP3WXc .node circle,#mermaid-svg-RNSlqobOkuEP3WXc .node ellipse,#mermaid-svg-RNSlqobOkuEP3WXc .node polygon,#mermaid-svg-RNSlqobOkuEP3WXc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RNSlqobOkuEP3WXc .node .label{text-align:center;}#mermaid-svg-RNSlqobOkuEP3WXc .node.clickable{cursor:pointer;}#mermaid-svg-RNSlqobOkuEP3WXc .arrowheadPath{fill:#333333;}#mermaid-svg-RNSlqobOkuEP3WXc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RNSlqobOkuEP3WXc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RNSlqobOkuEP3WXc .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-RNSlqobOkuEP3WXc .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-RNSlqobOkuEP3WXc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RNSlqobOkuEP3WXc .cluster text{fill:#333;}#mermaid-svg-RNSlqobOkuEP3WXc .cluster span{color:#333;}#mermaid-svg-RNSlqobOkuEP3WXc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RNSlqobOkuEP3WXc :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}官方基础镜像启动临时容器手动配置应用部署测试验证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化迁移。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Docker化Web服务部署全景指南:从基础服务器到企业级应用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!