Docker 快速入门:从零到部署
Docker 让应用的打包、分发和部署变得简单一致。本文带你从零开始掌握 Docker。
一、核心概念
三个基本概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 (Image) | 程序 | 只读模板,包含运行应用所需的一切 |
| 容器 (Container) | 进程 | 镜像的运行实例 |
| 仓库 (Registry) | 应用商店 | 存储和分发镜像(如 Docker Hub) |
Docker 架构
开发者 → 构建镜像 → 推送到仓库 → 服务器拉取 → 运行容器
二、安装与配置
安装 Docker
# macOS / Windows:下载 Docker Desktop
# https://www.docker.com/products/docker-desktop
# Linux (Ubuntu)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER # 当前用户加入 docker 组
验证安装
docker --version
docker run hello-world
配置镜像加速
// ~/.docker/daemon.json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
三、常用命令
镜像操作
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 构建镜像
docker build -t myapp:1.0 .
容器操作
# 运行容器
docker run -d --name web -p 8080:80 nginx:latest
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止/启动/重启容器
docker stop web
docker start web
docker restart web
# 查看容器日志
docker logs -f web
# 进入容器
docker exec -it web bash
# 删除容器
docker rm web
# 删除所有停止的容器
docker container prune
run 命令参数详解
docker run \
-d # 后台运行 \
--name myapp # 容器名称 \
-p 3000:3000 # 端口映射 主机:容器 \
-v $(pwd)/data:/data # 挂载卷 主机:容器 \
-e NODE_ENV=production # 环境变量 \
--memory=512m # 内存限制 \
--cpus=1.0 # CPU 限制 \
myapp:latest
四、编写 Dockerfile
Node.js 应用示例
# 基础镜像
FROM node:20-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖文件(利用缓存层)
COPY package*.json ./
# 安装依赖
RUN npm ci --production
# 复制源代码
COPY . .
# 构建应用
RUN npm run build
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
多阶段构建
# 阶段1:构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 阶段2:运行(更小的镜像)
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Dockerfile 最佳实践
- 使用小镜像 — 优先 alpine 版本
- 利用缓存 — 先 COPY 依赖文件,再 COPY 源码
- 多阶段构建 — 构建和运行分离
- 不要运行 root — 添加非特权用户
- .dockerignore — 排除不需要的文件
# .dockerignore
node_modules
dist
.git
*.md
.env
五、Docker Compose
多容器编排工具,用一个 YAML 文件定义所有服务:
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
depends_on:
- db
restart: always
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
Compose 常用命令
# 启动所有服务(后台)
docker compose up -d
# 查看日志
docker compose logs -f
# 停止并删除容器
docker compose down
# 重新构建并启动
docker compose up -d --build
# 查看服务状态
docker compose ps
六、数据管理
Volume(推荐)
# 创建卷
docker volume create mydata
# 挂载卷
docker run -v mydata:/data myapp
# 查看卷
docker volume ls
docker volume inspect mydata
Bind Mount(开发用)
# 挂载主机目录
docker run -v /host/path:/container/path myapp
# 只读挂载
docker run -v /host/path:/container/path:ro myapp
七、网络
# 创建网络
docker network create mynet
# 容器加入网络
docker run --network mynet --name app myapp
# 同一网络内容器可通过名称互访
docker run --network mynet --name db postgres
# app 容器内可以用 db:5432 访问数据库
总结
Docker 的学习曲线虽然一开始有些陡峭,但掌握后的效率提升是巨大的:
- 一致性 — 开发、测试、生产环境完全相同
- 隔离性 — 每个应用独立运行,互不干扰
- 可移植 — 一处构建,处处运行
- 版本管理 — 镜像可以打标签,方便回滚
开始你的容器化之旅吧!🐳
📖 相关阅读
📝
前端开发
2026-07-31
SEO超级外链源码 v3.1让网站外链暴涨,收录飙升!
基于PHP开发的SEO超级外链自动发送系统,内置 2000+ 外链目标URL,一键提交,自动轮换UA、模拟多语言浏览器访问,配合 10大收录增强措施,让你的域名在搜索引擎中快速曝光、批量收录。
#SEO超级外链工具#网站源码#php源码
6 分钟阅读
阅读全文 →
📝
前端开发
2026-07-19
零依赖零构建原生静态 AI 工具导航页|可直接部署开源模板
一款零依赖、零构建的 AI 工具导航页。所有源码为原生 HTML / CSS / JavaScript,双击 index.html 即可在浏览器打开,也可直接上传到任意静态服务器(虚拟主机、对象存储、GitHub Pages 等)使用,全程
#HTML源码#导航源码#静态网页模板
6 分钟阅读
阅读全文 →
🔗
前端开发
2024-12-15
React 开发最佳实践指南(2024 版)
从组件设计到状态管理,从性能优化到代码规范,全面总结 React 开发中的最佳实践。
#React#前端#最佳实践
12 分钟阅读
阅读全文 →