八.Docker-compose容器编排-生产环境用Kubernetes替代
八.Docker-compose容器编排-生产环境用Kubernetes替代
- 1.基础概念
- 2.应用场景
- 3.下载安装
- 4. compose常用命令
- 5. compose编排微服务
- 6.轻量级可视化工具Portainer
- 7. Docker容器监控 CAdvisor+InfluxDB+Granfana
1.基础概念
Docker Compose 是一个容器编排工具,用于定义和运行多Docker 容器的应用程序。它通过一个 YAML 配置文件来管理多容器 Docker 应用。
- 服务 (Services)
一个应用组件(如 Web 服务器、数据库等)
可以运行多个相同容器实例
定义镜像、端口、环境变量等配置 - 项目 (Project)
一组相关服务的集合
通常对应一个完整的应用程序
通过 docker-compose.yml 文件定义 - 容器编排
自动化容器的创建、启动、连接和管理
简化多容器应用的部署流程
Compose核心基础概念:
一文件:docker-compose.yml
两要素:
- 服务(service):一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器
- 工程(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose使用的三个步骤:
- 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
- 使用docker-compose.yml定义一个完整业务单元,安排好整体应用中的各个容器服务。
- 最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线
2.应用场景
-
多容器应用管理
一键启动完整应用栈# 启动所有服务 docker-compose up # 后台启动 docker-compose up -d # 停止所有服务 docker-compose down服务间网络互通
自动创建虚拟网络服务间可通过服务名互相访问简化微服务间通信配置 -
开发环境搭建
快速创建开发环境:
1)数据库服务(MySQL、PostgreSQL、MongoDB等)
2)缓存服务(Redis、Memcached)
3)消息队列(RabbitMQ、Kafka)
4)Web服务器(Nginx、Apache)
环境隔离:# 不同环境使用不同配置 version: '3.8' services:app:build: .environment:- ENV=development # 开发环境volumes:- ./app:/app # 代码挂载,实时更新 -
应用部署和测试
简化部署流程
1)配置即代码,版本控制
2)一键部署到不同环境
3)快速回滚和恢复
集成测试环境# 测试专用配置 services:test-app:build: .depends_on:- test-db- test-redistest-db:image: mysql:8.0environment:MYSQL_DATABASE: test_db -
微服务架构原型
服务拆分和管理
1)独立配置每个微服务
2)统一管理服务依赖关系
3)灵活调整服务规模
负载均衡和扩展services:web:image: nginxdeploy:replicas: 3 # 启动3个实例 -
CI/CD 集成
自动化测试环境
1)流水线中快速启动测试环境
2)并行运行多个测试场景
3)测试完成后自动清理
部署验证
1)预发布环境验证
2)蓝绿部署测试
3)回滚测试
3.下载安装
安装方式
-
通过 Docker CLI 插件方式(推荐)
Docker Compose v2 已经集成到 Docker CLI 中docker compose version # 检查是否已安装
使用方式:# Docker Compose v2(推荐) docker compose up # 验证方案 docker compose version -
独立安装
# 下载2.29.2版本 curl -L "https://github.com/docker/compose/releases/download/2.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加执行权限 sudo chmod +x /usr/local/bin/docker-compose使用方式:
# 传统方式(仍可使用) docker-compose up # 验证方案 docker-compose –version # 卸载 sudo rm /usr/local/bin/docker-compose
4. compose常用命令
docker compose -h # 查看帮助
docker compose up # 启动所有docker-compose服务
docker compose up -d # 启动所有docker-compose服务并后台运行
docker compose down # 停止并删除容器、网络、卷、镜像。
docker compose exec yml里面的服务id # 进入容器实例内部 docker compose exec docker-compose.yml文件中写的服务id /bin/bash
docker compose ps # 展示当前docker-compose编排过的运行的所有容器
docker compose top # 展示当前docker-compose编排过的容器进程
docker compose logs yml里面的服务id # 查看容器输出日志
docker compose config # 检查配置
docker compose config -q # 检查配置,有问题才有输出
docker compose restart # 重启服务
docker compose start # 启动服务
docker compose stop # 停止服务
5. compose编排微服务
若有mysql,redis,应用3个容器。普通启停时有如下问题:
- 先后顺序要求固定,先mysql+redis才能应用访问成功
- 容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错,要么生产Ip写死(可以但是不推荐)
- 多容器应用频繁启停比较麻烦
Docker Compose能解决的问题:
- 启动顺序控制
depends_on 可以控制容器启动顺序
确保MySQL、Redis先于应用容器启动 - 网络配置
提供稳定的容器间通信
使用服务名称而非IP地址 - 基础依赖管理
简化多容器应用的部署流程
使用compose:
1) 编写docker-compose.yml文件
模板:
# Docker Compose 文件版本声明
# 3.8 是目前推荐的版本,支持大多数 Docker 功能
version: "3.8"# 服务定义部分 - 定义所有需要运行的容器服务
services:# Web 服务定义 - Nginx 反向代理服务器web:# 使用官方 nginx:alpine 镜像(轻量级)image: nginx:alpine# 自定义容器名称(必须唯一)container_name: web-server# 端口映射配置ports:# 主机端口:容器端口 - HTTP 服务- "80:80"# 主机端口:容器端口 - HTTPS 服务- "443:443"# 可选:UDP 端口映射示例# - "53:53/udp"# 数据卷挂载配置volumes:# 绑定挂载:将本地 html 目录挂载到 nginx 静态文件目录(只读)- ./html:/usr/share/nginx/html:ro# 绑定挂载:将本地 nginx 配置文件挂载到容器内(只读)- ./nginx.conf:/etc/nginx/nginx.conf:ro# 可选:挂载 SSL 证书# - ./ssl:/etc/ssl:ro# 网络连接配置networks:# 连接到前端网络(与应用服务通信)- frontend# 服务依赖关系配置depends_on:# 简单依赖:等待 app 服务启动后再启动- app# 重启策略配置# unless-stopped: 除非手动停止,否则总是重启restart: unless-stopped# 健康检查配置healthcheck:# 检查命令:使用 wget 测试 Web 服务是否响应test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost"]# 检查间隔:每 30 秒检查一次interval: 30s# 超时时间:每次检查最多等待 10 秒timeout: 10s# 重试次数:失败后重试 3 次才标记为不健康retries: 3# 启动宽限期:容器启动后等待 5 秒再开始健康检查start_period: 5s# 环境变量配置environment:# 设置时区- TZ=Asia/Shanghai# 可选:设置 nginx 工作进程数# - NGINX_WORKER_PROCESSES=auto# 标签配置(用于元数据标记)labels:# 服务描述标签- "com.example.description=Web Server"# 版本标签- "com.example.version=1.0"# 日志配置logging:driver: "json-file"options:# 日志文件最大大小max-size: "10m"# 保留的日志文件数量max-file: "3"# 容器运行时配置# 限制内存使用(可选)# mem_limit: 512m# 限制 CPU 使用(可选)# cpus: 0.5# 应用服务定义 - 主应用程序app:# 构建配置:从 Dockerfile 构建镜像build:# 构建上下文路径(相对于 docker-compose.yml 文件)context: ./app# Dockerfile 文件名dockerfile: Dockerfile# 构建参数(可选)args:# 构建时传递的参数- BUILD_ENV=production# - APP_VERSION=1.0.0# 自定义容器名称container_name: app-server# 环境变量配置environment:# 数据库连接 URL- DATABASE_URL=mysql://user:pass@db:3306/mydb# Redis 连接 URL- REDIS_URL=redis://redis:6379# 应用运行环境- NODE_ENV=production# 日志级别- LOG_LEVEL=info# 时区设置- TZ=Asia/Shanghai# 数据卷挂载volumes:# 命名卷挂载:应用数据持久化- app_data:/app/data# 绑定挂载:配置文件- ./app/config:/app/config:ro# 绑定挂载:临时文件目录- ./tmp:/app/tmp# 网络连接配置networks:# 连接到前端网络(与 Web 服务通信)- frontend# 连接到后端网络(与数据库、缓存通信)- backend# 服务依赖关系(带条件)depends_on:# 等待数据库服务健康后再启动db:condition: service_healthy# 等待 Redis 服务启动后再启动redis:condition: service_started# 重启策略restart: unless-stopped# 健康检查healthcheck:# 检查应用健康状态的命令(根据实际应用调整)test: ["CMD", "curl", "-f", "http://localhost:3000/health"]interval: 30stimeout: 10sretries: 3start_period: 30s# 暴露端口(容器间通信,不映射到主机)expose:# 应用服务端口- "3000"# 标签配置labels:- "com.example.description=Application Server"- "com.example.version=1.0"# 日志配置logging:driver: "json-file"options:max-size: "20m"max-file: "5"# 用户配置(以特定用户运行)user: "1000:1000"# 工作目录working_dir: /app# 数据库服务定义 - MySQLdb:# 使用 MySQL 8.0 镜像image: mysql:8.0# 自定义容器名称container_name: database# 环境变量配置(MySQL 特定)environment:# MySQL root 用户密码MYSQL_ROOT_PASSWORD: rootpass# 创建默认数据库MYSQL_DATABASE: mydb# 创建普通用户MYSQL_USER: user# 普通用户密码MYSQL_PASSWORD: pass# 设置默认认证插件MYSQL_DEFAULT_AUTHENTICATION_PLUGIN: mysql_native_password# 时区设置TZ: Asia/Shanghai# 数据卷挂载volumes:# 命名卷:数据库数据持久化- db_data:/var/lib/mysql# 绑定挂载:初始化脚本目录- ./init:/docker-entrypoint-initdb.d:ro# 绑定挂载:MySQL 配置文件- ./mysql/conf:/etc/mysql/conf.d:ro# 网络连接networks:# 连接到后端网络- backend# 重启策略restart: unless-stopped# 健康检查healthcheck:# MySQL 健康检查命令test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 10stimeout: 5sretries: 5start_period: 60s# 暴露端口expose:# MySQL 默认端口- "3306"# 端口映射(可选:允许外部访问)ports:# 主机端口:容器端口- "3306:3306"# 命令覆盖(自定义启动参数)command: # MySQL 启动参数- '--character-set-server=utf8mb4'- '--collation-server=utf8mb4_unicode_ci'- '--max-connections=1000'# 标签配置labels:- "com.example.description=MySQL Database"- "com.example.version=8.0"# 日志配置logging:driver: "json-file"options:max-size: "50m"max-file: "3"# 缓存服务定义 - Redisredis:# 使用 Redis Alpine 镜像(轻量级)image: redis:alpine# 自定义容器名称container_name: cache# 数据卷挂载volumes:# 命名卷:Redis 数据持久化- redis_data:/data# 绑定挂载:Redis 配置文件- ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro# 网络连接networks:# 连接到后端网络- backend# 重启策略restart: unless-stopped# 命令覆盖:使用配置文件启动command: redis-server /usr/local/etc/redis/redis.conf# 暴露端口expose:# Redis 默认端口- "6379"# 端口映射(可选)ports:# 主机端口:容器端口- "6379:6379"# 健康检查healthcheck:# Redis 健康检查命令test: ["CMD", "redis-cli", "ping"]interval: 30stimeout: 3sretries: 3start_period: 10s# 标签配置labels:- "com.example.description=Redis Cache"- "com.example.version=alpine"# 日志配置logging:driver: "json-file"options:max-size: "10m"max-file: "3"# sysctls 配置(系统内核参数)sysctls:# 设置共享内存大小(Redis 需要)- net.core.somaxconn=1024# 网络定义部分
networks:# 前端网络定义frontend:# 网络驱动:桥接网络driver: bridge# 网络配置选项driver_opts:# 网络驱动特定选项com.docker.network.bridge.name: frontend-br# 网络标签labels:- "com.example.description=Frontend Network"# 后端网络定义backend:# 网络驱动:桥接网络driver: bridge# 网络配置选项driver_opts:# 网络驱动特定选项com.docker.network.bridge.name: backend-br# 内部网络:不允许访问外部网络(更安全)internal: true# 网络标签labels:- "com.example.description=Backend Network"# 数据卷定义部分
volumes:# 应用数据卷app_data:# 卷标签labels:- "com.example.description=Application Data Volume"# 数据库数据卷db_data:# 卷标签labels:- "com.example.description=Database Data Volume"# Redis 数据卷redis_data:# 卷标签labels:- "com.example.description=Redis Data Volume"# 可选:外部卷(使用已存在的卷)# external_volume:# external: true# name: existing-volume-name# 配置文件定义(可选)
configs:# Nginx 配置文件nginx_config:file: ./nginx.conf# 应用配置文件app_config:file: ./app/config/app.yml# 密钥定义(可选,用于敏感数据)
secrets:# 数据库密码密钥db_password:file: ./secrets/db_password.txt# SSL 证书密钥ssl_key:
file: ./secrets/server.key
实例:
version: "3.8"services:# 单应用服务app:# 从 Dockerfile 构建应用镜像build:# 构建上下文:/usr/local/docker/mybuildfile/docker-compose-fenli目录context: /usr/local/docker/mybuildfile/docker-compose-fenli# Dockerfile文件位置:/usr/local/docker/mybuildfile/docker-compose-fenli/Dockerfile dockerfile: Dockerfile# 构建参数(可选)args:- BUILD_ENV=prod- APP_VERSION=1.0.0# 自定义容器名称container_name: fenli-docker-compose# 环境变量配置environment:# 连接到已存在的 Redis 集群- REDIS_CLUSTER_NODES=redis-node1:6381,redis-node2:6382,redis-node4:6384# 或者如果是单个 Redis 实例# - REDIS_HOST=redis-master# - REDIS_PORT=6379- REDIS_PASSWORD=123456# 连接到已存在的 MySQL 集群# - DATABASE_URL=mysql://user:password@mysql-master:3306/database_name# 或者多个数据库节点(根据应用支持情况)- MYSQL_CLUSTER_NODES=mysql-master:3307,mysql-slave:3308- MYSQL_USERNAME=root- MYSQL_PASSWORD=root- MYSQL_DATABASE=testdb# 应用配置- NODE_ENV=prod- LOG_LEVEL=info- TZ=Asia/Shanghai- APP_PORT=8080# 添加 JVM 参数配置- JAVA_OPTS=-Xmx512m -Xms256m# 数据卷挂载volumes:# 应用数据持久化- app_data:/app/data# 配置文件挂载- ./app/config:/app/config:ro# 日志目录挂载- ./logs:/app/logs# 临时文件目录- /tmp:/app/tmp# 网络配置 - 连接到所有必要的网络networks:# 应用网络(与外部通信)- app-network# Redis 集群网络- redis-cluster-network# MySQL 集群网络- mysql-cluster-network# 重启策略restart: unless-stopped# 健康检查healthcheck:# 根据您的应用实际情况调整健康检查命令test: ["CMD", "curl", "-f", "http://localhost:8080/"]interval: 30stimeout: 10sretries: 3start_period: 60s# 暴露端口(供内部服务访问)expose:- "8080"# 对外端口映射ports:# 应用服务端口映射到主机- "8080:8080"# 如果有管理界面或其他端口# - "3001:3001"# 标签配置labels:- "com.example.description=My Application Service"- "com.example.version=1.0.0"- "com.example.environment=prod"# 日志配置logging:driver: "json-file"options:max-size: "50m"max-file: "5"# 资源限制(可选)# deploy:# resources:# limits:# memory: 1G# cpus: '0.5'# reservations:# memory: 512M# cpus: '0.25'# 用户配置
# user: "1000:1000"# 工作目录working_dir: /app# 网络配置 - 连接到已存在的外部网络
networks:# 应用网络(用于对外服务)app-network:driver: bridge# 如果需要自定义网络配置driver_opts:com.docker.network.bridge.name: app-brlabels:- "com.example.description=Application Network"# Redis 集群网络(连接到已存在的 Redis 集群网络)redis-cluster-network:# 使用外部网络external:# 已存在的 Redis 集群网络名称name: bridge# 网络标签labels:- "com.example.description=Redis Cluster Network"# MySQL 集群网络(连接到已存在的 MySQL 集群网络)mysql-cluster-network:# 使用外部网络external:# 已存在的 MySQL 集群网络名称name: bridge# 网络标签labels:- "com.example.description=MySQL Cluster Network"# 数据卷配置
volumes:# 应用数据卷(持久化存储)app_data:# 卷标签labels:- "com.example.description=Application Data Volume"- "com.example.type=persistent"# 如果需要额外的数据卷可以在这里定义# logs_data:# labels:# - "com.example.description=Application Logs Volume"# 配置文件定义(可选)
# configs:
# # 应用配置文件
# app_config:
# file: ./app/config/application.yml
# # 日志配置文件
# log_config:
# file: ./app/config/logback.xml# 密钥定义(用于敏感数据,可选)
# secrets:
# # 数据库密码
# db_password:
# # 从文件读取密钥
# file: ./secrets/db_password.txt
# # Redis 密码(如果需要)
# redis_password:
# file: ./secrets/redis_password.txt
# # 应用密钥
# app_secret:
# file: ./secrets/app_secret.key
2) 改造微服务项目
修改yml,不再通过ip访问而是通过容器服务名进行容器内部访问。
因为容器间通信使用的是容器内部端口,而不是映射到主机的端口,所以应该使用容器内的标准MySQL端口3306
注意: 如果容器使用了host网络模式,无法连接到其他网络。这是host网络模式的限制。我redis就是host,所以只能ip+端口访问


