Docker概念学习
摘要:简要记录docker相关概念学习、常用命令总结(部分命令总结由gemini2.5pro生成)以及易错总结
1. Docker相关概念
1.1 是什么?
–是一个容器化平台,它可以把应用程序及其依赖的运行环境(包括系统库、配置、工具等)打包成一个可移植的容器(Container),从而保证在任何地方都能以相同的方式运行。
1.2 Dockerfile
–定义镜像如何构建的脚本
1.3 Dockerhub
–官方镜像仓库(类似 GitHub)
1.4 Image
–打包好的“程序 + 环境”模板
1.5 Docker Daemon (守护进程)
–Docker 的核心后台服务(因为docker工作是采用CS架构,docker daemon即server端,并且client端和server端是可以运行在同一台机器上的),负责管理镜像、容器、网络和数据卷,在客户端输入的 docker命令将转发给docker daemon执行。
1.6 学习来源
1.7 总结
–总之是,先写dockerfile在dockerbuild,产生镜像,然后dockerrun镜像,生成container(Dockerfile → docker build → docker run → Container 启动成功)
2. 常用命令总结
以下是 Docker 操作中常用的一些命令,主要分为启动、镜像、容器、查看和清理几大类。
2.1启动相关
2.1.1 Linux
- 启动 Docker 服务
sudo systemctl start docker
停止 Docker 服务
sudo systemctl stop docker重启 Docker 服务
sudo systemctl restart docker查看 Docker 服务状态
sudo systemctl status docker
2.1.1 MAC(M系列芯片)(mac不支持systemctl命令)
方式使用colima(轻量级 Linux虚拟机)(本质上是控制整个虚拟机的工具)
安装brew install colima
启动dockercolima start
关闭dockercolima stop
查看colima状态(相当于 systemctl status docker)colima status
更多用法及设置(以上列出的用法对于日常需求应该足够了)https://github.com/abiosoft/colima
2.1 镜像相关命令 (Image)
搜索镜像
docker search- 从 Docker Hub 上搜索镜像。
docker search nginx
拉取镜像
docker pull- 从镜像仓库(默认为 Docker Hub)拉取镜像到本地。
docker pull ubuntu:20.04(拉取指定版本的 ubuntu)docker pull redis(不指定版本,默认拉取latest最新版)
查看本地镜像
docker images或docker image ls- 列出本地已经存在的所有镜像。
docker images
构建镜像
docker build- 根据 Dockerfile 文件构建一个新的镜像。
docker build -t my-app:1.0 .-t: (tag) 给镜像打上标签,格式为name:tag。.: 表示 Dockerfile 文件在当前目录下。
删除本地镜像
docker rmi或docker image rm- 删除一个或多个本地镜像。
docker rmi [IMAGE_ID or REPOSITORY:TAG]docker rmi my-app:1.0- 注意:如果该镜像被某个容器正在使用,需要先删除容器才能删除镜像。
2.2 容器相关命令 (Container)
运行容器
docker run- 这是最核心的命令,基于一个镜像创建并启动一个容器。
docker run -it ubuntu:20.04 /bin/bash(交互式地进入 ubuntu 容器的 shell)docker run -d -p 8080:80 --name my-web nginx(后台运行一个 nginx 容器)-d: (detach) 后台运行容器。-p: (publish) 端口映射,格式为主机端口:容器端口。--name: 给容器指定一个名字,方便后续操作。-it: (interactive & tty) 交互模式,通常一起使用来进入容器命令行。-v: (volume) 挂载数据卷,实现宿主机和容器之间的数据同步,格式为宿主机目录:容器内目录。
查看运行中的容器
docker ps- 列出当前正在运行的容器。
docker ps -a: 列出所有容器,包括已经停止的。
停止容器
docker stop- 停止一个正在运行的容器。
docker stop [CONTAINER_ID or NAME]docker stop my-web
启动容器
docker start- 启动一个已经停止的容器。
docker start [CONTAINER_ID or NAME]
重启容器
docker restart- 重启一个容器(无论其当前是运行还是停止状态)。
docker restart [CONTAINER_ID or NAME]
删除容器
docker rm- 删除一个或多个已经停止的容器。
docker rm [CONTAINER_ID or NAME]docker rm -f [CONTAINER_ID or NAME]:-f(force) 强制删除正在运行的容器。
进入正在运行的容器
docker exec- 在正在运行的容器中执行命令,最常用于进入容器内部进行调试。
docker exec -it [CONTAINER_ID or NAME] /bin/bash(进入容器的 shell 环境)
2.3 查看信息与日志
查看容器日志
docker logs- 获取容器的标准输出日志。
docker logs [CONTAINER_ID or NAME]docker logs -f [CONTAINER_ID or NAME]:-f(follow) 持续跟踪日志输出,类似tail -f。
查看容器/镜像详细信息
docker inspect- 获取容器或镜像的底层详细信息,以 JSON 格式返回。
docker inspect [CONTAINER_ID or IMAGE_ID]
2.4 清理命令
- 一键清理
docker system prune- 一个非常方便的命令,可以一次性清理掉无用的 Docker 资源。
docker system prune: 会删除所有已停止的容器、所有悬空镜像(dangling images)、所有未被使用的网络。docker system prune -a: 会更彻底地删除所有未被任何容器使用的镜像。使用时请小心!
3 常用命令易错点总结
总结表格
| 易错场景 | 错误原因 | 解决方案 |
|---|---|---|
| 创建同名容器失败 | docker stop 只停止容器,不删除,名字仍被占用。 |
先用 docker rm <旧容器名> 删除,再用 docker run 创建。 |
| 启动容器后终端被卡住 | 忘记使用 -d 参数,默认认情况下,容器在前台运行,并把输出附加到终端上。 |
添加 -d 参数,如 docker run -d ...使其挂后台运行。 |
| 无法从外部访问容器服务 | 容器默认是隔离的,它的网络和主机不互通,需要使用 -p 参数进行端口映射。 |
添加 -p 主机端口:容器端口 参数。 |
| 删除容器后数据丢失 | 容器的文件系统是临时的。当容器被删除时,它内部所有未挂载出去的数据都会被一同删除。 | 对于重要数据,必须使用 -v 主机目录:容器目录 进行挂载。 |
| 镜像无法删除 | 有基于该镜像的容器(即使已停止)存在。 | 先用 docker ps -a 找到并用 docker rm 删除所有相关容器。 |
| 构建镜像时命令报错 | docker build 命令末尾忘记指定构建上下文路径。 |
在命令末尾加上路径,通常是 .,表示当前目录。 |
(PS:绝大多数情况下,你都不需要从零开始写 Dockerfile。你可以直接利用 Docker Hub 上数以万计的、由官方或社区打包好的现成 Image,而 docker run 命令足够智能,在你本地没有这个 Image 时,会自动帮你从网上下载/那什么使用需要dockerfile?–当你需要打包和部署你自己的应用程序时)

