Docker零基础入门教程:从安装到部署完整指南

Docker作为现代应用开发和部署的革命性技术,已经成为开发者和运维人员的必备技能。本文从零开始系统讲解Docker的核心概念、安装配置、基本操作、镜像制作和实战部署,帮助初学者快速掌握容器化技术。

图片[1]-Docker零基础入门教程:从安装到部署完整指南

一、Docker核心概念解析

1. 什么是Docker?

Docker是一个开源的容器化平台,允许开发者将应用及其依赖打包到标准化的单元中,实现快速、一致的部署。

(1) 传统部署 vs Docker部署

传统部署问题:

  • 环境不一致:开发、测试、生产环境差异
  • 依赖冲突:不同应用依赖不同版本库
  • 部署复杂:安装配置步骤繁琐
  • 资源浪费:每个应用需要完整操作系统

Docker优势:

  • 环境一致性:保证应用在任何环境运行一致
  • 隔离性:每个容器独立运行,互不干扰
  • 快速部署:秒级启动和停止
  • 资源高效:共享主机内核,资源占用小

(2) Docker架构组成

Docker架构:
┌─────────────────────────────────────────┐
│            Docker Client                 │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│            Docker Daemon                 │
│  ┌─────────────┬─────────────────────┐  │
│  │  Images     │    Containers       │  │
│  │  (镜像)      │     (容器)          │  │
│  └─────────────┴─────────────────────┘  │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│            Registry                     │
│            (镜像仓库)                    │
└─────────────────────────────────────────┘

2. 核心概念详解

(1) 镜像(Image)

  • 只读模板,包含运行应用所需的所有内容
  • 分层存储,提高复用性
  • 通过Dockerfile构建

(2) 容器(Container)

  • 镜像的运行实例
  • 包含运行中的应用程序
  • 可写层在只读镜像之上

(3) 仓库(Registry)

  • 存储和分发镜像的地方
  • 公共仓库:Docker Hub
  • 私有仓库:企业内部使用

二、Docker安装与配置

1. Ubuntu系统安装

<strong>#!/bin/bash</strong>
# Ubuntu Docker安装脚本

# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 3. 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 4. 设置稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 6. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 7. 验证安装
sudo docker version

# 8. 测试运行
sudo docker run hello-world

# 9. 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER

# 提示:需要重新登录或执行 newgrp docker 使配置生效
echo "请重新登录或执行: newgrp docker"

2. CentOS系统安装

<strong>#!/bin/bash</strong>
# CentOS Docker安装脚本

# 1. 卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 2. 安装yum工具包
sudo yum install -y yum-utils

# 3. 设置稳定的仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 4. 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 5. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 6. 验证安装
sudo docker version

3. Windows系统安装

# 适用于Windows 10/11专业版、企业版、教育版

# 1. 启用Hyper-V
# 以管理员身份运行PowerShell,执行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

# 2. 下载Docker Desktop
# 访问: https://www.docker.com/products/docker-desktop
# 下载并安装Docker Desktop

# 3. 安装后重启系统
# 4. 启动Docker Desktop,等待服务启动
# 5. 验证安装
docker version

4. 配置国内镜像加速器

# 创建Docker配置目录
sudo mkdir -p /etc/docker

# 配置镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://registry.docker-cn.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置
docker info

三、Docker基础命令实战

1. 镜像管理命令

<strong>#!/bin/bash</strong>
# Docker镜像管理实战

# 1. 搜索镜像
echo "搜索Ubuntu镜像:"
docker search ubuntu

# 2. 拉取镜像
echo "拉取Ubuntu 20.04镜像:"
docker pull ubuntu:20.04

# 3. 查看本地镜像
echo "查看本地镜像列表:"
docker images

# 4. 查看镜像详细信息
echo "查看镜像详细信息:"
docker image inspect ubuntu:20.04

# 5. 给镜像打标签
echo "给镜像打标签:"
docker tag ubuntu:20.04 my-ubuntu:latest

