目录
- [1. 简介](#1. 简介)
- [2. 基本概念](#2. 基本概念)
- [3. 安装与配置](#3. 安装与配置)
- [4. 容器管理](#4. 容器管理)
- [5. 镜像管理](#5. 镜像管理)
- [6. 网络配置](#6. 网络配置)
- [7. 存储管理](#7. 存储管理)
- [8. Docker Compose](#8. Docker Compose)
- [9. 常见问题与解决方案](#9. 常见问题与解决方案)
- [10. 最佳实践](#10. 最佳实践)
- 附录:常用命令速查表
1. 简介
1.1 什么是Docker
Docker是一个开源的容器化平台,它允许开发者打包他们的应用及其依赖项到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
1.2 Docker的优势
- 简化部署:将应用及其依赖打包到容器中,保证环境一致性
- 隔离性:容器之间相互隔离,避免环境冲突
- 轻量级:容器共享主机内核,启动速度快,资源占用少
- 可移植性:容器可以在不同环境中一致运行
- 扩展性:易于实现容器编排和自动扩展
- 版本控制:可以对容器镜像进行版本管理
1.3 Docker的应用场景
- 应用程序容器化
- 微服务架构实现
- 持续集成/持续部署(CI/CD)
- 开发环境一致性保障
- 高可用系统构建
- 测试环境快速搭建
2. 基本概念
2.1 容器(Container)
容器是Docker的基本执行单元,是镜像的运行时实例。容器包含应用及其依赖,但共享主机操作系统内核。
2.2 镜像(Image)
镜像是一个只读的模板,包含运行容器所需的所有文件系统结构和内容。镜像可以基于其他镜像构建,通过Dockerfile定义构建过程。
2.3 Dockerfile
Dockerfile是一个文本文件,包含构建Docker镜像所需的一系列命令。每个命令在镜像中创建一个新的层。
2.4 仓库(Repository)
仓库是集中存放Docker镜像的地方,可以是公开的(如Docker Hub)或私有的。仓库分为公共仓库和私有仓库。
2.5 注册表(Registry)
注册表是存放仓库的服务器,如Docker Hub是最大的公共注册表。
2.6 卷(Volume)
卷是用于持久化数据的机制,允许数据在容器间共享或在容器停止后保留。
3. 安装与配置
3.1 在Windows上安装Docker
-
系统要求:
- Windows 10 64位专业版、企业版或教育版(1607+),或Windows 11
- 启用Hyper-V和容器功能
- 至少4GB RAM
-
安装步骤:
- 从Docker官网下载Docker Desktop安装包
- 运行安装程序,按照提示完成安装
- 安装完成后重启计算机
-
验证安装:
- 打开命令提示符或PowerShell
- 运行
docker version和docker run hello-world验证安装
3.2 在macOS上安装Docker
-
系统要求:
- macOS 11 Big Sur或更高版本
- 至少4GB RAM
-
安装步骤:
- 从Docker官网下载Docker Desktop for Mac安装包
- 拖动Docker应用到Applications文件夹
- 从Applications文件夹启动Docker
-
验证安装:
- 打开终端
- 运行
docker version和docker run hello-world验证安装
3.3 在Linux上安装Docker
-
Ubuntu/Debian安装:
bashsudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -
CentOS/RHEL安装:
bashsudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker -
验证安装:
bashsudo docker version sudo docker run hello-world
3.4 配置Docker
-
配置国内镜像源:
- 编辑
/etc/docker/daemon.json(Linux)或在Docker Desktop的设置中配置
json{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }- 重启Docker服务:
sudo systemctl restart docker(Linux)或重启Docker Desktop
- 编辑
-
配置用户权限:
bashsudo usermod -aG docker $USER- 重新登录以应用更改
4. 容器管理
4.1 创建与运行容器
-
基本命令:
bashdocker run [选项] 镜像名 [命令] [参数] -
常用选项:
-d: 后台运行容器-p 主机端口:容器端口: 端口映射-v 主机路径:容器路径: 挂载卷--name 容器名: 指定容器名称-e 变量名=值: 设置环境变量--restart=always: 设置容器自动重启
-
示例:
bash# 运行一个Nginx容器,映射80端口,命名为my-nginx docker run -d -p 80:80 --name my-nginx nginx # 运行MySQL容器,设置密码,挂载数据卷 docker run -d -p 3306:3306 --name mysql \ -e MYSQL_ROOT_PASSWORD=password \ -v mysql-data:/var/lib/mysql \ mysql:8.0
4.2 查看容器
-
列出所有运行中的容器:
bashdocker ps -
列出所有容器(包括已停止的):
bashdocker ps -a -
查看容器详情:
bashdocker inspect 容器名或ID -
查看容器日志:
bashdocker logs [选项] 容器名或ID # 实时查看日志 docker logs -f 容器名或ID -
查看容器内进程:
bashdocker top 容器名或ID
4.3 容器的启动、停止、重启
-
启动容器:
bashdocker start 容器名或ID -
停止容器:
bashdocker stop 容器名或ID -
重启容器:
bashdocker restart 容器名或ID -
强制停止容器:
bashdocker kill 容器名或ID
4.4 进入容器
-
使用exec进入容器(推荐):
bashdocker exec -it 容器名或ID /bin/bash # 对于Alpine基础的容器 docker exec -it 容器名或ID /bin/sh -
使用attach连接容器:
bashdocker attach 容器名或ID
4.5 删除容器
-
删除单个容器:
bashdocker rm 容器名或ID -
强制删除运行中的容器:
bashdocker rm -f 容器名或ID -
删除所有已停止的容器:
bashdocker container prune
5. 镜像管理
5.1 拉取镜像
bash
# 拉取最新版本
docker pull 镜像名
# 拉取指定版本
docker pull 镜像名:标签
# 示例
docker pull nginx:latest
docker pull mysql:5.7
5.2 查看镜像
bash
# 列出所有本地镜像
docker images
# 查看镜像详情
docker inspect 镜像名或ID
# 查看镜像历史
docker history 镜像名或ID
5.3 删除镜像
bash
# 删除单个镜像
docker rmi 镜像名或ID
# 强制删除镜像
docker rmi -f 镜像名或ID
# 删除所有未使用的镜像
docker image prune -a
5.4 构建镜像
-
创建Dockerfile:
dockerfile# 使用官方Python镜像作为基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 复制requirements.txt到容器 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 设置环境变量 ENV NAME World # 运行应用 CMD ["python", "app.py"] -
构建镜像:
bashdocker build -t 镜像名:标签 路径 # 示例 docker build -t myapp:v1 . -
构建优化技巧:
- 使用多阶段构建减小镜像体积
- 按依赖变化频率排序Dockerfile指令
- 使用
.dockerignore文件排除不需要的文件 - 选择更小的基础镜像(如Alpine)
5.5 推送镜像
-
登录Docker Hub:
bashdocker login -
标记镜像:
bashdocker tag 本地镜像名:标签 用户名/仓库名:标签 -
推送镜像:
bashdocker push 用户名/仓库名:标签