从零到一:用 Docker 轻松部署你的第一个 Web 应用
本文面向初学者,用通俗易懂的语言带你从 Docker 基础概念开始,一步步完成 Web 应用的容器化构建与云平台部署。
一、先搞懂:Docker 是什么?
Docker 是一个容器化平台,它能把你的应用、依赖库、系统环境打包成一个独立的「容器」,让应用在任何机器上都能稳定运行,彻底解决「在我电脑上能跑,换台机器就报错」的问题。
核心概念
- 镜像(Image) :只读的模板文件,包含了运行应用所需的全部环境(系统、代码、依赖等),相当于应用的「绿色安装包」。
- 容器(Container) :镜像运行的实例,是一个轻量级、隔离的进程,就像一个「迷你虚拟机」,但启动更快、资源占用更低。
- Dockerfile:用来构建镜像的文本文件,里面记录了构建镜像的每一步指令。
- Docker Hub / 镜像仓库:存放和分享镜像的公共 / 私有平台,你可以下载现成镜像,也能上传自己的作品。
二、编写 Dockerfile:给应用做「打包说明书」
我们以一个简单的 Python Flask Web 应用为例,先准备项目结构:
mywebapp/
├── app.py # Web 应用代码
├── requirements.txt # 依赖清单
└── Dockerfile # 镜像构建文件
1. 示例 app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker! "
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
2. 示例 requirements.txt
Flask==2.3.3
3. 编写 Dockerfile
# 基础镜像:使用官方 Python 3.9 精简版镜像
FROM python:3.9-slim
# 设置容器内的工作目录
WORKDIR /app
# 复制依赖文件到容器,并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码到容器
COPY app.py .
# 声明容器对外暴露的端口
EXPOSE 5000
# 容器启动时执行的命令(启动应用)
CMD ["python", "app.py"]
关键指令解析:
FROM:指定基础镜像,避免从零搭建环境。WORKDIR:设定后续命令的执行目录。COPY:将本地文件复制到容器内。RUN:构建镜像时执行的命令(如安装依赖)。EXPOSE:告知外部容器会使用的端口(仅声明,不实际开放)。CMD:容器启动时的默认命令,只能有一个。
三、构建与运行:让容器在本地跑起来
1. 构建 Docker 镜像
在项目根目录执行以下命令,构建名为 mywebapp 的镜像:
docker build -t mywebapp .
-t:给镜像打上标签(命名),方便识别。.:指定 Dockerfile 所在的当前目录。
2. 启动 Docker 容器
镜像构建完成后,运行容器并映射端口到本地:
docker run -d -p 5000:5000 --name mywebapp-container mywebapp
-d:后台运行容器(守护进程模式)。-p 5000:5000:将主机的 5000 端口映射到容器的 5000 端口。--name:给容器命名,方便后续管理。
3. 验证部署
打开浏览器访问 http://localhost:5000,如果看到 `Hello, Docker! ,说明本地部署成功!
四、云上部署:让你的应用被全世界访问
以 阿里云容器服务(ACK) 为例,介绍云平台部署流程:
1. 推送镜像到阿里云容器 Registry
-
登录阿里云容器 Registry 控制台,创建命名空间和镜像仓库。
-
本地登录 Registry(替换为你的账号信息):
docker login --username=你的阿里云账号 registry.cn-hangzhou.aliyuncs.com -
给本地镜像打标签(对应阿里云仓库地址):
docker tag mywebapp:latest registry.cn-hangzhou.aliyuncs.com/你的命名空间/mywebapp:latest -
推送镜像到仓库:
docker push registry.cn-hangzhou.aliyuncs.com/你的命名空间/mywebapp:latest
2. 在阿里云创建容器应用
- 进入阿里云容器服务控制台,选择「集群」→「无状态」→「创建应用」。
- 填写应用名称,容器镜像选择刚才推送的阿里云镜像地址。
- 配置端口映射:容器端口
5000,服务端口80(或自定义)。 - 选择公网访问方式(负载均衡 / 弹性网卡),完成创建。
- 等待部署完成后,通过公网 IP / 域名访问你的 Web 应用。
常见问题排查
- 端口冲突:如果
5000端口被占用,修改映射命令为-p 5001:5000。 - 镜像构建失败:检查
Dockerfile语法是否正确,依赖包名称是否拼写错误。 - 容器无法访问:确认容器是否正常运行(
docker ps),端口映射是否配置正确。
结语
Docker 让 Web 应用部署变得标准化、可移植、高效,从本地开发到云端部署,全程环境一致,大幅提升了开发与运维效率。