第九篇:Docker 部署实战——从本地到服务器
【摘要】 前面已经把 Docker 的主要概念讲了一遍。现在把它们串起来。假设我们有一个 Web 项目。第一步:写 Dockerfile例如:FROM node:22-alpineWORKDIR /appCOPY package*.json ./RUN npm ci --omit=devCOPY . .EXPOSE 3000CMD ["node", "server.js"]构建:docker buil...
前面已经把 Docker 的主要概念讲了一遍。
现在把它们串起来。
假设我们有一个 Web 项目。
第一步:写 Dockerfile
例如:
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
构建:
docker build -t my-app:1.0 .
第二步:本地运行
docker run -d \
--name my-app \
-p 3000:3000 \
my-app:1.0
测试:
localhost:3000
确认没问题之后,再考虑部署服务器。
第三步:推送镜像
完整流程通常是:
本地
↓
docker build
↓
Image
↓
Registry
↓
服务器
↓
docker pull
↓
Container
Registry 可以是:
- Docker Hub
- GitHub Container Registry
- 私有 Registry
- 云厂商镜像仓库
第四步:服务器启动
服务器上:
docker pull my-app:1.0
然后:
docker run -d \
--name my-app \
--restart unless-stopped \
-p 3000:3000 \
my-app:1.0
这里:
--restart unless-stopped
可以让容器在服务器重启等情况下按照策略自动恢复。
为什么还需要 Nginx?
实际生产环境通常不会直接:
用户 → :3000
更常见的是:
用户
↓
Nginx :443
↓
Docker Container :3000
Nginx 可以负责:
- HTTPS
- 域名
- 反向代理
- 静态资源
- 请求转发
而应用容器只负责自己的业务。
日志怎么办?
最简单:
docker logs my-app
但生产环境还要考虑:
日志轮转
日志大小
集中式日志
日志保存周期
否则运行几个月之后,Docker 日志可能把磁盘吃满。
数据怎么办?
如果应用有数据库:
Container
↓
Volume
↓
Backup
千万不要认为:
“我用了 Docker,所以数据安全了。”
Docker 解决的是容器化,不是自动备份。
更新应用
最简单的方式:
docker pull my-app:1.1
docker stop my-app
docker rm my-app
docker run ...
更进一步,可以使用:
Docker Compose
+
CI/CD
+
自动部署
这样代码提交之后,就可以自动完成:
构建镜像
↓
推送镜像
↓
服务器拉取
↓
更新服务
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)