一、先用版本和信息命令认识当前环境¶
在执行任何镜像或容器操作之前,先确认 Docker 当前环境是否正常是个非常好的习惯。
1.1 查看 Docker 版本¶
docker version
这个命令通常会显示:
- Client 和 Server 版本
- API 版本
- Git Commit
- containerd 版本
- runc 版本
它适合用来快速确认当前机器上的 Docker 版本栈。
1.2 查看 Docker 详细信息¶
docker info
这个命令更适合排障和环境审计,重点可以看:
Storage DriverLogging DriverCgroup DriverRuntimesDocker Root DirRegistry Mirrors
二、镜像管理是 Docker 操作的起点¶
镜像是容器运行的模板,因此镜像管理通常是第一批必须掌握的命令。
2.1 搜索镜像¶
docker search nginx
2.2 拉取镜像¶
docker pull registry.cn-beijing.aliyuncs.com/dotbalo/counter:v1
docker pull nginx
docker pull nginx:1.15
docker pull --platform=linux/arm64 centos:7
这几条命令分别展示了:
- 从指定仓库拉取镜像
- 使用默认仓库拉取镜像
- 拉取指定版本
- 拉取指定系统架构镜像
2.3 上传镜像¶
docker push registry.cn-beijing.aliyuncs.com/dotbalo/counter:v1
2.4 查看本地镜像¶
docker images | grep nginx
2.5 修改镜像标签¶
docker tag nginx-v2 dotbalo/nginx-v2:test
docker tag nginx-v2 镜像仓库地址/nginx-v2:test
2.6 删除镜像¶
docker rmi 镜像ID
常见场景是清理无用镜像或清理 none 标签镜像。
2.7 导出与导入镜像¶
docker save -o counter-v2.tar registry.cn-beijing.aliyuncs.com/dotbalo/counter:v2
docker load -i counter-v2.tar
这组命令很适合离线环境传输镜像。
三、容器管理是日常使用最频繁的部分¶
3.1 启动容器¶
前台交互式启动:
docker run -ti nginx bash
docker run -ti --rm nginx bash
后台启动:
docker run -tid nginx bash
其中:
-ti适合交互调试--rm适合临时容器,用完即删-d适合后台常驻服务
3.2 查看容器¶
docker ps
docker ps -a
docker ps -q
docker ps -aq
这几条命令分别用于:
- 查看运行中的容器
- 查看所有容器
- 只看运行中容器 ID
- 只看全部容器 ID
3.3 查看容器详细信息¶
docker inspect 1de2ef08945f | grep Port
3.4 查看日志¶
docker logs -f 容器ID或容器名称 --tail 1
3.5 进入容器¶
docker exec -ti 86b1c069024b bash
3.6 端口映射¶
docker run -ti -p 1111:80 nginx bash
3.7 停止容器¶
docker stop 600e5da5c196
docker stop web01
3.8 删除已退出容器¶
docker rm $(docker ps -a -q -f "status=exited")
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm
四、Docker 数据管理为什么特别重要¶
很多新手第一次接触容器时,最容易忽视的是数据问题。容器本身适合承载应用进程,但数据如果处理不好,就会在重建、迁移和更新时带来很多麻烦。
4.1 挂载文件和目录¶
挂载文件:
docker run -tid -p 1111:80 -v /etc/hosts:/etc/hosts registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6 bash
挂载目录:
docker run -tid -p 1111:80 -v /mnt:/mnt registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6 bash
4.2 不挂载时,数据会不会丢¶
原始笔记给了一个很有代表性的例子:在不挂载的情况下,把内容写进容器,再停止并重新启动同一个容器,数据依然存在。
示例流程如下:
docker run -tid --name test1 registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6
docker exec -it 2b92c6f159ff bash
echo "123" > /usr/share/nginx/html/index.html
docker stop 2b92c6f159ff
docker start 2b92c6f159ff
docker exec 2b92c6f159ff cat /usr/share/nginx/html/index.html
这说明同一个容器重新启动后,原来写入容器可写层的数据还在。
4.3 为什么通常更推荐挂载目录¶
原始笔记里有一个很实用的结论:挂载目录通常优于直接挂载单文件。
原因在于:
- 挂载文件时,宿主机文件 inode 变化可能导致同步行为不理想
- 挂载目录时,宿主机文件变化更容易实时反映到容器内
因此在生产环境里,配置目录、静态资源目录和持久化数据目录的挂载通常更稳妥。
4.4 宿主机与容器之间拷贝文件¶
宿主机拷贝到容器:
docker cp README.md 92aceec0dcdd327a709bf0ec83:/tmp
容器拷贝到宿主机:
docker cp 92aceec0dcdd327a709bf0ec83:/tmp/README.md /tmp
五、Docker 部署服务时可以按什么顺序做¶
原始笔记最后给出了一套非常适合入门者记忆的通用部署步骤:
- 确认需要部署的服务
- 了解服务运行所需基础配置
- 找到基础镜像
- 下载镜像
- 完成配置并启动服务
- 做最终验证
这套方法看似简单,但其实非常实用。因为很多容器化部署失败,并不是命令不会,而是前置调研没做好,比如:
- 不清楚服务依赖哪些环境变量
- 不知道哪些目录必须挂载
- 不知道端口如何映射
- 不知道初始账号、密码或初始化方式
六、把这篇命令实践真正用起来¶
如果你是刚开始学 Docker,建议不要一口气背所有命令,而是优先把下面几组最常用操作反复练熟:
pull、images、tag、rmirun、ps、exec、logs、stop、rm-p、-v、cpsave、load
当这些命令足够熟练后,再去学 Docker Compose、镜像构建、私有仓库、CI/CD 和 Kubernetes 工作负载,整个知识体系会顺很多。