04 - 必会命令
Docker 命令很多,但日常 90% 的场景只用到下面这些。先混个眼熟,下一章实战时你会反复用到。
先热个身:跑一个 Ubuntu 玩玩
docker run -it ubuntu bash
这条命令会拉一个 Ubuntu 镜像并进入它的命令行。试试在里面敲 ls、cat /etc/os-release,你会发现你”进入了一个干净的 Linux 系统”——其实就是一个容器。敲 exit 退出。
-it:让你能交互式地操作(i = 交互,t = 终端)bash:进去后要执行的命令(开一个 shell)
体会一下:你电脑上明明没装 Ubuntu,却瞬间有了一个完整的 Ubuntu 环境,用完即走、互不污染。这就是容器的魅力。
核心命令清单
镜像相关
| 命令 | 作用 | 例子 |
|---|---|---|
docker pull <镜像> | 从仓库下载镜像 | docker pull python:3.11 |
docker images | 查看本地有哪些镜像 | docker images |
docker rmi <镜像> | 删除本地镜像 | docker rmi python:3.11 |
docker build -t <名字> . | 用 Dockerfile 构建镜像 | docker build -t my-app . |
容器相关
| 命令 | 作用 | 例子 |
|---|---|---|
docker run <镜像> | 用镜像启动一个容器 | docker run nginx |
docker ps | 查看正在运行的容器 | docker ps |
docker ps -a | 查看所有容器(含已停止) | docker ps -a |
docker stop <容器> | 停止容器 | docker stop my-app |
docker rm <容器> | 删除容器 | docker rm my-app |
docker logs <容器> | 查看容器日志 | docker logs my-app |
docker exec -it <容器> bash | 进入正在运行的容器 | docker exec -it my-app bash |
docker run 的常用参数(最重要)
docker run 是你用得最多的命令,下面这几个参数务必记住:
| 参数 | 作用 | 例子 |
|---|---|---|
-d | 后台运行(不占着你的终端) | docker run -d nginx |
-p 主机端口:容器端口 | 端口映射,让外部能访问容器 | docker run -p 8000:8000 my-app |
--name 名字 | 给容器起个名字,方便管理 | docker run --name web nginx |
-v 主机目录:容器目录 | 挂载数据(数据卷) | docker run -v ./data:/data my-app |
-e KEY=value | 设置环境变量 | docker run -e API_KEY=xxx my-app |
--rm | 容器停止后自动删除 | docker run --rm hello-world |
-p端口映射特别重要:容器是隔离的,里面服务跑在 8000 端口,外面默认访问不到。-p 8000:8000的意思是”把我电脑的 8000 端口,转发到容器的 8000 端口”,这样你才能用浏览器访问。下一章实战会立刻用到。
容器 vs 镜像,命令怎么区分?
一个简单的记忆法:
- 操作镜像(image)的命令:
images、pull、rmi、build - 操作容器(container)的命令:
ps、run、stop、rm、logs、exec
一个典型工作流
# 1. 构建镜像
docker build -t my-ai-app .
# 2. 后台运行,映射端口,起个名字
docker run -d -p 8000:8000 --name ai my-ai-app
# 3. 看看跑起来没
docker ps
# 4. 看日志(排错神器)
docker logs ai
# 5. 进容器里看看
docker exec -it ai bash
# 6. 用完停掉并删除
docker stop ai
docker rm ai
小结
- 最常用:
run/ps/logs/stop/rm/build/images。 docker run的-d、-p、--name、-v必须熟练。-p端口映射是让外部访问容器服务的关键。
命令过完了,下一章——真正动手把一个 FastAPI 服务装进 Docker,把前面学的全用上。
上一章 ← 03 - 安装 Docker | 下一章 → 05 - 把 FastAPI 服务装进 Docker