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

相关推荐
lihe7582 小时前
DSM7.2部署可道云+onlyoffice在线办公系统
docker·onlyoffice·群晖·kodbox·docer-compose
君不见,青丝成雪11 小时前
网关整合验签
大数据·数据结构·docker·微服务·系统架构
oneslide15 小时前
Kubernetes环境部署Redis集群
redis·容器·kubernetes
企鹅侠客15 小时前
k8s之Headless浅谈
云原生·容器·kubernetes
喜欢你,还有大家16 小时前
Kubernetes-架构安装
架构·kubernetes·云计算
SHIPKING39318 小时前
【Docker安装】Windows10专业版安装教程
运维·docker·容器
庸子18 小时前
Kubernetes调度器深度解析:从资源分配到亲和性策略的架构师之路
java·算法·云原生·贪心算法·kubernetes·devops
easy_coder18 小时前
超越故障修复:从 Kubernetes POD 崩溃到 AI 驱动的运维认知重构
云原生·架构·kubernetes·云计算
编程的一拳超人18 小时前
Docker核心概念、常用命令与实战指南
运维·docker·容器