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