docs(docker): 新增 Docker 基础入门教程文档
- 介绍 Docker 核心概念,包括镜像、容器和仓库 - 详述常用 Docker 镜像和容器操作命令 - 提供 MySQL、Redis 及 Nginx 容器运行实战示例 - 讲解 Dockerfile 基础和构建镜像示例 - 说明 Docker Compose 配置及常用命令 - 涵盖数据卷和网络管理相关命令 - 列出常用的 Docker 清理命令 - 总结 Docker 镜像优化、安全建议及性能优化实践 - 提供故障排查命令和参考资源链接 - 附加后续学习建议,帮助用户深入掌握 Docker 技能
This commit is contained in:
367
src/programming/docker/Docker基础入门.md
Normal file
367
src/programming/docker/Docker基础入门.md
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user