返回知识库

服务器 · 运行与保底

Docker 容器Docker Container

镜像把运行环境、依赖和代码一起打包成模具,容器是用它跑起来的实例,换机器行为不变。容器随时会删掉重建,数据要挂到 volume,密钥不打进镜像。

把「我电脑上能跑」原样搬到服务器

先像平时那样直接部署,看服务器为什么报错;再把环境打包成镜像、在服务器上启动容器。最后下几条订单、删掉容器重建,看数据有没有放对地方。

任务:网站在你电脑上 npm run dev 一切正常,现在要放到服务器上,并且以后升级、重建都不能丢订单。

第 1 段 · 让服务器跑出和你电脑一样的结果

你的电脑Node 20 · macOS · OpenSSL 3

✓ npm run dev 正常

镜像 模具 · 构建后只读

还没有镜像

服务器宿主机 Node 16 · Ubuntu 20.04

等待部署

网站:未部署

第 2 段 · 数据放在哪:删掉容器重建,订单还在吗?

先完成第 1 段,把容器跑起来。

验收:删容器重建后订单还在吗?

未测:先新增订单,再删除容器并重建。

下一步:先点第 1 步,像平时那样把代码直接拷到服务器上跑,看服务器那边怎样。

知识点:模具、实例和放在外面的数据

面板上已经演过,这里只给命名。

  • 「我电脑上能跑」的根因常是运行环境不同:Node 版本、系统库、依赖版本,见「运行时」「依赖」。
  • 镜像是打包好的模具(环境 + 依赖 + 代码,构建后只读);容器是用镜像跑起来的实例,一个镜像能起很多个容器。
  • 同一个镜像在你电脑和服务器上跑,用的都是镜像里的环境,和宿主机装了什么版本无关。
  • 容器随时可以删掉重建,写在容器里的数据会跟着没;数据库数据和上传文件要挂到 volume。volume 也要备份,见「备份与快照」。
  • 密钥不打进镜像:镜像会被推到仓库、拷到别的机器,密钥应在启动容器时用环境变量传入,见「环境变量」。

什么时候用、怎么用

自己管服务器、又被环境差异坑过时最值得用。

  • 信号:本机能跑、服务器报版本或依赖错误;要在多台机器上跑同一个应用;AI 报告里出现 Dockerfile、docker compose、image、volume。
  • 交代 AI:镜像里写死运行时版本;密钥用环境变量传入;数据库和上传目录挂 volume;用 docker compose 一条命令起停。
  • 验收:在服务器上删掉容器再重建,确认订单、上传文件都还在,行为和本机一致;看镜像内容里没有 .env。
  • 容器挂了谁来拉起:配置重启策略(restart: unless-stopped),作用和「进程守护」一样。
  • 不适用:只有一台机器、托管平台已经帮你管环境时,不必为了时髦强上 Docker;版本出问题时的退路见「回滚」。

正反例:同一句「用 Docker 部署了」

目标都是让应用在服务器上稳定运行,差别只在数据放哪、密钥放哪。

正例数据挂 volume,密钥用环境变量

升级到 myapp:1.1 时直接删旧容器、用新镜像重建,订单和上传的图片都在;镜像发给别人也不会泄露数据库密码。

反例数据写在容器里,.env 打进镜像

第一次升级重建容器,三周的订单全没了;镜像被推到公开仓库,数据库密码跟着公开。

快速自测

AI 报告「已用 Docker 部署,升级方式是删掉旧容器、用新镜像重建」。你上线前最该先确认哪件事?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。