容器解决了什么问题
传统部署最头疼的是环境差异:本地的 Node 版本、依赖库和服务器对不上,代码一上生产就翻车。Docker 把应用和它的运行环境一起打包成镜像,无论在哪里运行,行为都一致。
三个核心概念
- 镜像(Image):应用的只读模板,包含代码、运行时、依赖和配置。
- 容器(Container):镜像的运行实例,彼此隔离,可启动、停止、删除。
- Dockerfile:构建镜像的配方文件,用指令描述每一步。
写一个最简单的 Dockerfile
以一个 Node 应用为例:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]逐行理解:FROM 指定基础镜像,WORKDIR 设置工作目录,COPY 拷贝文件,RUN 在构建时执行命令,CMD 定义容器启动命令。
构建与运行
docker build -t my-app .
docker run -d -p 3000:3000 --name my-app my-app-d 后台运行,-p 把容器端口映射到宿主机,浏览器访问 http://服务器IP:3000 即可看到应用。
部署到服务器的建议
服务器装好 Docker 后,把镜像推送到 Docker Hub 或私有仓库,服务器拉取运行即可,彻底告别手动装依赖。配合 docker compose 还能一键编排数据库、缓存等多个容器。生产环境建议加上 --restart=always 让容器异常退出后自动拉起,再配合日志与监控,一套简单的容器化运维就成型了。