# 6. 删除镜像
echo "删除镜像:"
# docker rmi my-ubuntu:latest

# 7. 导出镜像
echo "导出镜像到文件:"
docker save -o ubuntu20.tar ubuntu:20.04

# 8. 导入镜像
echo "从文件导入镜像:"
# docker load -i ubuntu20.tar

# 9. 查看镜像历史
echo "查看镜像构建历史:"
docker history ubuntu:20.04

2. 容器生命周期管理

<strong>#!/bin/bash</strong>
# Docker容器生命周期管理

# 1. 运行容器(前台交互模式)
echo "运行交互式容器:"
docker run -it --name my-ubuntu ubuntu:20.04 /bin/bash
# 在容器内执行命令后使用 exit 退出

# 2. 运行容器(后台模式)
echo "运行后台容器:"
docker run -d --name web-server -p 8080:80 nginx:latest

# 3. 查看运行中的容器
echo "查看运行中的容器:"
docker ps

# 4. 查看所有容器(包括停止的)
echo "查看所有容器:"
docker ps -a

# 5. 停止容器
echo "停止容器:"
docker stop web-server

# 6. 启动已停止的容器
echo "启动容器:"
docker start web-server

# 7. 重启容器
echo "重启容器:"
docker restart web-server

# 8. 进入运行中的容器
echo "进入容器执行命令:"
docker exec -it web-server /bin/bash

# 9. 查看容器日志
echo "查看容器日志:"
docker logs web-server

# 10. 查看容器资源使用情况
echo "查看容器资源使用:"
docker stats web-server

# 11. 查看容器详细信息
echo "查看容器详细信息:"
docker inspect web-server

# 12. 删除容器
echo "删除容器:"
# docker rm web-server

# 13. 强制删除运行中的容器
echo "强制删除容器:"
# docker rm -f web-server

# 14. 清理所有停止的容器
echo "清理停止的容器:"
docker container prune

3. 容器网络与数据管理

<strong>#!/bin/bash</strong>
# Docker网络与数据管理

# 1. 端口映射
echo "运行容器并映射端口:"
docker run -d --name nginx-app -p 8080:80 -p 8443:443 nginx:latest

# 2. 查看端口映射
echo "查看端口映射:"
docker port nginx-app

# 3. 查看网络
echo "查看Docker网络:"
docker network ls

# 4. 创建自定义网络
echo "创建自定义网络:"
docker network create my-network

# 5. 在自定义网络中运行容器
echo "在自定义网络中运行容器:"
docker run -d --name app1 --network my-network nginx:latest
docker run -d --name app2 --network my-network nginx:latest

# 6. 容器间通信测试
echo "测试容器间通信:"
docker exec app1 ping app2

# 7. 数据卷管理
echo "创建数据卷:"
docker volume create my-data

# 8. 使用数据卷
echo "使用数据卷运行容器:"
docker run -d --name db --mount source=my-data,target=/var/lib/mysql mysql:8.0

# 9. 查看数据卷
echo "查看数据卷:"
docker volume ls

# 10. 查看数据卷详细信息
echo "查看数据卷详细信息:"
docker volume inspect my-data

# 11. 绑定挂载(主机目录)
echo "使用绑定挂载:"
mkdir -p /home/$USER/web-data
docker run -d --name web-app -v /home/$USER/web-data:/usr/share/nginx/html nginx:latest

# 12. 查看挂载信息
echo "查看容器挂载信息:"
docker inspect web-app | grep -A 10 Mounts

四、Dockerfile实战:构建自定义镜像

1. 基础Dockerfile示例

# 使用官方Python运行时作为基础镜像
FROM python:3.9-slim

# 设置维护者信息
LABEL maintainer="developer@company.com"
LABEL version="1.0"
LABEL description="Python Flask Web Application"

# 设置工作目录
WORKDIR /app

# 复制当前目录内容到容器中的/app目录
COPY . /app

# 安装依赖包
RUN pip install --no-cache-dir -r requirements.txt

