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

相关推荐
kobe_OKOK_1 分钟前
docker compose命名卷 映射到宿主机的路径
运维·docker·容器
无言听风雨丶1 小时前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
晨陌y5 小时前
Flare自托管导航页教程:Docker部署、多用户、API与公网访问
运维·docker·容器
无言听风雨丶5 小时前
Kubernetes GitOps 持续交付实战:用 Argo CD 让 Git 成为集群事实源
git·elasticsearch·kubernetes
梅孔立7 小时前
Docker 容器网络不通:Tomcat 无法解析 MySQL、Nginx 无法反代 Tomcat 的生产级排查与治理
网络·docker·tomcat
无言听风雨丶15 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
openFuyao16 小时前
openFuyao x 复旦大学软件工程实验室 Panel 回顾:Agentic时代,集群调度技术体系将如何演进?
kubernetes·openfuyao
螺蛳粉 螺蛳粉17 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
相思难忘成疾19 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo20 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器