From c62abe7c1f33b9ce0e076a8914d8f451f82b9f57 Mon Sep 17 00:00:00 2001 From: liumangmang Date: Wed, 17 Dec 2025 17:40:09 +0800 Subject: [PATCH] =?UTF-8?q?docs(docker):=20=E6=96=B0=E5=A2=9E=20Docker=20?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=85=A5=E9=97=A8=E6=95=99=E7=A8=8B=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 介绍 Docker 核心概念,包括镜像、容器和仓库 - 详述常用 Docker 镜像和容器操作命令 - 提供 MySQL、Redis 及 Nginx 容器运行实战示例 - 讲解 Dockerfile 基础和构建镜像示例 - 说明 Docker Compose 配置及常用命令 - 涵盖数据卷和网络管理相关命令 - 列出常用的 Docker 清理命令 - 总结 Docker 镜像优化、安全建议及性能优化实践 - 提供故障排查命令和参考资源链接 - 附加后续学习建议,帮助用户深入掌握 Docker 技能 --- src/programming/docker/Docker基础入门.md | 367 +++++++++++++++++++++++ 1 file changed, 367 insertions(+) create mode 100644 src/programming/docker/Docker基础入门.md diff --git a/src/programming/docker/Docker基础入门.md b/src/programming/docker/Docker基础入门.md new file mode 100644 index 0000000..d9c5767 --- /dev/null +++ b/src/programming/docker/Docker基础入门.md @@ -0,0 +1,367 @@ +--- +title: Docker 基础入门 +icon: mdi:docker +date: 2025-12-17 +category: + - Docker +tag: + - 容器 + - Docker + - 入门教程 +--- + +# Docker 基础入门 + +## 什么是 Docker? + +Docker 是一个开源的容器化平台,可以让开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。 + +### 核心概念 + +- **镜像(Image)**:只读模板,包含运行应用所需的所有内容(代码、运行时、库、环境变量和配置文件) +- **容器(Container)**:镜像的运行实例,是一个轻量级、独立的可执行包 +- **仓库(Registry)**:存储和分发镜像的服务,Docker Hub 是最大的公共仓库 + +## Docker 基础命令 + +### 镜像操作 + +```bash +# 搜索镜像 +docker search <镜像名> + +# 拉取镜像 +docker pull <镜像名>[:标签] + +# 列出本地镜像 +docker images + +# 删除镜像 +docker rmi <镜像ID或名称> + +# 查看镜像详细信息 +docker inspect <镜像ID> +``` + +### 容器操作 + +```bash +# 运行容器 +docker run [选项] <镜像名> [命令] + +# 常用选项: +# -d:后台运行 +# -p:端口映射 主机端口:容器端口 +# --name:指定容器名称 +# -v:挂载数据卷 主机路径:容器路径 +# -e:设置环境变量 +# --rm:容器停止后自动删除 + +# 示例:运行 Nginx +docker run -d -p 8080:80 --name my-nginx nginx + +# 列出运行中的容器 +docker ps + +# 列出所有容器(包括停止的) +docker ps -a + +# 启动/停止/重启容器 +docker start <容器ID或名称> +docker stop <容器ID或名称> +docker restart <容器ID或名称> + +# 删除容器 +docker rm <容器ID或名称> + +# 强制删除运行中的容器 +docker rm -f <容器ID或名称> + +# 查看容器日志 +docker logs <容器ID或名称> + +# 实时查看日志 +docker logs -f <容器ID或名称> + +# 进入容器 +docker exec -it <容器ID或名称> /bin/bash +# 或 +docker exec -it <容器ID或名称> sh +``` + +## 实战示例 + +### 1. 运行 MySQL 容器 + +```bash +docker run -d \ + --name mysql-server \ + -p 3306:3306 \ + -e MYSQL_ROOT_PASSWORD=your_password \ + -v /my/data:/var/lib/mysql \ + mysql:8.0 +``` + +### 2. 运行 Redis 容器 + +```bash +docker run -d \ + --name redis-server \ + -p 6379:6379 \ + redis:latest +``` + +### 3. 运行 Nginx 并挂载静态文件 + +```bash +docker run -d \ + --name nginx-web \ + -p 80:80 \ + -v /path/to/html:/usr/share/nginx/html \ + nginx:latest +``` + +## Dockerfile 基础 + +Dockerfile 是用于构建自定义镜像的文本文件。 + +### 常用指令 + +```dockerfile +# 基础镜像 +FROM ubuntu:20.04 + +# 维护者信息 +LABEL maintainer="your-email@example.com" + +# 工作目录 +WORKDIR /app + +# 复制文件 +COPY . /app + +# 添加文件(支持 URL 和自动解压) +ADD app.tar.gz /app + +# 执行命令 +RUN apt-get update && apt-get install -y python3 + +# 设置环境变量 +ENV APP_ENV=production + +# 暴露端口 +EXPOSE 8080 + +# 容器启动时执行的命令 +CMD ["python3", "app.py"] +# 或使用 ENTRYPOINT +ENTRYPOINT ["python3", "app.py"] +``` + +### 构建镜像示例 + +创建一个简单的 Python 应用 Dockerfile: + +```dockerfile +FROM python:3.9-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 5000 + +CMD ["python", "app.py"] +``` + +构建和运行: + +```bash +# 构建镜像 +docker build -t my-python-app:1.0 . + +# 运行容器 +docker run -d -p 5000:5000 --name my-app my-python-app:1.0 +``` + +## Docker Compose + +Docker Compose 用于定义和运行多容器 Docker 应用。 + +### docker-compose.yml 示例 + +```yaml +version: '3.8' + +services: + web: + image: nginx:latest + ports: + - "80:80" + volumes: + - ./html:/usr/share/nginx/html + depends_on: + - db + + db: + image: mysql:8.0 + environment: + MYSQL_ROOT_PASSWORD: rootpassword + MYSQL_DATABASE: myapp + volumes: + - db-data:/var/lib/mysql + ports: + - "3306:3306" + + redis: + image: redis:latest + ports: + - "6379:6379" + +volumes: + db-data: +``` + +### Compose 常用命令 + +```bash +# 启动所有服务 +docker-compose up -d + +# 停止所有服务 +docker-compose down + +# 查看服务状态 +docker-compose ps + +# 查看服务日志 +docker-compose logs -f + +# 重启服务 +docker-compose restart + +# 构建服务 +docker-compose build +``` + +## 数据卷管理 + +### 创建和使用数据卷 + +```bash +# 创建数据卷 +docker volume create my-volume + +# 列出数据卷 +docker volume ls + +# 查看数据卷详情 +docker volume inspect my-volume + +# 使用数据卷 +docker run -d -v my-volume:/data nginx + +# 删除数据卷 +docker volume rm my-volume + +# 清理未使用的数据卷 +docker volume prune +``` + +## 网络管理 + +```bash +# 列出网络 +docker network ls + +# 创建网络 +docker network create my-network + +# 将容器连接到网络 +docker run -d --network my-network --name web nginx + +# 查看网络详情 +docker network inspect my-network + +# 删除网络 +docker network rm my-network +``` + +## 常用清理命令 + +```bash +# 删除所有停止的容器 +docker container prune + +# 删除所有未使用的镜像 +docker image prune -a + +# 删除所有未使用的数据卷 +docker volume prune + +# 删除所有未使用的网络 +docker network prune + +# 一键清理所有未使用的资源 +docker system prune -a --volumes +``` + +## 最佳实践 + +### 1. 镜像优化 + +- 使用轻量级基础镜像(如 alpine) +- 合并 RUN 命令减少层数 +- 使用 `.dockerignore` 排除不需要的文件 +- 多阶段构建减小最终镜像大小 + +### 2. 安全建议 + +- 不要以 root 用户运行应用 +- 定期更新基础镜像 +- 扫描镜像漏洞 +- 使用官方镜像或可信来源 + +### 3. 性能优化 + +- 合理使用缓存 +- 限制容器资源(CPU、内存) +- 使用健康检查 +- 合理配置日志驱动 + +## 故障排查 + +```bash +# 查看容器详细信息 +docker inspect <容器ID> + +# 查看容器资源使用情况 +docker stats + +# 查看容器进程 +docker top <容器ID> + +# 从容器复制文件到主机 +docker cp <容器ID>:/path/to/file /host/path + +# 从主机复制文件到容器 +docker cp /host/path <容器ID>:/path/to/file +``` + +## 参考资源 + +- [Docker 官方文档](https://docs.docker.com/) +- [Docker Hub](https://hub.docker.com/) +- [Docker Compose 文档](https://docs.docker.com/compose/) + +--- + +**下一步学习建议**: +1. 实践基础命令,熟悉容器操作 +2. 尝试编写 Dockerfile 构建自己的镜像 +3. 学习 Docker Compose 编排多容器应用 +4. 了解 Docker 网络和数据持久化 +5. 探索容器编排工具(如 Kubernetes)