# 创建非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
RUN chown -R appuser:appuser /app
USER appuser

# 暴露端口
EXPOSE 5000

# 定义环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production

# 容器启动时运行的命令
CMD ["flask", "run", "--host=0.0.0.0"]

2. 多阶段构建示例

# 多阶段构建:构建阶段
FROM node:16 as builder

WORKDIR /app

# 复制package文件
COPY package*.json ./
RUN npm ci --only=production

# 复制源代码并构建
COPY . .
RUN npm run build

# 多阶段构建:运行阶段
FROM nginx:alpine

# 复制构建结果到nginx目录
COPY --from=builder /app/dist /usr/share/nginx/html

# 复制nginx配置
COPY nginx.conf /etc/nginx/nginx.conf

# 暴露端口
EXPOSE 80

# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

3. 构建和运行自定义镜像

<strong>#!/bin/bash</strong>
# Docker镜像构建和运行实战

# 项目结构准备
mkdir my-python-app && cd my-python-app

# 创建应用文件
cat > app.py << 'EOF'
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello, Docker!</h1><p>This is a Python Flask app running in Docker.</p>'

@app.route('/health')
def health():
    return {'status': 'healthy'}

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
EOF

# 创建requirements.txt
cat > requirements.txt << 'EOF'
Flask==2.3.3
EOF

# 创建Dockerfile(使用上面的示例)

# 构建镜像
echo "构建Docker镜像:"
docker build -t my-python-app:1.0 .

# 查看构建的镜像
echo "查看本地镜像:"
docker images | grep my-python-app

# 运行容器
echo "运行自定义镜像:"
docker run -d --name my-app -p 5000:5000 my-python-app:1.0

# 测试应用
echo "测试应用:"
curl http://localhost:5000

# 查看容器日志
echo "查看容器日志:"
docker logs my-app

五、Docker Compose多容器编排

1. docker-compose安装

<strong>#!/bin/bash</strong>
# Docker Compose安装

# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建符号链接(可选)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证安装
docker-compose --version

2. 完整的Web应用编排示例

# docker-compose.yml
version: '3.8'

services:
  # Web应用服务
  web:
    build: 
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
      - REDIS_URL=redis://redis:6379
    depends_on:
      - db
      - redis
    volumes:
      - ./app:/app
      - log-volume:/app/logs
    networks:
      - app-network
    restart: unless-stopped

  # 数据库服务
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - app-network
    ports:
      - "5432:5432"
    restart: unless-stopped

  # Redis缓存服务
  redis:
    image: redis:6-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    networks:
      - app-network
    restart: unless-stopped

  # Nginx反向代理
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - web
    networks:
      - app-network
    restart: unless-stopped

  # 监控服务(可选)
  monitor:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - app-network
    restart: unless-stopped

volumes:
  db-data:
  redis-data:
  log-volume:
  grafana-data:

networks:
  app-network:
    driver: bridge

3. Compose命令实战

<strong>#!/bin/bash</strong>
# Docker Compose实战操作

# 1. 启动所有服务
echo "启动所有服务:"
docker-compose up -d

# 2. 查看服务状态
echo "查看服务状态:"
docker-compose ps

# 3. 查看服务日志
echo "查看所有服务日志:"
docker-compose logs

# 4. 查看特定服务日志
echo "查看web服务日志:"
docker-compose logs web

# 5. 实时查看日志
echo "实时查看日志:"
docker-compose logs -f web

# 6. 在服务中执行命令
echo "在web服务中执行命令:"
docker-compose exec web bash

# 7. 扩展服务实例
echo "扩展web服务实例:"
docker-compose up -d --scale web=3

# 8. 停止服务
echo "停止服务:"
docker-compose stop

# 9. 启动已停止的服务
echo "启动服务:"
docker-compose start

# 10. 重启服务
echo "重启服务:"
docker-compose restart

# 11. 停止并删除所有资源
echo "停止并删除所有资源:"
docker-compose down