3) 准备应用镜像相关文件dockerfile,jar包,docker-compose.yml
Dockerfile文件:
# 基础镜像
FROM openjdk:8-jdk-alpine
# 添加元数据标签
LABEL version="1.0" description="前后端分离微服务后端项目"
LABEL maintainer=1576193328@qq.com
# 创建应用目录
WORKDIR /app
# VOLUME 指定临时文件目录为/tmp,docker会在主机/var/lib/docker目录下创建一个临时目录,将这个临时目录链接到容器的/tmp
VOLUME /tmp
# 复制应用文件
COPY springboot-fenli-back-end-1.0-SNAPSHOT.jar app.jar
#暴露8080端口作为微服务
EXPOSE 8080
# 安装 curl
RUN apk add --no-cache curl
# 使用应用根路径或实际存在的端点进行健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \CMD curl -f http://localhost:8080/ || exit 1
# 设置 JVM 参数
ENV JAVA_OPTS="-Xmx512m -Xms256m"
# 运行应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
docker-compose.yml:
version: "3.8"services:# 应用服务app:# 使用已构建的应用镜像image: fenli-docker-compose:1.0# 自定义容器名称container_name: fenli-docker-compose# 使用自定义网络networks:- app-network# 玎境变量配置environment:# 应用配置- NODE_ENV=prod- LOG_LEVEL=info- TZ=Asia/Shanghai# 添加 JVM 参数配置- JAVA_OPTS=-Xmx512m -Xms256m# 数据卷挂载volumes:# 应用数据持久化- app_data:/app/data# 配置文件挂载- ./app/config:/app/config:ro# 日志目录挂载- ./logs:/app/logs# 临时文件目录- /tmp:/app/tmp# 重启策略restart: unless-stopped# 健康检查healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/"]interval: 30stimeout: 10sretries: 3start_period: 60s# 暴露端口(供内部服务访问)expose:- "8080"# 对外端口映射ports:# 应用服务端口映射到主机- "8080:8080"# 标签配置labels:- "com.example.description=My Application Service"- "com.example.version=1.0.0"- "com.example.environment=prod"# 日志配置logging:driver: "json-file"options:max-size: "50m"max-file: "5"# 工作目录working_dir: /app# 创建自定义网络
networks:app-network:driver: bridge# 数据卷配置
volumes:# 应用数据卷(持久化存储)app_data:# 卷标签labels:- "com.example.description=Application Data Volume"- "com.example.type=persistent"
将相关文件均上传至指定文件夹:

