对于docker相关的理解
这个之前总结过了但是还是那个如果说一个开发者会使用docker那么他到底需要理解和掌握docker的哪些领域和命令。简单理解一下这个就是一个塑料袋。把软件和软件产生的数据。直接装到一起。然后一键启动软件一键打包软件。第一阶段前端的朋友理解npm包后端的理解maven其实他们本质上都是一样的。有一个大的软件包仓库。我们在本地config文件夹配置一下。然后执行命令从远方的那个代码仓库里拉出软件包。拉倒本地。这个阶段就有两个层面要理解了1.配置本地的软件包怎么配置在哪里配置配置什么东西2.要使用哪些命令。第二阶段在使用dokcer的时候网络怎么配置在使用docker的时候产生的数据怎么处置在使用docker的运行情况怎么样doker在运行时候应该配置什么参数你的“塑料袋”比喻很生动——把软件和它的运行环境、依赖甚至部分数据都打包进去隔离又便携。基于这个理解一个会使用Docker的开发者并不需要背所有命令而是需要掌握几个核心领域和对应的关键命令。我们按你分的两个阶段再补上第三个实用阶段。第一阶段基础操作 —— 拉包、运行、打包对应你的“npm/maven”类比核心是理解镜像软件包和容器运行中的软件实例。1. 配置层面在哪里配置什么Dockerfile用来构建镜像的配方文件。你需要会写它来定义你的软件环境比如FROM node:18、COPY . .、RUN npm install。docker-compose.yml用来一键启动多个关联容器的配置比如前端后端数据库。大部分生产场景用这个。~/.docker/config.json本地登录远程仓库的认证信息很少手动改。2. 核心命令需要掌握领域命令作用拉取镜像docker pull nginx从仓库如Docker Hub下载镜像到本地查看本地镜像docker images看有哪些软件包已下载运行容器docker run -d -p 8080:80 nginx-d后台运行-p主机端口:容器端口列出运行中的容器docker ps查看当前运行的“塑料袋”列出所有容器docker ps -a包括已停止的停止/启动/重启docker stop/start/restart 容器ID控制生命周期删除容器docker rm 容器ID移除停止的容器删除镜像docker rmi 镜像名移除本地镜像包查看日志docker logs 容器ID看软件输出调试必备进入容器内部docker exec -it 容器ID /bin/bash像SSH进到塑料袋里检查构建镜像docker build -t myapp .根据Dockerfile打包推送镜像docker push myusername/myapp上传到仓库类似npm publish第一阶段掌握标志能写一个Dockerfile把自己写的网页/服务打包成镜像然后用docker run跑起来能从浏览器访问到。第二阶段网络、数据、运行状态你提的三点非常关键这是Docker从“玩具”走向“可用”的分水岭。1. 网络怎么配置理解每个容器有独立IP默认可以互相访问。但你更需要的是端口映射主机到容器和容器间通信自定义网络。关键命令dockernetwork create mynet# 创建自定义网络dockerrun--networkmynet--nameapp1...# 容器加入网络dockerrun--networkmynet--nameapp2...# 然后 app2 中可以直接 ping app1常用网络命令docker network ls、docker network inspect2. 产生的数据怎么处置理解容器删了里面的数据就没了像一次性塑料袋。要保留数据用卷(volume)或绑定挂载。关键命令dockervolume create mydata# 创建卷dockerrun-vmydata:/app/data...# 使用卷Docker管理路径dockerrun-v/host/path:/app/data...# 绑定挂载主机上的目录常用数据命令docker volume ls、docker volume inspect3. 运行情况监控理解看容器用了多少CPU/内存看日志看进程。关键命令dockerstats# 实时资源监控dockertop容器ID# 看容器内的进程dockerlogs-f容器ID# 实时跟踪日志-f 是 followdockerinspect 容器ID# 看容器的所有详细信息网络、卷、配置等4. 运行时应配置什么参数不只是-p和-v还有-e环境变量如-e MYSQL_ROOT_PASSWORD123--restartalways自动重启宕机了拉起来--cpus1.5、--memory1g限制资源--name给容器起名方便管理第二阶段掌握标志能用docker-compose.yml一次启动Nginx PHP MySQL数据存在卷里重启后还在能看懂docker stats。第三阶段补充实用场景的必备理解一个真正在用Docker的开发者还会遇到这些问题场景理解和命令清理空间docker system prune -a— 删除所有停止的容器、未用的镜像、网络、构建缓存查看磁盘占用docker system df复制文件进出容器docker cp 文件 容器ID:/路径或反过来临时运行一个工具docker run --rm -it alpine sh—--rm用完自动删-it交互式查看两个镜像的区别docker diff 容器ID— 容器启动后改动了哪些文件把现有容器保存为新镜像docker commit 容器ID mynewimage— 不推荐要用Dockerfile总结一个“会使用Docker的开发者”的最低知识图谱核心认知镜像(类) vs 容器(实例)卷(持久化) vs 容器(临时)端口映射自定义网络。必须手打的命令约15个pull, images, run, ps, stop, rm, rmi, logs, exec, build, push, network, volume, stats, system prune必须会写的文件Dockerfile基础版docker-compose.yml常见版不用背但要懂的概念仓库/Tag、桥接网络、挂载类型(volume/bind)、entrypoint vs CMD