Docker 基础详解
Docker 是一个开源的容器平台,能够将应用及其依赖打包成轻量级容器,实现跨环境运行与高效部署。
🚀 什么是 Docker?
Docker 提供操作系统级虚拟化,与传统虚拟机相比:
特性 | Docker 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
占用体积 | MB 级 | GB 级 |
隔离方式 | 内核级别 | 硬件级 |
启动方式 | 直接运行镜像 | 启动完整系统 |
🧱 核心概念
概念 | 描述 |
---|---|
镜像(Image) | 类似操作系统快照,用于创建容器 |
容器(Container) | 镜像的运行实例,轻量、隔离 |
Dockerfile | 用于构建镜像的脚本 |
Volume | 数据持久化机制 |
网络(Network) | 容器之间或与主机通信方式 |
Registry | 镜像仓库(如 Docker Hub、Harbor) |
🧪 基本命令演示
# 查看版本
docker version
# 拉取镜像
docker pull nginx
# 运行容器并映射端口
docker run -d -p 8080:80 nginx
# 查看容器
docker ps -a
# 停止容器
docker stop <id>
# 删除容器
docker rm <id>
🧩 Dockerfile 示例
# 基础镜像
FROM node:18
# 设置工作目录
WORKDIR /app
# 拷贝依赖并安装
COPY package*.json ./
RUN npm install
# 拷贝代码
COPY . .
# 启动命令
CMD ["npm", "start"]
💾 数据卷 Volume
# 本地挂载示例
docker run -v /home/user/data:/data alpine
# 匿名卷
docker run -v /data alpine
# 指定卷名
docker volume create my-data
docker run -v my-data:/data alpine
🧰 Docker Compose 示例
version: "3"
services:
web:
image: nginx
ports:
- "80:80"
backend:
build: ./backend
ports:
- "3000:3000"
docker-compose up -d
🧠 常见网络模式
网络模式 | 说明 |
---|---|
bridge(默认) | 虚拟网桥,容器之间通信 |
host | 与宿主机共用网络 |
none | 无网络连接 |
overlay | 跨主机通信(Swarm/K8s) |
🔐 Docker Tips
- Tips
- Caution
- Info
tip
推荐使用多阶段构建减少镜像体积,提高构建效率。
caution
切勿在生产环境使用 root 用户运行容器,注意安全性配置。
info
Dockerfile 改动尽量靠下放置可变内容,提高缓存命中率。
🔐 安全与权限实践
- 最佳实践
- 扫描工具
tip
- 使用非 root 用户构建镜像
- 限制容器功能:
--cap-drop
- 配置 seccomp/apparmor 规则
docker scan myimage:latest
Docker Hub 支持内置安全漏洞扫描
⚙️ Docker + CI/CD 示例(GitHub Actions)
- name: Build & Push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: myrepo/myapp:latest
适合部署到 Docker Hub、Harbor 等仓库。
🧪 在线练习平台推荐
平台 | 描述 |
---|---|
Play with Docker | 官方免费沙箱,支持真实终端练习 |
Katacoda Docker Scenarios | 交互式课程式训练平台 |
KodeKloud Docker Labs | 面向初学者的动手实验 |
ACloudGuru Docker Lab | 提供付费的实战环境 |
Docker Playground | 类似 sandbox 的交互体验 |
🧠 推荐学习路线
1. 基础阶段
- 安装 Docker Desktop / Engine
- 了解镜像与容器
- 学会使用 Volume 和 Port 映射
2. 实战阶段
- 编写 Dockerfile 构建 Node/Python 项目
- 使用
docker-compose
管理前后端服务 - 持久化日志、数据库文件
3. 进阶阶段
- 镜像瘦身、多阶段构建
- 安全配置、镜像扫描
- 构建流水线 CI/CD(GitHub Actions, GitLab CI)
4. 运维部署阶段
- 使用 Harbor 搭建私有仓库
- 与 Kubernetes 协同部署
- 使用 Prometheus + Grafana 监控容器状态