文章目录
零基础 Docker 学习路线
第 1 章:Docker 到底是什么?
- 为什么需要 Docker?
- 问题背景:开发环境(代码)和生产环境(服务器)不一致,导致“在我电脑上能运行,到服务器就报错”。
- 传统虚拟机(VM)的缺点:
- 占用资源多(每个 VM 都要装完整操作系统)
- 启动慢(分钟级)
- Docker 的解决方案:
- 容器化:将应用 + 依赖打包成一个轻量级、可移植的“容器”。
- 容器共享宿主机的操作系统内核,秒级启动。
- 核心概念图解
- 镜像(Image):像“安装包”,包含运行程序所需的一切(代码、库、环境)。
- 例如:
ubuntu:20.04
是一个 Linux 系统镜像。
- 例如:
- 容器(Container):镜像运行后的实例,像一个轻量级虚拟机。
- 仓库(Registry):存放镜像的地方,如 Docker Hub(类似手机应用商店)。
- 镜像(Image):像“安装包”,包含运行程序所需的一切(代码、库、环境)。
第 2 章:安装 Docker(手把手)
Windows/macOS 安装
访问 Docker 官网,下载 Docker Desktop。
安装后打开,桌面右下角出现 Docker 图标即成功。
验证安装:打开命令行,输入:
bash
复制
docker --version # 显示版本号,如 Docker version 20.10.17
Linux 安装(Ubuntu 为例)
bash
复制
# 卸载旧版本(如果有) sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖工具 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加 Docker 官方 GPG 密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 验证安装 sudo docker run hello-world # 运行测试容器
第 3 章:第一个 Docker 容器
从镜像运行容器
bash
复制
# 拉取一个官方测试镜像 docker pull hello-world # 运行容器 docker run hello-world
- 输出结果:显示 “Hello from Docker!” 说明成功!
参数解释
docker run
= 创建并启动容器。- 如果本地没有
hello-world
镜像,Docker 会自动从仓库下载。
第 4 章:镜像操作(Image)
搜索镜像
bash
复制
docker search ubuntu # 查找 Ubuntu 相关镜像
拉取镜像
bash
复制
docker pull ubuntu:20.04 # 下载指定版本
查看本地镜像
bash
复制
docker images # 输出示例: # REPOSITORY TAG IMAGE ID CREATED SIZE # ubuntu 20.04 dcfc4b66c6b9 2 weeks ago 72.8MB
删除镜像
bash
复制
docker rmi ubuntu:20.04 # 删除指定镜像
第 5 章:容器操作(Container)
运行一个交互式容器
bash
复制
# 运行 Ubuntu 容器并进入命令行 docker run -it ubuntu:20.04 /bin/bash
-it
:以交互模式运行(进入容器内部)。/bin/bash
:启动后执行的命令(打开 Bash 终端)。
退出容器
- 在容器内输入
exit
或按Ctrl+D
。
- 在容器内输入
查看容器
bash
复制
docker ps # 查看正在运行的容器 docker ps -a # 查看所有容器(包括已停止的)
启动/停止容器
bash
复制
docker start 容器ID # 启动已停止的容器 docker stop 容器ID # 停止运行中的容器 docker restart 容器ID # 重启容器
进入已运行的容器
bash
复制
docker exec -it 容器ID /bin/bash # 进入容器终端
删除容器
bash
复制
docker rm 容器ID # 删除已停止的容器 docker rm -f 容器ID # 强制删除运行中的容器
第 6 章:Dockerfile 构建镜像(实战)
编写第一个 Dockerfile
创建一个空文件夹,新建文件
Dockerfile
:dockerfile
复制
# 基础镜像(从 Ubuntu 20.04 开始) FROM ubuntu:20.04 # 维护者信息(可选) LABEL maintainer="yourname@example.com" # 更新软件包并安装 curl RUN apt-get update && apt-get install -y curl # 设置容器启动时执行的命令 CMD ["curl", "https://www.baidu.com"]
构建镜像
bash
复制
docker build -t my-curl:1.0 . # -t 指定镜像名称和标签,. 表示当前目录
运行自定义镜像
bash
复制
docker run my-curl:1.0 # 执行 curl 命令访问百度
第 7 章:数据持久化(Volume)
为什么需要数据卷?
- 容器删除后,内部数据会丢失,需将数据保存到宿主机。
挂载数据卷
bash
复制
# 创建数据卷 docker volume create my-vol # 运行容器并挂载卷 docker run -d -v my-vol:/app/data --name my-nginx nginx
-v my-vol:/app/data
:将数据卷my-vol
挂载到容器的/app/data
目录。
直接挂载宿主机目录
bash
复制
docker run -v /home/user/data:/app/data nginx
第 8 章:网络配置(容器通信)
查看 Docker 网络
bash
复制
docker network ls # 列出所有网络
创建自定义网络
bash
复制
docker network create my-network
容器加入同一网络
bash
复制
docker run --network=my-network --name web nginx docker run --network=my-network --name db mysql
- 同一网络中的容器可以通过容器名互相访问(如
web
容器中可直接ping db
)。
- 同一网络中的容器可以通过容器名互相访问(如
第 9 章:Docker Compose(多容器编排)
安装 Docker Compose
bash
复制
# Linux 安装命令 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
编写
docker-compose.yml
yaml
复制
version: '3' services: web: image: nginx:latest ports: - "80:80" db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 123456
启动服务
bash
复制
docker-compose up -d # 后台启动 docker-compose down # 停止并删除容器
第 10 章:常见问题与练习
- 常见错误
端口冲突
:修改宿主机端口(如-p 8080:80
)。权限不足
:在命令前加sudo
(Linux)或使用管理员权限运行(Windows)。
- 练习任务
- 任务1:用 Docker 部署一个 Python Flask 应用。
- 任务2:使用 Docker Compose 组合 Nginx + MySQL + Redis。
资源推荐
- 官方文档:Docker Docs
- 互动教程:Docker 官方互动实验室
- 书籍:《Docker 技术入门与实战》