2026年Docker入门指南:从零开始部署你的第一个Web应用

举报
闪烁的星空 发表于 2026/03/25 18:05:10 2026/03/25
【摘要】 2026年Docker入门指南:本文从零开始讲解Docker核心概念(镜像/容器/仓库),通过Node.js实战案例,教你编写生产级Dockerfile、本地运行容器,并部署到Google Cloud Run。适合初学者快速掌握容器化部署全流程。

2026年Docker入门指南:从零开始部署你的第一个Web应用

如果你是一名初学者,一定遇到过这样的场景:代码在自己电脑上运行完美,换到同事电脑就报错;明明按照文档一步步操作,环境就是配不起来。Docker正是解决这些问题的利器。本文将带你从零开始,用最简单的方式理解Docker,并亲手将一个Web应用部署到云端。


前言:为什么你需要了解Docker?

在2026年的今天,Docker已经成为软件开发中不可或缺的工具。它就像一个魔法盒子,能把你的应用程序连同它需要的所有东西打包在一起,无论在哪里打开,运行效果都一模一样。

想象一下:你开发了一个Web应用,需要Node.js 18、特定的依赖库、以及一些配置文件。以前,你要在新服务器上手动安装这些东西,稍有不慎就会出错。现在,你只需要把Docker“盒子”扔到服务器上,一键运行,一切就绪。

本文专为Docker零基础的你设计,全程动手操作,跟着做就能成功。


第一部分:Docker到底是什么?

在动手之前,我们先来搞懂三个核心概念。用厨房做菜的比喻来理解,会非常直观。

1. 镜像(Image):菜谱

镜像是一个只读的模板,里面包含了运行你的应用所需的一切:代码、运行环境、依赖库、配置文件。它就像一份菜谱,详细记录了做一道菜需要什么食材、怎么做。

关键特点:

  • 镜像是静态的,不会改变
  • 镜像是分层的,可以复用已有镜像作为基础(比如官方提供的Node.js镜像)

2. 容器(Container):做好的菜

容器是镜像的运行实例。当你按照菜谱(镜像)开始做菜时,那道正在做的菜就是容器。容器的特点是:

  • 它是动态的,可以启动、停止、删除
  • 每个容器都是隔离的,互不干扰
  • 你可以从同一个镜像启动多个容器(就像按照同一份菜谱做多道菜)

3. 仓库(Registry):图书馆

仓库是用来存放和分享镜像的地方。最著名的是Docker Hub,里面有海量的官方镜像,比如Node.js、Python、MySQL等。你可以:

  • 从仓库拉取(pull)别人做好的镜像
  • 把自己做的镜像推送(push)到仓库,分享给团队或全世界

关系总结

你从仓库(图书馆)拿到一份菜谱(镜像),按照菜谱做了一道菜(容器),这道菜被放在一个独立的盘子里(隔离环境)。


第二部分:实战准备——创建你的第一个Node.js应用

我们先用一个最简单的Node.js应用作为“食材”。

1. 创建项目文件夹

mkdir my-docker-app
cd my-docker-app

2. 创建package.json文件

{
  "name": "my-docker-app",
  "version": "1.0.0",
  "description": "我的第一个Docker化应用",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

3. 创建src/index.js文件

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello Docker!我的第一个容器化应用运行成功!');
});

app.listen(port, () => {
  console.log(`应用运行在 http://localhost:${port}`);
});

此时,你的项目结构应该是:

my-docker-app/
├── package.json
└── src/
    └── index.js

第三部分:编写Dockerfile——为你的应用制作“菜谱”

Dockerfile是一个文本文件,里面写着一系列指令,告诉Docker如何构建你的镜像。

第一步:创建一个初版Dockerfile

在项目根目录下创建名为Dockerfile的文件(注意没有后缀名),输入以下内容:

# 使用官方Node.js 18的轻量版作为基础镜像
FROM node:18-alpine

# 在镜像中创建工作目录
WORKDIR /app

# 复制所有文件到工作目录
COPY . .

# 安装依赖
RUN npm install

# 暴露应用运行的端口
EXPOSE 3000

# 启动命令
CMD ["node", "src/index.js"]

这个Dockerfile能工作,但不够好。我们来看看它的问题,然后优化。

第二步:优化版Dockerfile(多阶段构建)

把上面的Dockerfile替换成下面这个:

# 第一阶段:构建阶段
FROM node:18-alpine AS builder

WORKDIR /app

# 先复制依赖文件(变化频率低)
COPY package*.json ./

# 只安装生产依赖
RUN npm ci --only=production

# 复制源代码
COPY . .

# 第二阶段:生产阶段
FROM node:18-alpine

WORKDIR /app

# 创建一个非root用户运行应用(更安全)
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 从构建阶段复制依赖和代码
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app ./

