Docker、Compose、Portainer与K8s详解

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
适用范围 单容器管理 单机多服务应用 跨节点集群
编排能力 无 简单服务依赖 高级调度、自愈
扩展性 手动扩展 有限扩展 自动扩缩容
网络 基础网络 自定义网络 高级网络策略
存储 卷挂载 命名卷 持久卷声明
适用场景 开发测试 开发、小型部署 生产环境、大规模部署

发展路径

  1. 学习Docker → 理解容器基础

  2. 学习Docker Compose → 管理多服务应用

  3. 学习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:生产级的容器编排平台

相关推荐
牛马工作号2 小时前
Mosquitto + ACME:从 Docker Compose 部署到 TLS 证书自动续期与加载
运维·docker·容器
空空dream8 小时前
03 | 离线部署 FastAPI + Ollama(qwen2:0.5b):从 Docker 联调到 Kubernetes 验收
docker·ai·kubernetes·fastapi
Linux实战笔记11 小时前
K8s 滚动部署失效?maxUnavailable 参数没搞透
kubernetes·readinessprobe·零停机·滚动部署·maxunavailable
郭老二12 小时前
【docker】docker compose使用,已nginx为例
nginx·docker·容器
张洛闻Eren13 小时前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
a59865213 小时前
Docker云手机端口不通,无法访问|六边云手机教你故障排查完整流程
docker·容器·性能优化·云手机
杰克尼14 小时前
Kubernetes
云原生·容器·kubernetes
ab12376815 小时前
Docker Compose 完整详解
运维·docker·容器
吴声子夜歌15 小时前
Docker入门与实战——容器实战思考
docker·容器
张洛闻Eren15 小时前
Ansible【第二课】:实施 Ansible Playbook
linux·运维·服务器·云原生·kubernetes·k8s·ansible