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

相关推荐
杀死那个蝈坦1 小时前
Docker
java·docker·eclipse·tomcat·hibernate
wadesir2 小时前
Debian容器存储管理(Docker中实现数据持久化的完整指南)
运维·docker·debian
忍冬行者2 小时前
基于docker安装jenkins+gitlab+harbor
docker·gitlab·jenkins
百万彩票中奖候选人2 小时前
迁移 Docker 存储目录
java·docker·eureka
0wioiw03 小时前
Docker(基础指令)
运维·docker·容器
Yeliang Wu3 小时前
K8s部署SGLang:原理到实践(基于Ubuntu 22.04)
kubernetes·sglang
vortex53 小时前
Docker 逃逸常见利用方式
运维·docker·容器
0wioiw03 小时前
Docker(Portainer)
运维·docker·容器
能不能别报错4 小时前
k8s的CICD流水线环境搭建实验(containerd版)
云原生·容器·kubernetes
༺๑Tobias๑༻4 小时前
国内可用的DOCKER 镜像源
运维·docker·容器