ICP备案

Docker 容器化部署网站怎么做?镜像、编排、反代与备案上线全流程

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年5月24日

Docker 把应用连同运行环境打包成镜像,做到"一次构建、到处运行",避免了"本地能跑、服务器跑不起来"的环境差异问题。本文从镜像、编排、反代到备案,讲清用 Docker 容器化部署网站上线的完整流程与常见坑。

为什么用 Docker

  • 环境一致:镜像里封装了运行时、依赖和配置,开发、测试、生产跑的是同一套,消除环境差异,配合开发/测试/生产环境分离更顺。
  • 部署简单:一条 docker run/compose up 就能起服务,回滚就是换回旧镜像 tag。
  • 隔离与可移植:容器间互相隔离,迁移只需搬镜像和数据卷,服务器迁移更轻。

代价是多了一层抽象,需要理解镜像、容器、网络、数据卷这几个概念。

核心概念速览

概念 说明
镜像(image) 应用 + 运行环境的只读模板,由 Dockerfile 构建
容器(container) 镜像运行起来的实例,可启停销毁
数据卷(volume) 容器外的持久化存储,容器删了数据还在
网络(network) 容器间通信的虚拟网络,用服务名互相访问
Compose 用一个 yml 文件编排多个容器(应用+数据库+缓存)

第一步:写 Dockerfile 构建镜像

Dockerfile 描述如何把应用打成镜像。以一个 Node 应用为例,用多阶段构建减小镜像体积:

# 构建阶段
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段(只带产物和生产依赖)
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/.output ./.output
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]

关键实践:用 .dockerignore 排除 node_modules、.env、.git;用具体版本的基础镜像(别用 latest);多阶段构建把编译依赖留在构建阶段,运行镜像更小更安全。

第二步:用 Compose 编排应用与数据库

真实网站往往不止一个容器(应用 + 数据库 + 缓存)。用 docker compose 一个文件描述清楚,一条命令拉起:

services:
  app:
    build: .
    restart: always
    environment:
      - DATABASE_URL=mysql://app:secret@db:3306/app
    depends_on: [db]
    ports:
      - "127.0.0.1:3000:3000"   # 只绑本机,交给 Nginx 反代
  db:
    image: mysql:8
    restart: always
    environment:
      - MYSQL_DATABASE=app
      - MYSQL_USER=app
      - MYSQL_PASSWORD=secret
    volumes:
      - db_data:/var/lib/mysql   # 数据持久化,容器重建不丢
volumes:
  db_data:

注意:应用容器端口绑到 127.0.0.1,不直接对公网开放,前面统一交给宿主机的 Nginx 反代。

第三步:数据持久化,别让数据随容器消失

容器是"可丢弃"的,但数据不能丢。数据库数据、用户上传文件必须放数据卷(volume)或绑定挂载,否则容器一重建数据就没了——这是 Docker 部署最常见的事故。数据库数据卷同样要纳入定期备份,容器化不等于有备份。

第四步:Nginx 反向代理与 HTTPS

对外统一用宿主机(或另一个容器里)的 Nginx 反代到应用容器,由 Nginx 处理 HTTPS:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

第五步:境内上线的备案接入

Docker 只是打包和运行方式,不改变备案要求。用中国大陆服务器对外提供访问,域名仍必须先完成 ICP 备案:

  • 备案审核的是域名与主体,与是否用容器无关,可先用ICP 备案查询核对现状;
  • 备案接入信息要与实际服务器一致,迁移或换 IP 时同步核对,见更换服务器或 IP 要不要重新备案
  • 备案期间可在本地/内网用容器把应用跑起来测试,通过后再解析到境内服务器。

运维:更新、日志与安全

  • 更新:构建新镜像 → 打新 tag → compose up 重新拉起,出问题回滚到旧 tag,天然支持灰度与回滚。
  • 日志:容器日志用 docker logs 查看,生产建议接日志驱动集中收集,参考网站日志分析
  • 安全:用非 root 用户运行容器、及时更新基础镜像修补漏洞、不要把密钥写进镜像(用环境变量/密钥管理),这些是安全加固在容器场景的延伸。
  • 监控:容器和宿主机资源、应用可用性都要监控,见网站运维监控

常见问题

Q:容器重启后数据没了?
数据没放数据卷(volume)或绑定挂载,存进了容器可写层,容器重建就丢。数据库数据、上传文件必须挂到 volume,并单独做备份。

Q:用 Docker 部署还要备案吗?
要。备案针对域名与主体、与部署方式无关。境内服务器对外访问,域名必须先完成 ICP 备案。

Q:镜像太大、构建太慢怎么办?
用多阶段构建只保留产物、选用 alpine 等精简基础镜像、写好 .dockerignore、合理利用构建缓存分层,都能显著减小体积、加快构建。

资料来源

以上为通用实操说明,具体命令与配置以 Docker 官方文档及你使用的镜像、云服务文档为准。

相关阅读

备案站点的容器化部署运维要点

容器化部署在备案站点里的位置 Docker 把应用与依赖打包成镜像,带来部署一致、可移植、易回滚的好处。备案约束的仍是"域名 + 接入服务商",容器化本身不改变备案,但部署方式会实打实影响可用性、日志质量与证书管理——这几点没规划好,容器化反而会引入新坑。 镜像与构建 用最小基础镜像、多阶段构建,减小体积与攻击面。 …

网站访问日志留存与安全合规运维要点

为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …

网站新增域名如何补充接入备案

企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…

备案信息年度核查该如何配合应对

部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …

备案号在网站上的规范展示与使用要求

网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…

备案注销之后重新申请要注意什么

有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…

备案信息变更有没有时效要求

备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…

公司迁址之后备案地址信息如何更新

企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…

系统学习