# 12. 停止并删除所有资源(包括数据卷)
echo "停止并删除所有资源(包括数据卷):"
docker-compose down -v

# 13. 构建服务镜像
echo "重新构建镜像:"
docker-compose build

# 14. 拉取服务镜像
echo "拉取服务镜像:"
docker-compose pull

六、实战项目:部署WordPress博客

1. WordPress单机部署

# wordpress-docker-compose.yml
version: '3.8'

services:
  # 数据库服务
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wordpress-network

  # WordPress服务
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      - wordpress-network

volumes:
  db_data:
  wp_data:

networks:
  wordpress-network:
    driver: bridge

2. 部署和执行

<strong>#!/bin/bash</strong>
# WordPress部署脚本

# 创建项目目录
mkdir wordpress-docker && cd wordpress-docker

# 创建docker-compose.yml文件(使用上面的内容)

# 创建PHP配置(可选)
cat > uploads.ini << 'EOF'
file_uploads = On
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
EOF

# 启动服务
echo "启动WordPress服务:"
docker-compose -f wordpress-docker-compose.yml up -d

# 等待服务启动
echo "等待服务启动..."
sleep 30

# 检查服务状态
echo "检查服务状态:"
docker-compose -f wordpress-docker-compose.yml ps

# 查看日志
echo "查看WordPress日志:"
docker-compose -f wordpress-docker-compose.yml logs wordpress

# 访问WordPress
echo "WordPress已启动,访问: http://localhost:8080"
echo "数据库信息:"
echo "主机: db"
echo "数据库: wordpress"
echo "用户名: wordpress"
echo "密码: wordpress"

# 备份数据库
echo "备份数据库:"
docker-compose -f wordpress-docker-compose.yml exec db mysqldump -u root -prootpassword wordpress > backup.sql

# 停止服务
echo "停止服务:"
# docker-compose -f wordpress-docker-compose.yml down

# 停止服务并保留数据
echo "停止服务但保留数据:"
# docker-compose -f wordpress-docker-compose.yml stop

七、Docker最佳实践

1. 安全最佳实践

# 安全加固的Dockerfile示例
FROM python:3.9-slim

# 1. 使用特定版本标签,避免latest
FROM python:3.9-slim@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113...

# 2. 使用非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser

