1. 什么是Docker?
Docker是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。
核心概念:
-
镜像(Image):只读模板,包含运行应用所需的所有内容
-
容器(Container):镜像的运行实例
-
仓库(Registry):存储和分发镜像的地方(如Docker Hub)
与传统虚拟机的区别:
bash
传统虚拟机:物理硬件 → 宿主机OS → 虚拟机管理程序 → 每个VM包含完整OS → 应用
Docker容器:物理硬件 → 宿主机OS → Docker引擎 → 容器(共享OS内核)→ 应用
2. Docker具体使用方法
基本命令
bash
# 拉取镜像
docker pull nginx:latest
# 运行容器
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 进入容器
docker exec -it my-nginx bash
# 构建镜像
docker build -t my-app:1.0 .
# 查看镜像
docker images
Dockerfile示例
bash
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
3. Docker Compose是什么?
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。
与Docker的关系:
-
Docker:管理单个容器
-
Docker Compose:管理多个相关联的容器组成的应用
docker-compose.yml示例
bash
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: "redis:alpine"
volumes:
- redis_data:/data
volumes:
redis_data:
使用Compose:
bash
# 启动所有服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs
4. Portainer安装与Docker Compose的关系
Portainer是一个Docker的可视化管理界面。
使用Docker Compose安装Portainer
bash
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
restart: unless-stopped
volumes:
portainer_data:
关系说明:
-
Portainer可以通过Docker命令直接安装,也可以使用Docker Compose安装
-
使用Docker Compose安装更便于管理和维护
-
两者都是Docker生态系统的组成部分,但功能不同
5. Docker、Compose和K8s的关系
层级关系
bash
Docker (容器运行时)
↓
Docker Compose (单机多容器编排)
↓
Kubernetes (集群容器编排)
详细对比
| 特性 | Docker | Docker Compose | Kubernetes |
|---|---|---|---|
| 适用范围 | 单容器管理 | 单机多服务应用 | 跨节点集群 |
| 编排能力 | 无 | 简单服务依赖 | 高级调度、自愈 |
| 扩展性 | 手动扩展 | 有限扩展 | 自动扩缩容 |
| 网络 | 基础网络 | 自定义网络 | 高级网络策略 |
| 存储 | 卷挂载 | 命名卷 | 持久卷声明 |
| 适用场景 | 开发测试 | 开发、小型部署 | 生产环境、大规模部署 |
发展路径
-
学习Docker → 理解容器基础
-
学习Docker Compose → 管理多服务应用
-
学习Kubernetes → 应对生产级需求
实际应用建议
开发环境:
bash
# docker-compose.yml - 适合开发
version: '3.8'
services:
app:
build: .
ports: ["3000:3000"]
develop:
watch:
- action: sync
path: ./app
target: /app
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
生产环境:
bash
# k8s-deployment.yaml - 适合生产
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app:latest
ports:
- containerPort: 3000
-
Docker:容器技术的基础
-
Docker Compose:简化多容器应用管理的工具
-
Portainer:Docker的可视化管理界面
-
Kubernetes:生产级的容器编排平台