构建镜像:
docker build -t fenli-docker-compose:1.0 .

4) 执行docker compose up

由于应用与其所依赖mysql容器在不同的网络中,所以无法互相访问。故需要将mysql连接到应用所在的网络:
# 将mysql-master连接到应用网络
docker network connect docker-compose-fenli_app-network mysql-master
# 如果有mysql-slave,也连接到同一网络
docker network connect docker-compose-fenli_app-network mysql-slave



重启应用:

# 详细查看mysql-master的网络连接
docker inspect mysql-master | grep -A 30 "Networks"
# 测试MySQL端口连通性
docker exec -it fenli-docker-compose nc -zv mysql-master 3307
# 查看容器应用日志
docker logs -f fenli-docker-compose
5 ) 访问验证
http://22a3d999.r9.vip.cpolar.cn/test/getRedisInfo
6)停止
docker compose down
docker network prune -f
6.轻量级可视化工具Portainer
Portainer 是一个轻量级的管理界面,可以让您轻松地管理 Docker 环境。
主要功能
- 容器管理
容器生命周期管理:创建、启动、停止、重启、删除容器
容器状态监控:实时查看容器运行状态、资源使用情况
容器日志查看:实时查看和下载容器日志
容器终端访问:通过 Web 界面直接进入容器命令行
容器统计信息:CPU、内存、网络、磁盘 I/O 使用情况 - 镜像管理
镜像列表查看:显示本地所有 Docker 镜像
镜像拉取:从 Docker Hub 或私有仓库拉取镜像
镜像构建:通过 Dockerfile 构建新镜像
镜像删除:清理不需要的镜像
镜像标签管理:为镜像添加或修改标签 - 网络管理
网络创建:创建不同类型的 Docker 网络(bridge、host、none等)
网络配置:配置网络参数和驱动
网络连接管理:将容器连接到指定网络
网络详情查看:查看网络配置和连接的容器 - 数据卷管理
数据卷创建:创建命名数据卷
数据卷挂载:将数据卷挂载到容器
数据卷备份:备份和恢复数据卷内容
数据卷清理:删除未使用的数据卷 - Docker Compose 支持
Stack 管理:部署和管理 Docker Compose stack
YAML 文件编辑:在线编辑 docker-compose.yml 文件
服务监控:查看 compose 服务状态
一键部署:通过模板快速部署应用 - 用户和权限管理
用户管理:创建和管理用户账户
团队管理:将用户分组管理
访问控制:基于角色的访问控制(RBAC)
端点管理:管理多个 Docker 环境
资源限制:为用户/团队设置资源使用限制 - 模板和应用商店
应用模板:预定义的应用部署模板
一键部署:通过模板快速部署常见应用
自定义模板:创建自己的应用模板
应用市场:集成第三方应用模板 - 监控和告警
实时监控:实时监控容器和主机状态
资源使用图表:可视化展示资源使用情况
事件日志:查看 Docker 事件日志
健康检查:监控容器健康状态 - 配置管理
配置文件管理:管理应用配置文件
密钥管理:安全存储和管理敏感信息
环境变量:管理容器环境变量
配置注入:将配置注入到容器中 - 集群管理(Swarm 模式)
Swarm 集群管理:管理 Docker Swarm 集群
服务管理:创建和管理 Swarm 服务
节点管理:管理 Swarm 集群节点
负载均衡:配置服务负载均衡 - 注册表管理
私有仓库管理:连接和管理私有镜像仓库
镜像仓库认证:配置仓库访问认证
镜像同步:在不同仓库间同步镜像 - 系统设置
全局设置:配置 Portainer 全局参数
外观定制:自定义界面主题和 Logo
安全设置:配置安全相关选项
备份恢复:备份和恢复 Portainer 配置 - 多环境支持
端点管理:管理多个 Docker 环境(本地、远程、Swarm 等)
环境切换:在不同环境间快速切换
统一界面:通过单一界面管理所有环境 - API 和集成
REST API:提供完整的 REST API 接口
Webhook 支持:支持 Webhook 触发操作
第三方集成:可与其他工具集成
1)安装:
创建自己的文件夹挂载data数据并设置所有者为root:
chown 0:0 /usr/local/docker/portainer/data

# 1. 先拉取官方镜像
docker pull portainer/portainer-ce:latest
# 2. 运行容器
docker run -d -p 8000:8000 -p 9000:9000 --name portainer \--restart=always \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/local/docker/portainer/data:/data \portainer/portainer-ce:latest

2)访问:http://10d2827d.r9.vip.cpolar.cn
首次登录需创建账号密码

admin/@Lmy19960215

3) 点击local查看本地docker详细信息

