这个之前总结过了
但是,还是那个,如果说一个开发者会使用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,默认可以互相访问。但你更需要的是端口映射 (主机到容器)和容器间通信(自定义网络)。
-
关键命令 :
bashdocker network create mynet # 创建自定义网络 docker run --network=mynet --name=app1 ... # 容器加入网络 docker run --network=mynet --name=app2 ... # 然后 app2 中可以直接 ping app1 -
常用网络命令 :
docker network ls、docker network inspect
2. 产生的数据怎么处置
-
理解 :容器删了,里面的数据就没了(像一次性塑料袋)。要保留数据,用卷(volume) 或绑定挂载。
-
关键命令 :
bashdocker volume create mydata # 创建卷 docker run -v mydata:/app/data ... # 使用卷(Docker管理路径) docker run -v /host/path:/app/data ... # 绑定挂载(主机上的目录) -
常用数据命令 :
docker volume ls、docker volume inspect
3. 运行情况监控
-
理解:看容器用了多少CPU/内存,看日志,看进程。
-
关键命令 :
bashdocker stats # 实时资源监控 docker top 容器ID # 看容器内的进程 docker logs -f 容器ID # 实时跟踪日志(-f 是 follow) docker inspect 容器ID # 看容器的所有详细信息(网络、卷、配置等)
4. 运行时应配置什么参数
- 不只是
-p和-v,还有:-e:环境变量(如-e MYSQL_ROOT_PASSWORD=123)--restart=always:自动重启(宕机了拉起来)--cpus="1.5"、--memory="1g":限制资源--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