服务器容器化部署:新手30分钟跑通,再也不怕项目搬家崩
时间:2026年06月05日 11:30:45
来源:易频IT社区
上周加班到凌晨三点,小王哭丧着脸找我吐槽:刚把测试通的电商小程序搬到阿里云,服务器直接给我“甩脸子”,一会儿是Node.js版本不对,一会儿是Redis密码没生效,折腾到天亮才勉强能用,明天还得搬MySQL备份,想想都头大。
是不是戳中你的痛处了?不管你是刚做小程序的个人站长,还是公司里管小项目的技术新手,环境不一致、部署慢、出问题难查这些破事,肯定没少耽误你事。今天这篇文章,我用最干的大白话,给你讲透服务器容器化部署的核心逻辑,还有一个30分钟就能跑通的Node.js+Redis实战,看完直接用,再也不用当“搬家救火员”。
一、先搞懂容器化是啥,别被技术词唬住
别听网上瞎扯什么“微服务底座”“轻量级虚拟化”,其实就是一句话的事,把你的项目和要用的所有环境,打包成一个“随身U盘”,插哪里都能用。
1.1 举个更具体的生活例子
以前你搬家(换服务器),得自己搬家具(项目代码)、搬冰箱电源插座(Node.js环境)、装WiFi密码配置(Redis配置),搬完还要一个个调试位置(适配服务器参数),累得半死不说,万一插座型号不对(Linux发行版不一样),还得临时找转换器(改代码/降版本)。
现在用容器化,你把家具、电源插座、WiFi密码提前打包在一个集装箱里(镜像),搬家的时候直接把集装箱运过去,往服务器的空地上(容器运行环境)一放,通电就能用,连家具的位置都和之前一模一样。
1.2 新手只需要记住两个核心词
不用记一堆Docker、K8s的大词,今天咱们只搞最简单的单容器部署,记住这两个就行:
- 镜像(Image):就是刚才说的“打包好的集装箱”,只读的,你不能在里面改东西,要改得重新打包。
- 容器(Container):就是“从镜像里拆出来正在运行的房子”,是临时的,重启、删除都不会影响镜像本身。
二、准备工作,5分钟搞定所有“搭架子”的事
新手别乱下乱七八糟的软件,咱们用最通用的Docker,先在自己电脑和服务器上都装上就行。
2.1 电脑上装Docker Desktop
不管你是Windows还是Mac,直接搜“Docker Desktop官网”,下载对应版本,一路“下一步”安装就行。
避坑提醒:Windows电脑要先开Hyper-V或者WSL2,安装的时候Docker会提示你,跟着重启电脑就好,别跳过重启。
2.2 服务器上装Docker
服务器一般都是CentOS或者Ubuntu,我给你两个最常用的一行命令,复制粘贴就行:
CentOS 7/8的命令
```
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
```
Ubuntu 20.04/22.04的命令
```
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
```
安装完记得启动Docker,再设置开机自启,不然服务器重启了项目就停了:
```
systemctl start docker
systemctl enable docker
```
三、30分钟实战:把你的Node.js小项目打包上线
我假设你有一个最简单的Node.js+Redis的计数器项目,没有的话也没关系,我给你现成的代码片段,跟着敲就行。
3.1 先在本地写好项目代码
新建一个文件夹叫`counter-demo`,里面放三个文件:
第一个文件:index.js(主程序)
```javascript
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
// 这里注意:容器里不能用localhost
host: 'redis-server',
port: 6379
});
client.set('visits', 0);
app.get('/', (req, res) => {
client.get('visits', (err, visits) => {
res.send(`你是第${parseInt(visits) + 1}位访客!`);
client.set('visits', parseInt(visits) + 1);
});
});
app.listen(8080, () => {
console.log('服务运行在8080端口');
});
```
第二个文件:package.json(依赖声明)
```json
{
"dependencies": {
"express": "",
"redis": "2.8.0"
},
"scripts": {
"start": "node index.js"
}
}
```
第三个文件:Dockerfile(打包规则)
新手别自己瞎写Dockerfile,就用这个通用的Node.js模板,复制粘贴就行:
```dockerfile
第一步:选一个基础镜像,相当于选好集装箱的壳
FROM node:14-alpine
第二步:在容器里建一个工作目录
WORKDIR /app
第三步:把package.json复制进去,先装依赖
COPY package.json ./
RUN npm install
第四步:把剩下的所有文件复制进去
COPY ./ ./
第五步:告诉别人容器要开哪个端口
EXPOSE 8080
第六步:启动项目
CMD ["npm", "start"]
```
避坑提醒:Dockerfile的名字一个字都不能错,必须是D开头大写,后面全小写,没有后缀。
3.2 在本地测试一下,确保能跑通
打开你的终端(Windows用PowerShell,Mac用Terminal),进入`counter-demo`文件夹,执行下面三个命令:
1. 拉取Redis镜像
```
docker pull redis:6-alpine
```
2. 启动Redis容器
```
docker run -d --name redis-server redis:6-alpine
```
3. 打包你的项目镜像并启动
```
打包镜像,注意最后有个点!
docker build -t my-counter .
启动你的项目容器,和Redis连在一起
docker run -d -p 8080:8080 --link redis-server:redis-server my-counter
```
现在打开浏览器,输入`http://localhost:8080`,刷新几次,看看访客数会不会涨,涨了就说明本地测试成功。
3.3 推送到阿里云镜像仓库,再搬到服务器
自己拉镜像推镜像太慢,咱们用国内的阿里云镜像仓库,免费的,注册一个就行。
1. 注册并创建阿里云镜像仓库
打开阿里云控制台,搜“容器镜像服务”,点进去,选“个人版”,创建一个命名空间(比如叫`my-namespace`),再创建一个仓库(比如叫`counter-demo`),仓库类型选“公开”(新手方便,后续可以改私有)。
2. 在本地登录并推送到阿里云
创建完仓库,阿里云会给你4个命令,直接复制粘贴到终端就行,注意把命令里的`xxx`换成你自己的信息。
3. 在服务器上拉取并启动
用SSH登录你的服务器,执行和本地差不多的命令,只是镜像地址换成阿里云的:
```
拉取Redis镜像(和本地一样)
docker pull redis:6-alpine
启动Redis容器(和本地一样)
docker run -d --name redis-server redis:6-alpine
拉取你的项目镜像
docker pull registry.cn-hangzhou.aliyuncs.com/my-namespace/counter-demo:latest
启动你的项目容器
docker run -d -p 8080:8080 --link redis-server:redis-server registry.cn-hangzhou.aliyuncs.com/my-namespace/counter-demo:latest
```
现在打开浏览器,输入`http://你的服务器公网IP:8080`,看看能不能用!
四、几个新手必备的小技巧,避免踩大坑
刚才的实战跑通了,但日常用还得知道这几个点:
4.1 容器重启后数据不会丢?
刚才的Redis容器,如果重启或者删除,访客数会清零,因为Redis默认存在内存里。解决办法也很简单,启动Redis的时候加个参数,把数据存到服务器的硬盘上:
```
docker run -d --name redis-server -v /root/redis-data:/data redis:6-alpine --appendonly yes
```
4.2 项目代码改了怎么更新?
改完代码后,重新打包镜像、推送到阿里云、服务器上拉取新镜像、删除旧容器、启动新容器就行,步骤和刚才的差不多,熟练了3分钟就能搞定。
今天这篇文章讲的是最基础的单容器部署,但已经能解决90%的个人站长和小项目的问题了。别犹豫,现在就去建个文件夹,跟着我写的代码敲一遍,先在本地跑通,再推到服务器上试试,相信我,试过一次你就会爱上容器化部署的。