|
| 1 | +--- |
| 2 | +comments: true |
| 3 | +--- |
| 4 | + |
| 5 | +# Docker |
| 6 | + |
| 7 | +Docker是非常重要的工具。当你需要部署服务的时候,用Docker准没错,能有效解决不同平台兼容性问题。 |
| 8 | + |
| 9 | +你可能经常遇到下面的几种情况: |
| 10 | + |
| 11 | +“这个项目安装起来好麻烦啊,这么多步骤得弄上半天” |
| 12 | + |
| 13 | +“诶,这个代码在我这儿运行就没事儿啊,怎么到你那儿就报错啊” |
| 14 | + |
| 15 | +而这正是Docker技术大显身手的场景。通过将应用程序及其依赖封装为轻量级容器,Docker实现了: |
| 16 | + |
| 17 | +- 开发/测试/生产环境的绝对一致性 |
| 18 | +- 依赖关系的完全隔离与管理 |
| 19 | +- 秒级的环境搭建与销毁能力 |
| 20 | +- 跨平台(Windows/macOS/Linux)的标准化运行 |
| 21 | + |
| 22 | +采用Docker后,团队不再需要维护冗长的环境配置文档,新人接入时间可从小时级缩短至分钟级。更重要的是,它能彻底杜绝"环境差异"导致的运行异常,让开发者真正实现"Build once, run anywhere"的理想工作模式。 |
| 23 | + |
| 24 | +# Docker基本介绍 |
| 25 | + |
| 26 | +[什么是Docker?看这一篇干货文章就够了!](https://zhuanlan.zhihu.com/p/187505981) |
| 27 | + |
| 28 | +# 安装和配置 |
| 29 | + |
| 30 | +由于不可名状的原因,在国内使用Docker会有很多阻碍,Docker下载不了,镜像拉不下来之类的网络问题。可以参考以下文章: |
| 31 | + |
| 32 | +[国内用户一键安装Docker并配置镜像源](https://www.yeluohuakai.com/posts/2024/09/4d4367cb) |
| 33 | + |
| 34 | +[完美解决Docker pull时报错:https://registry-1.docker.io/v2/-CSDN博客](https://blog.csdn.net/qingzhumuqingfeng/article/details/144094325) |
| 35 | + |
| 36 | +# 使用教程 |
| 37 | + |
| 38 | +[Docker 教程 | 菜鸟教程](https://www.runoob.com/docker/docker-tutorial.html) |
| 39 | + |
| 40 | +Docker其实并不难,只需要知道这几个常用命令就可以了 |
| 41 | + |
| 42 | +### **一、镜像管理** |
| 43 | + |
| 44 | +| 命令 | 说明 | 示例 | |
| 45 | +| --- | --- | --- | |
| 46 | +| `docker pull <镜像名>` | 从仓库下载镜像 | `docker pull nginx:latest` | |
| 47 | +| `docker images` | 查看本地所有镜像 | `docker images` | |
| 48 | +| `docker build -t <镜像名> .` | 根据 Dockerfile 构建镜像 | `docker build -t myapp:v1 .` | |
| 49 | +| `docker rmi <镜像ID>` | 删除指定镜像 | `docker rmi abc123` | |
| 50 | +| `docker image prune` | 清理无用镜像 | `docker image prune -a` | |
| 51 | + |
| 52 | +**小贴士**: |
| 53 | + |
| 54 | +- 镜像名格式为 `名称:标签`(如 `ubuntu:20.04`),默认标签为 `latest` |
| 55 | +- 构建镜像时,确保在 Dockerfile 所在目录执行命令! |
| 56 | + |
| 57 | +--- |
| 58 | + |
| 59 | +### **二、容器管理** |
| 60 | + |
| 61 | +| 命令 | 说明 | 示例 | |
| 62 | +| --- | --- | --- | |
| 63 | +| `docker run [参数] <镜像名>` | 创建并启动容器 | `docker run -d -p 80:80 --name myweb nginx` | |
| 64 | +| `docker ps` | 查看运行中的容器 | `docker ps -a`(显示全部) | |
| 65 | +| `docker start/stop <容器名>` | 启动/停止容器 | `docker stop myweb` | |
| 66 | +| `docker restart <容器名>` | 重启容器 | `docker restart myweb` | |
| 67 | +| `docker exec -it <容器名> /bin/bash` | 进入容器终端 | `docker exec -it myweb bash` | |
| 68 | +| `docker logs <容器名>` | 查看容器日志 | `docker logs -f myweb`(实时追踪) | |
| 69 | +| `docker rm <容器名>` | 删除容器 | `docker rm myweb` | |
| 70 | + |
| 71 | +**常用参数**: |
| 72 | + |
| 73 | +- `d`:后台运行(守护进程) |
| 74 | +- `p 宿主机端口:容器端口`:端口映射(如 `p 8080:80`) |
| 75 | +- `v 宿主机路径:容器路径`:目录挂载(数据持久化) |
| 76 | +- `-name`:指定容器名称(否则随机命名) |
| 77 | +- `e`:设置环境变量(如 `e MYSQL_ROOT_PASSWORD=123`) |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +### **三、网络与存储** |
| 82 | + |
| 83 | +| 命令 | 说明 | 示例 | |
| 84 | +| --- | --- | --- | |
| 85 | +| `docker network ls` | 查看所有网络 | `docker network ls` | |
| 86 | +| `docker volume create` | 创建数据卷 | `docker volume create mydata` | |
| 87 | +| `docker volume ls` | 查看所有数据卷 | `docker volume ls` | |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +### **四、实用组合命令** |
| 92 | + |
| 93 | +1. **删除所有停止的容器**: |
| 94 | + |
| 95 | + ```bash |
| 96 | + docker container prune |
| 97 | + ``` |
| 98 | + |
| 99 | +2. **一键清理无用资源**(镜像/容器/网络/缓存): |
| 100 | + |
| 101 | + ```bash |
| 102 | + docker system prune -a |
| 103 | + ``` |
| 104 | + |
| 105 | +3. **复制文件到容器**: |
| 106 | + |
| 107 | + ```bash |
| 108 | + docker cp 本地文件路径 容器名:容器路径 |
| 109 | + ``` |
| 110 | + |
| 111 | +4. **查看容器资源占用**: |
| 112 | + |
| 113 | + ```bash |
| 114 | + docker stats |
| 115 | + ``` |
| 116 | + |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +### **五、新手常见场景** |
| 121 | + |
| 122 | +1. **快速启动一个 Web 服务**: |
| 123 | + |
| 124 | + ```bash |
| 125 | + docker run -d -p 8080:80 --name webserver nginx |
| 126 | + ``` |
| 127 | + |
| 128 | + 访问 `http://localhost:8080` 即可看到 Nginx 页面! |
| 129 | + |
| 130 | +2. **调试容器内部**: |
| 131 | + |
| 132 | + ```bash |
| 133 | + docker exec -it webserver bash |
| 134 | + ``` |
| 135 | + |
| 136 | +3. **保存容器修改为新镜像**: |
| 137 | + |
| 138 | + ```bash |
| 139 | + docker commit webserver mynginx:v2 |
| 140 | + ``` |
| 141 | + |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +**总结**: |
| 146 | + |
| 147 | +- 镜像 = 模板,容器 = 根据模板运行的实例 |
| 148 | +- 操作顺序:下载镜像 → 运行容器 → 管理容器 → 清理资源 |
| 149 | +- 遇到问题多用 `docker logs` 看日志,善用 `docker exec` 进容器调试 |
0 commit comments