### 文章目录
- [@toc](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [Docker 小白实验教程(理论+实操完整融合版)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [0. 实验环境规划](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [0.1 克隆虚拟机并配置网络](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1. 实验一:安装 Docker](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1.1 安装必要工具](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1.2 添加 Docker CE 镜像源](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1.3 安装 Docker CE](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1.4 启动并设置开机自启](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [1.5 验证安装](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [2. 配置镜像加速器](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [3. 实验二:运行第一个容器](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [4. 实验三:Docker C/S 分离部署](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [4.1 Docker Server 端配置(IP: 192.168.108.30)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [4.2 Docker Client 端配置(IP: 192.168.108.31)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [5. 实验四:镜像管理](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [6. 实验五:构建镜像(Dockerfile)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [6.1 使用 Dockerfile 构建](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [6.2 Dockerfile 案例:SSH 镜像](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [7. 实验六:容器操作](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [8. 实验七:限制容器资源](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [9. 实验八:容器网络](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [10. 实验九:容器存储(数据卷)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [MySQL 实战(重点注意挂载)](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [11. 实验十:Docker Compose](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [12. 实验十一:图形界面管理](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [DockerUI](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [Portainer](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
- [Portainer](#文章目录 @[toc] Docker 小白实验教程(理论+实操完整融合版) 0. 实验环境规划 0.1 克隆虚拟机并配置网络 1. 实验一:安装 Docker 1.1 安装必要工具 1.2 添加 Docker CE 镜像源 1.3 安装 Docker CE 1.4 启动并设置开机自启 1.5 验证安装 2. 配置镜像加速器 3. 实验二:运行第一个容器 4. 实验三:Docker C/S 分离部署 4.1 Docker Server 端配置(IP: 192.168.108.30) 4.2 Docker Client 端配置(IP: 192.168.108.31) 5. 实验四:镜像管理 6. 实验五:构建镜像(Dockerfile) 6.1 使用 Dockerfile 构建 6.2 Dockerfile 案例:SSH 镜像 7. 实验六:容器操作 8. 实验七:限制容器资源 9. 实验八:容器网络 10. 实验九:容器存储(数据卷) MySQL 实战(重点注意挂载) 11. 实验十:Docker Compose 12. 实验十一:图形界面管理 DockerUI Portainer 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker Portainer)
Docker 小白实验教程(理论+实操完整融合版)
👉 符号代表额外的通俗解释,代码块里的
#也是注释,复制执行时可不复制#及其后面的内容。💡 每个章节前加入了"原版PDF理论导读",帮助大家理解"为什么要这么做"。
0. 实验环境规划
💡 原版理论导读(容器生态系统) :
Docker 是当前最流行的容器技术。容器生态系统包含三大块:
- 核心技术:让容器在单机(Host OS)上运行起来的技术(容器规范OCI、runtime如runc、管理工具如docker engine、定义工具如Dockerfile、Registry仓库、容器OS)。
- 平台技术:让容器作为集群在分布式环境中运行的技术(容器编排引擎如Kubernetes、容器管理平台如Rancher、基于容器的PaaS)。
- 支持技术 :支持基于容器的基础设施(容器网络如flannel、服务发现如etcd、监控如cAdvisor、日志管理、安全性OpenSCAP)。
本次实验将带领大家从单机开始,逐步构建容器生态。
| 项目 | 配置 |
|---|---|
| 虚拟机软件 | VMware Workstation |
| 操作系统 | CentOS Stream 8 |
| Docker 主机名 | docker |
| Docker 主机 IP | 192.168.108.30/24 |
0.1 克隆虚拟机并配置网络
👉 克隆出虚拟机后,登录进去,依次执行以下命令:
bash
# 修改主机名为 docker
hostnamectl set-hostname docker
# 配置静态 IP(ens160 是网卡名称,你的可能是别的,用 ip a 查看)
nmcli connection modify ens160 \
ipv4.method manual \ # 设置为手动配置 IP
ipv4.addresses 192.168.108.30/24 \ # 设置 IP 地址和子网掩码(/24 代表 255.255.255.0)
ipv4.gateway 192.168.108.2 \ # 设置网关(一般是 VMware 虚拟网络编辑器里的 NAT 网关)
ipv4.dns 192.168.108.2 \ # 设置 DNS 服务器
autoconnect yes # 开机自动连接
# 激活网卡
nmcli con up ens160
# 验证网络是否正常
ip a # 查看网卡信息,确认 IP 已生效
hostname # 确认主机名
ping -c 3 www.baidu.com # 测试外网连通性(-c 3 表示只 ping 3 次)
1. 实验一:安装 Docker
💡 原版理论导读(容器架构与核心组件) :
Docker 采用 C/S(客户端/服务端)架构。核心组件包括:
- Docker Daemon(守护进程):服务端主体,负责构建、运行和分发容器。
- Docker Client(客户端) :我们敲的
docker命令,通过 REST API 向 Daemon 发送请求。- Docker Image(镜像):只读模板。
- Docker Container(容器):镜像的可运行实例。
- Registry(仓库) :存储镜像的地方。
内部实现上,镜像通过Graph driver存储,网络通过Network driver创建,资源限制和指令通过Exec driver执行,底层依赖Libcontainer。
Docker 分为 CE(社区版,免费)和 EE(企业版,收费)。
👉 在 Docker 主机上执行。
1.1 安装必要工具
bash
# yum install -y 意思是自动回答 yes 安装软件
yum install -y yum-utils \ # 提供 yum-config-manager 命令
device-mapper-persistent-data \ # Docker 存储驱动依赖
lvm2 \ # 逻辑卷管理,Docker 存储用到
vim # 文本编辑器
1.2 添加 Docker CE 镜像源
bash
# 添加阿里云的 Docker CE 仓库(这样下载 Docker 速度快)
yum-config-manager --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 生成 yum 缓存
yum makecache
1.3 安装 Docker CE
bash
# 安装 Docker 社区版
yum install -y docker-ce
1.4 启动并设置开机自启
bash
# --now 表示设置开机自启的同时,立刻启动服务
systemctl enable docker.service --now
1.5 验证安装
bash
# 查看 Docker 版本
docker --version
# 查看 Docker 运行状态(看到 Active: active (running) 就是成功了)
systemctl status docker
2. 配置镜像加速器
💡 原版理论导读(Registry仓库) :
容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。Docker Hub 是默认的公共 Registry。如果不配置国内加速器,从 Docker Hub 拉取镜像会非常慢。国内常用的有阿里云、华为云等提供的镜像加速服务。
👉 不配加速器,拉取镜像会非常慢。配置后重启 Docker 生效。
bash
# 创建 Docker 配置目录
sudo mkdir -p /etc/docker
# 写入加速器配置(注意:spcqvmfn 是示例,请换成你自己的阿里云加速器地址)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://spcqvmfn.mirror.aliyuncs.com"]
}
EOF
# 重新加载 systemd 配置,并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 检查加速器是否生效(看输出有没有 Registry Mirrors 字段)
docker info
3. 实验二:运行第一个容器
💡 原版理论导读(容器与镜像的关系):
- 镜像(Image):类似虚拟机镜像,是一个只读模板。
- 容器(Container):类似轻量级沙箱,是镜像的运行实例。容器之间相互隔离,互不可见。
- 最小镜像 :
hello-world是 Docker 官方提供的最小镜像(不到14KB),用于验证 Docker 是否安装成功。- base镜像:不依赖其他镜像,从 scratch 构建;或其他镜像可基于它扩展。容器底层直接使用 Host 的 kernel,自己只需提供 rootfs。
bash
# 运行 hello-world 容器(本地没有会自动下载)
docker run hello-world
# 清理实验环境(后续操作怕冲突)
docker rm -f $(docker ps -aq) # 删除所有容器($(...) 是先执行里面的命令得到所有容器 ID)
docker rmi -f hello-world # 删除 hello-world 镜像
# 运行 httpd 容器
# -d:后台运行(detach)
# -p 80:80:端口映射,格式是【宿主机端口:容器端口】
docker run -d -p 80:80 httpd
# 查看正在运行的容器
docker ps
👉 浏览器访问 http://192.168.108.30,看到 It works! 就是成功了。
4. 实验三:Docker C/S 分离部署
💡 原版理论导读(Docker组件协作) :
以
docker run -d -p 80:80 httpd为例:
- Docker 客户端执行
docker run。- Daemon 发现本地没有 httpd 镜像。
- Daemon 从 Docker Hub 下载镜像。
- 镜像保存到本地。
- Daemon 启动容器。
此实验演示 Client 和 Server 分离部署,Client 只做管理,Image 和 Container 存储在 Server 端。
⚠️ 小白注意:这只用于实验环境!生产环境千万不要把 2375 端口暴露出去,很危险!
4.1 Docker Server 端配置(IP: 192.168.108.30)
bash
# 修改主机名
hostnamectl set-hostname docker_server
# 配置静态 IP(跟之前一样)
nmcli connection modify ens160 \
ipv4.method manual \
ipv4.addresses 192.168.108.30/24 \
ipv4.gateway 192.168.108.2 \
ipv4.dns 192.168.108.2 \
autoconnect yes
nmcli con up ens160
# 安装 Docker(同实验一,此处略写)
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install -y docker-ce
systemctl enable docker.service --now
# 修改 Docker 启动配置,让它监听 TCP 2375 端口
vim /usr/lib/systemd/system/docker.service
👉 在 ExecStart 这一行的末尾加上 -H tcp://0.0.0.0:2375,完整长这样:
text
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
bash
# 重启 Docker 让配置生效
systemctl daemon-reload
systemctl restart docker.service
systemctl stop firewalld # 实验环境临时关闭防火墙(生产绝对不能这么做)
# 安装 lsof 并检查 2375 端口是否在监听
yum install -y lsof
lsof -i :2375
4.2 Docker Client 端配置(IP: 192.168.108.31)
bash
# 配置 IP 和主机名
hostnamectl set-hostname docker_client
nmcli connection modify ens160 \
ipv4.method manual \
ipv4.addresses 192.168.108.31/24 \
ipv4.gateway 192.168.108.2 \
ipv4.dns 192.168.108.2 \
autoconnect yes
nmcli con up ens160
# 只安装 Docker 客户端(不装服务端)
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install -y docker-ce-cli
# 连接 Server 端执行命令
# -H 192.168.108.30 意思是告诉客户端,去连接这个 IP 的 Docker 服务端
docker -H 192.168.108.30 run hello-world
docker -H 192.168.108.30 images
5. 实验四:镜像管理
💡 原版理论导读(镜像分层结构):
- 新镜像从 base 镜像一层层叠加生成。
- 最大好处:共享资源。多个镜像共享 base 镜像,宿主机只需存一份。
- 可写的容器层(Copy-on-Write):容器启动时,顶部加载一个可写层(容器层),之下全是只读的镜像层。所有修改都发生在容器层,镜像层保持不变。
docker save保存镜像,包含所有元数据和历史记录;docker export导出容器文件系统,丢失元数据和历史记录。两者不能混用。
bash
# 查看本地镜像
docker images
# 搜索镜像(去 Docker Hub 搜)
docker search httpd
# 拉取镜像
docker pull httpd
docker pull centos:7 # 冒号后面是指定版本,不加默认是 latest
docker pull ubuntu
# 给镜像打标签
# 语法:docker tag 原镜像名:原标签 新镜像名:新标签
docker tag httpd gaoqd/httpd:v1
# 删除镜像
docker rmi httpd:latest
docker rmi -f hello-world # -f 强制删除
# 保存镜像为 tar 包(类似打包备份)
docker save httpd -o httpd.tar
docker save httpd hello-world -o images.tar
# 从 tar 包加载镜像
docker load -i images.tar
# 导出容器为 tar 包(跟 save 不一样,export 会丢失历史记录和元数据)
docker export httpd1 -o myhttpd.tar
# 导入容器 tar 包为镜像
docker import myhttpd.tar myweb:v1
6. 实验五:构建镜像(Dockerfile)
💡 原版理论导读(Dockerfile与镜像构建):
- Dockerfile 是一个文本文件,记录了镜像构建的所有步骤。指令大写、顺序执行、
#注释、每条指令创建新镜像层。- 构建过程:从 base 镜像运行容器 -> 执行指令修改 -> commit 生成新镜像层 -> 基于新镜像运行新容器 -> 重复。
- 镜像缓存:Docker 会缓存已有镜像层,某层已存在直接使用。若改变指令顺序或修改指令,缓存失效。
- RUN vs CMD vs ENTRYPOINT :
RUN:执行命令并创建新的镜像层,用于安装软件包。CMD:设置容器启动后默认执行的命令及参数,可被docker run后面的命令行参数替换。ENTRYPOINT:配置容器启动时运行的命令,CMD 或docker run参数会作为参数传递给它。- 推荐 CMD 和 ENTRYPOINT 使用 Exec 格式(不解析环境变量),RUN 两种格式都可用。
👉 Dockerfile 就是一个文本文件,里面写好了构建镜像的步骤。
6.1 使用 Dockerfile 构建
bash
# 创建目录并进入
mkdir -p /root/dockerfile-demo
cd /root/dockerfile-demo
# 编写 Dockerfile
vim Dockerfile
👉 写入以下内容(# 开头的行是注释):
dockerfile
# 指定基础镜像
FROM ubuntu
# 作者信息(可选)
MAINTAINER gaoqiaodong
# 设置工作目录,后续命令都在这个目录下执行
WORKDIR /testdir
# 构建镜像时执行命令,安装 vim
RUN apt-get update && apt-get install -y vim
# 将构建上下文中的 testfile 复制到镜像的当前目录
COPY testfile /
# 设置环境变量
ENV WELCOME "You are in my container, welcome!"
# 声明容器监听 80 端口
EXPOSE 80
# 容器启动时执行的命令(如果 docker run 后面跟了命令,这里会被替换)
CMD ["/bin/bash"]
bash
# 构建镜像
# -t 是给镜像起名字,最后那个 . 代表构建上下文是当前目录(不要漏掉)
docker build -t ubuntu-with-vim-dockerfile .
6.2 Dockerfile 案例:SSH 镜像
dockerfile
FROM centos:8.4.2105
MAINTAINER gaoqiaodong
# 替换 yum 源为阿里云源(因为 CentOS 8 官方源已停止维护)
RUN minorver=8.4.2105 && \
sed -i.bak -e "s|^mirrorlist=|#mirrorlist=|g" \
-e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/\$minorver|g" \
/etc/yum.repos.d/CentOS-*.repo
# 安装 openssh-server
RUN yum install -y openssh-server
# 生成 ssh 密钥
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
# 设置 root 密码为 huawei
RUN echo "root:huawei" | chpasswd
# 暴露 22 端口
EXPOSE 22
# 容器启动时运行 sshd,-D 表示前台运行(这样容器才不会退出)
CMD ["/usr/sbin/sshd", "-D"]
bash
# 构建镜像
docker build -t centos:ssh -f centos.ssh.dockerfile .
# 运行容器
# -p 2022:22 把宿主机的 2022 端口映射到容器的 22 端口
docker run -d -p 2022:22 --name sshtest centos:ssh
# 测试 SSH 登录
ssh root@localhost -p 2022
7. 实验六:容器操作
💡 原版理论导读(容器生命周期与状态机):
docker run=docker create+docker start。- 容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器就不会退出。
- 常用状态:Created(已创建)、Running(运行中)、Paused(暂停)、Stopped/Exited(已停止)、Deleted(已删除)。
- 重启策略 :
--restart=always表示无论容器因何种原因退出(除了docker stop或docker kill),都立即重启。docker attach直接进入容器启动命令的终端,docker exec在容器中打开新的终端(推荐)。
bash
# 后台运行一个 httpd 容器
# -d 后台运行,--name 给容器取名,-p 映射端口
docker run -d --name my_http_server -p 80:80 httpd
# 查看运行中的容器
docker ps
# 创建但不启动容器
docker create --name mybusybox busybox
docker ps -a # -a 查看所有状态的容器
docker start mybusybox # 启动它
# 进入容器
# -i:保持标准输入打开
# -t:分配一个伪终端
docker exec -it my_http_server bash
# 停止 / 启动 / 重启
docker stop my_http_server
docker start my_http_server
docker restart my_http_server
# 暂停 / 恢复
docker pause my_http_server
docker unpause my_http_server
# 删除容器
docker rm my_http_server
docker rm -f $(docker ps -aq) # 强制删除所有容器
# 自动重启策略
# --restart=always 表示不管容器因为什么原因退出,都自动重启
docker run -d --restart=always --name httpd11 httpd
8. 实验七:限制容器资源
💡 原版理论导读(cgroup):
- cgroup(Control Group):Linux 内核提供的限制、记录、隔离进程组使用物理资源的机制。
- 子系统包括:
blkio(块设备IO)、cpu(CPU访问)、memory(内存限制)等。- 内存限额:
-m限制物理内存,--memory-swap限制内存+swap。内存超限会导致容器退出(OOM)。- CPU 限额:
-c或--cpu-shares设置 CPU 权重(默认 1024)。仅在 CPU 资源紧张时生效,权重高的容器获得更多时间片。
bash
# 构建 stress 压力测试镜像
# 先写 Dockerfile:
# FROM ubuntu
# RUN apt-get update && apt-get install -y stress
# ENTRYPOINT ["/usr/bin/stress"]
docker build -t ubuntu-with-stress .
# 限制内存运行
# -m 200M:物理内存限制 200M
# --memory-swap=300M:内存+swap 总共 300M
# --vm 1:启动 1 个内存测试线程
# --vm-bytes 280M:每个线程分配 280M 内存(在 300M 范围内,正常运行)
docker run -it -m 200M --memory-swap=300M \
ubuntu-with-stress --vm 1 --vm-bytes 280M -v
# 限制 CPU 权重
# -c 1024 表示权重为 1024(默认是 1024)
# -c 512 表示权重为 512(分到的时间片是前者的约一半)
docker run --name container_A -it -c 1024 ubuntu-with-stress --cpu 4 -v
docker run --name container_B -it -c 512 ubuntu-with-stress --cpu 4 -v
9. 实验八:容器网络
💡 原版理论导读(容器网络原理):
- none 网络:只有 lo,无法与外界通信。适合对安全性要求高且不需要联网的应用。
- host 网络:共享宿主机的 network namespace。容器网络配置与 host 完全一样(性能最好,但容易端口冲突)。
- bridge 网络(默认) :Docker 创建
docker0网桥。创建容器时,创建一对veth pair接口(一端在容器内eth0,另一端挂载到docker0网桥上)。通过 NAT(iptables MASQUERADE)实现容器访问外网。- 容器间通信 :同一网络内可互通,不同网络默认隔离。可通过
docker network connect打通网络。- Docker DNS :容器直接通过"容器名"通信。限制:只能在 user-defined 网络中使用,默认 bridge 网络无效。
- joined 容器:共享同一个网络栈(网卡、配置信息),适合 Web Server 与 App Server 高效通信。
- 外部访问容器 :通过端口映射(
-p),本质是宿主机启动docker-proxy进程监听端口,将流量转发给容器。
bash
# 查看网络列表
docker network ls
# none 网络:只有 lo,无法与外界通信
docker run -it --network=none busybox
# 进去后执行 ifconfig,只能看到 lo
# host 网络:容器与宿主机共享网络栈
docker run -it --network=host busybox
# 进去后 ip a,看到的网卡跟宿主机一模一样
# bridge 网络(默认)
docker run -itd --name busybox1 busybox
brctl show # 查看网桥,能看到 docker0 和挂上去的 veth 网卡
# 创建自定义 bridge 网络
docker network create --driver bridge my_net
# 创建自定义网段和网关的网络
docker network create --driver bridge \
--subnet 172.22.16.0/24 \ # 指定子网
--gateway 172.22.16.1 \ # 指定网关
my_net2
# 使用自定义网络并指定静态 IP(只有自定义了 subnet 的网络才能指定静态 IP)
docker run -it --network=my_net2 --ip 172.22.16.8 --name busybox3 busybox
# 容器间通信(同网络直接通,不同网络默认隔离)
docker exec -it busybox2 ping -c 3 172.22.16.8
# 把一个容器连接到另一个网络(打通网络)
docker network connect my_net2 busybox1
# Docker DNS(只能在自定义网络中用,默认 bridge 不能用)
docker run -it --network my_net2 --name bbox1 busybox
docker run -it --network my_net2 --name bbox2 busybox
docker exec -it bbox2 ping -c 3 bbox1 # 直接 ping 容器名字即可
# joined 容器(共享网络栈)
docker run -d -it --name web1 httpd
docker run -it --network=container:web1 busybox
# 在 busybox 里 wget 127.0.0.1 就能访问 web1 的服务
# 外部访问容器(端口映射)
docker run -d -p 8080:80 httpd
curl 192.168.108.30:8080
# 查看端口映射
docker port <容器ID>
10. 实验九:容器存储(数据卷)
💡 原版理论导读(容器存储机制):
- storage driver:管理镜像层和容器层。分层结构实现 Copy-on-Write。适合无状态应用。
- Data Volume(数据卷) :用于持久化数据。本质是 Docker Host 文件系统中的目录或文件,直接 mount 到容器。
- bind mount :将宿主机已存在的目录或文件挂载到容器。依赖宿主机目录结构,移植性弱 。可设置只读(
:ro)。- docker managed volume :只需指定容器内挂载点,Docker 自动在
/var/lib/docker/volumes/下生成目录。不依赖宿主机目录,移植性强。- volume container :专门为其他容器提供 volume 的容器(本身不需运行),其他容器通过
--volumes-from关联。- 生命周期管理 :
docker rm -v可以删除容器使用到的 volume。未被使用的孤儿 volume 可用docker volume rm或docker volume prune删除。
bash
# bind mount(挂载宿主机目录到容器)
mkdir -p /root/htdocs
echo "This is a file in host file system!" > /root/htdocs/index.html
# -v 宿主机目录:容器目录
docker run -d -p 80:80 \
-v /root/htdocs:/usr/local/apache2/htdocs \
httpd
# 只读挂载(加 :ro,容器内无法修改,提高安全性)
docker run -d -p 80:80 \
-v /root/htdocs:/usr/local/apache2/htdocs:ro \
httpd
# docker managed volume(让 Docker 自动管理挂载目录)
docker run -d -p 80:80 \
-v /usr/local/apache2/htdocs \
httpd
# 查看 volume 在宿主机的位置
docker inspect <容器ID> | grep -A 20 Mounts
# volume container(专门提供数据的容器)
docker create --name vc_data \
-v /root/htdocs:/usr/local/apache2/htdocs \
-v /other/useful/tools \
busybox
# 其他容器通过 --volumes-from 共享 volume container 的数据
docker run --name web1 -d -p 80 --volumes-from vc_data httpd
docker run --name web2 -d -p 80 --volumes-from vc_data httpd
MySQL 实战(重点注意挂载)
bash
docker pull mysql:5.7
# 挂载三个目录:日志、数据、配置
# -e 设置环境变量,这里设置 root 密码为 123456
docker run -d -p 3306:3306 \
--name mysql \
-v /gqd/mysql/log:/var/log/mysql \
-v /gqd/mysql/data:/var/lib/mysql \
-v /gqd/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
11. 实验十:Docker Compose
💡 原版理论导读(Docker Compose):
- Docker Compose 是用于定义和运行多容器的管理工具。
- 通过一个单独的
docker-compose.yml(YAML格式)模板文件定义一组相关联的应用容器。- 核心概念 :
- 服务(service):一个应用的容器(可以包括若干运行相同镜像的容器实例)。
- 项目(project):由一组关联的应用容器组成的一个完整业务单元。
- 默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理(一键启停)。
👉 Compose 是用来管理多个容器的,通过一个 YAML 文件定义。
bash
# 查看版本
docker compose version
# 创建一个项目目录
mkdir -p /root/wordpress
cd /root/wordpress
# 编写 docker-compose.yml
vim docker-compose.yml
👉 YAML 文件内容(注意缩进,不能用 Tab,只能用空格):
yaml
# 定义服务(容器)
services:
# 第一个服务名叫 blog
blog:
image: wordpress:latest # 使用 wordpress 最新镜像
restart: always # 总是自动重启
links:
- db # 连接到 db 服务(让 blog 能访问 db)
ports:
- "80:80" # 端口映射
environment: # 环境变量
- WORDPRESS_DB_HOST=db # 数据库主机名(直接用服务名 db)
- WORDPRESS_DB_USER=root # 数据库用户名
- WORDPRESS_DB_PASSWORD=huawei # 数据库密码
- WORDPRESS_DB_NAME=wordpress # 数据库名
# 第二个服务名叫 db
db:
image: mysql:latest # 使用 mysql 最新镜像
restart: always
environment:
- MYSQL_ROOT_PASSWORD=huawei # MySQL root 密码
- MYSQL_DATABASE=wordpress # 初始化时创建一个叫 wordpress 的库
bash
# 检查语法
docker compose config -q
# 后台启动(会自动创建网络、按依赖顺序启动容器)
docker compose up -d
# 查看状态
docker compose ps
# 停止并删除所有相关容器和网络
docker compose down
12. 实验十一:图形界面管理
💡 原版理论导读(图形界面与监控):
- 监控 :Docker 自带
docker ps/top/stats命令。cAdvisor是 Google 开发的容器监控工具,定位为监控数据收集器,可将数据导出给第三方工具。- 日志 :Docker 将日志发送到容器的标准输出(STDOUT)和标准错误(STDERR)。
docker logs -f可持续打印日志。- 图形界面:DockerUI 轻量易用;Portainer 功能强大,可以轻松管理容器、镜像、网络、卷,分为社区版(免费)和商业版。
DockerUI
bash
# -v /var/run/docker.sock:/var/run/docker.sock 非常重要
# 它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker
docker run -d --name docker.ui --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8999:8999 \
joinsunsoft/docker.ui
👉 访问 http://192.168.108.30:8999,默认账号密码:ginghan / 123456。
Portainer
bash
# 创建数据卷(用于持久化 Portainer 数据)
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# 查看日志,找到 setup_token(首次访问需要输入这个)
docker logs portainer
👉 访问 https://192.168.108.30:9443,创建管理员账号,输入日志里的 setup_token。
/docker.sock 非常重要
它是把宿主机的 Docker 控制套接字挂载给容器,这样 UI 才能管理宿主机的 Docker
bash
docker run -d --name docker.ui --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8999:8999 \
joinsunsoft/docker.ui
👉 访问 http://192.168.108.30:8999,默认账号密码:ginghan / 123456。
Portainer
bash
# 创建数据卷(用于持久化 Portainer 数据)
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
# 查看日志,找到 setup_token(首次访问需要输入这个)
docker logs portainer
👉 访问 https://192.168.108.30:9443,创建管理员账号,输入日志里的 setup_token。