# 3. 最小化安装,删除不必要的包
RUN apt-get update && apt-get install -y --no-install-recommends \
    necessary-package \
    && rm -rf /var/lib/apt/lists/*

# 4. 设置工作目录并修改权限
WORKDIR /app
RUN chown -R appuser:appuser /app
USER appuser

# 5. 复制文件并设置正确的权限
COPY --chown=appuser:appuser . .

# 6. 使用明确的端口
EXPOSE 8080

# 7. 使用健康检查
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8080/health || exit 1

# 8. 使用exec格式的CMD
CMD ["python", "app.py"]

2. 性能优化实践

# 优化性能的Dockerfile
FROM node:16-alpine as builder

# 1. 使用Alpine基础镜像减小大小
FROM node:16-alpine

# 2. 设置工作目录
WORKDIR /app

# 3. 分别复制package文件和应用文件,利用Docker缓存
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# 4. 复制应用代码
COPY . .

# 5. 多阶段构建减小最终镜像大小
FROM node:16-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
USER nextjs

EXPOSE 3000
CMD ["npm", "start"]

3. 日常维护命令

<strong>#!/bin/bash</strong>
# Docker日常维护命令

# 1. 查看Docker磁盘使用情况
echo "Docker磁盘使用:"
docker system df

# 2. 查看详细磁盘使用
echo "详细磁盘使用:"
docker system df -v

# 3. 清理无用资源
echo "清理无用资源:"
docker system prune

# 4. 强制清理所有无用资源
echo "强制清理所有无用资源:"
docker system prune -a -f

# 5. 清理所有停止的容器
echo "清理停止的容器:"
docker container prune -f

# 6. 清理所有未使用的镜像
echo "清理未使用的镜像:"
docker image prune -a -f

# 7. 清理所有未使用的数据卷
echo "清理未使用的数据卷:"
docker volume prune -f

# 8. 清理所有未使用的网络
echo "清理未使用的网络:"
docker network prune -f

# 9. 查看Docker事件
echo "查看Docker事件:"
docker system events

# 10. 检查Docker守护进程状态
echo "检查Docker状态:"
sudo systemctl status docker

# 11. 查看Docker信息
echo "查看Docker系统信息:"
docker info

八、常见问题与解决方案

1. 安装问题排查

<strong>#!/bin/bash</strong>
# Docker安装问题排查

# 1. 检查Docker服务状态
sudo systemctl status docker

# 2. 检查Docker版本
docker --version

# 3. 检查用户组
groups $USER

# 4. 检查Docker守护进程日志
sudo journalctl -u docker.service

# 5. 测试Docker运行
docker run --rm hello-world

# 6. 检查存储驱动
docker info | grep Storage

# 7. 检查网络配置
docker network ls

# 8. 检查防火墙设置
sudo ufw status

# 常见问题解决:
# 问题1: Permission denied
# 解决: sudo usermod -aG docker $USER && newgrp docker

# 问题2: Cannot connect to Docker daemon
# 解决: sudo systemctl start docker

# 问题3: Port already in use
# 解决: 更改端口映射或停止占用端口的进程

# 问题4: No space left on device
# 解决: docker system prune -a -f

2. 容器网络问题

<strong>#!/bin/bash</strong>
# 容器网络问题排查

# 1. 检查容器网络配置
docker inspect <container> | grep -A 20 NetworkSettings

# 2. 测试容器网络连接
docker exec <container> ping google.com

# 3. 检查容器DNS配置
docker exec <container> cat /etc/resolv.conf

# 4. 查看容器端口映射
docker port <container>

# 5. 检查主机网络配置
netstat -tulpn | grep :80

# 6. 测试端口连通性
telnet localhost 8080

# 7. 查看Docker网络详情
docker network inspect <network>

# 8. 重启Docker网络
sudo systemctl restart docker

九、学习路径和进阶方向

1. 学习路径建议

初级阶段(1-2周):

  • 掌握Docker基本概念和架构
  • 熟悉镜像和容器管理命令
  • 学会编写简单的Dockerfile

中级阶段(2-4周):

  • 掌握Docker Compose多服务编排
  • 理解Docker网络和数据管理
  • 学会Docker安全最佳实践

高级阶段(1-2月):

  • 掌握Docker Swarm或Kubernetes
  • 理解CI/CD中的Docker应用
  • 学会Docker生产环境部署

2. 进阶技术栈

# 容器编排进阶
- Docker Swarm
- Kubernetes (K8s)
- Amazon ECS / Google GKE

# 监控和日志
- Prometheus + Grafana
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Jaeger (分布式追踪)

# 安全工具
- Trivy (镜像漏洞扫描)
- Clair (静态分析)
- Falco (运行时安全)

# CI/CD集成
- Jenkins + Docker
- GitLab CI/CD
- GitHub Actions

十、总结

通过本文的系统学习,您已经掌握了Docker的核心概念、基本操作和实战部署技能。Docker作为现代应用开发和部署的基础设施,掌握它将为您的技术生涯带来巨大优势。

关键要点回顾:

  1. 核心概念:理解镜像、容器、仓库的关系
  2. 基本操作:熟练掌握镜像管理和容器生命周期命令
  3. 镜像构建:学会编写高效的Dockerfile
  4. 多容器编排:掌握Docker Compose的使用
  5. 最佳实践:遵循安全和性能优化原则

下一步建议:

  1. 实践项目:尝试容器化自己的应用
  2. 学习编排:深入掌握Kubernetes
  3. 了解生态:学习相关的监控、日志工具
  4. 参与社区:关注Docker官方博客和社区

继续在实践中深化理解,Docker将成为您开发部署的得力工具!

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容