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

相关推荐
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo14 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客14 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
Hui Baby15 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
用户2333768521817 小时前
Docker 端口"时通时不通"的排查实战
docker
做个文艺程序员17 小时前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器
ShiXZ21317 小时前
Redis docker-compose 部署指南
redis·docker·eureka
梦梦代码精19 小时前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范
Zhu75820 小时前
在k8s环境部署Apache Superset最新版
容器·kubernetes·apache
小的博客20 小时前
windows下安装Docker Desptop
运维·docker·容器