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服务网络拓扑
网络配置示例:
# 创建专用网络
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推荐配置流程
最佳实践与进阶技巧
存储优化:
# 日志集中管理
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化迁移。