# 切换到非root用户
USER appuser

EXPOSE 3000

CMD ["node", "src/index.js"]

优化点说明

  1. 利用缓存:先复制package.json,只有依赖变化时才重新安装,大大加快构建速度
  2. 只装生产依赖npm ci --only=production只安装运行需要的包,镜像更小
  3. 多阶段构建:最终镜像只包含运行所需,不包含构建工具,体积更小
  4. 非root用户:提升安全性

第三步:创建.dockerignore文件

在项目根目录创建.dockerignore文件,排除不需要打包的文件:

node_modules
.git
*.log
.DS_Store

这会让构建更快,也避免把本地依赖打包进去。


第四部分:构建并运行容器

1. 构建镜像

打开终端,进入项目目录,执行:

docker build -t my-first-app:1.0 .
  • -t:给镜像打标签(名称:版本)
  • .:表示当前目录

构建成功后,可以用docker images查看本地所有镜像,你会看到my-first-app出现在列表里。

2. 运行容器

docker run -d -p 8080:3000 --name my-running-app my-first-app:1.0
  • -d:后台运行
  • -p 8080:3000:把主机的8080端口映射到容器的3000端口
  • --name:给容器起个名字

现在打开浏览器,地址栏输入 localhost:8080,你应该能看到“Hello Docker!”的欢迎信息。

3. 常用容器管理命令

命令 作用
docker ps 查看运行中的容器
docker ps -a 查看所有容器(包括已停止的)
docker logs -f my-running-app 实时查看容器日志
docker stop my-running-app 停止容器
docker start my-running-app 启动已停止的容器
docker rm my-running-app 删除容器(需先停止)
docker exec -it my-running-app /bin/sh 进入容器内部

可以尝试最后一个命令,运行后进入容器,输入ls,你会发现里面有我们复制的文件。


第五部分:部署到云端——让全世界都能访问

本地运行成功后,我们来把它部署到云端。这里以Google Cloud Run为例,它是最简单的全托管容器运行平台,免费额度足够初学者使用。

准备工作

  1. 注册一个Google Cloud账号(需要信用卡,但免费额度足够)
  2. 安装Google Cloud CLI

步骤1:登录并配置项目

# 登录
gcloud auth login

# 设置你的项目ID(在GCP控制台创建)
gcloud config set project [你的项目ID]

步骤2:启用必要API

gcloud services enable artifactregistry.googleapis.com run.googleapis.com

步骤3:创建镜像仓库

gcloud artifacts repositories create my-app-repo \
  --repository-format=docker \
  --location=us-central1 \
  --description="我的第一个Docker应用仓库"

步骤4:标记并推送镜像

# 为镜像打上云端仓库的标签
docker tag my-first-app:1.0 us-central1-docker.pkg.dev/[你的项目ID]/my-app-repo/my-first-app:1.0

# 配置Docker认证
gcloud auth configure-docker us-central1-docker.pkg.dev

# 推送镜像到云端
docker push us-central1-docker.pkg.dev/[你的项目ID]/my-app-repo/my-first-app:1.0

步骤5:部署到Cloud Run

gcloud run deploy my-first-app-service \
  --image us-central1-docker.pkg.dev/[你的项目ID]/my-app-repo/my-first-app:1.0 \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

部署成功后,终端会返回一个网址,类似:https://my-first-app-service-xxxxxx-uc.a.run.app。点击它,你就看到自己的应用已经运行在云端了!


第六部分:高质量的博客是怎样炼成的?

写到这里,我其实一直在实践一篇高质量技术博客的三大要素:

1. 准确性与实用性

  • 代码有详细注释,告诉你每行在做什么
  • 明确标注版本号(如node:18-alpine),避免版本差异带来的奇怪问题

2. 清晰的结构与逻辑

  • 从概念到实践,循序渐进
  • 用做菜的比喻降低理解门槛
  • 每个部分都有小结,帮助回顾

3. 读者体验

  • 语言平常、亲切
  • 代码块带语法高亮,便于阅读

结语:你的容器化之旅才刚刚开始

恭喜你!你已经完成了:

  • 理解了Docker的核心概念
  • 编写了一个生产级的Dockerfile
  • 在本地成功运行了容器化应用
  • 将应用部署到了全球云平台

这只是Docker世界的冰山一角。下一步,你可以探索:

  • Docker Compose:同时管理多个容器(比如应用+数据库)
  • Kubernetes:容器编排的行业标准,用于大规模集群管理
  • CI/CD:代码推送后自动构建、测试、部署

最重要的建议:别光看,打开终端跟着做一遍。如果遇到问题,查看日志(docker logs)是排错的首选项。

如果你在操作中遇到任何问题,欢迎在评论区留言,我会尽力解答。期待看到你的第一个容器化应用!🚀

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。