Docker 常用命令:容器化部署与管理¶
Docker 的核心思想是"一次打包,到处运行"。它把你的应用程序连同它所需要的所有环境依赖(操作系统、库、配置文件等)一起打包成一个标准化的镜像 (Image),然后在任何安装了 Docker 的机器上以容器 (Container) 的形式运行,彻底解决"在我电脑上能跑啊"的问题。
理解 Docker 的三个核心概念:
- 镜像 (Image): 一个只读的模板,相当于一个"安装包"或"类"。它包含了运行应用所需的一切。
- 容器 (Container): 镜像的一个运行实例,相当于一个正在运行的"虚拟机(但更轻量)"或"对象"。你可以创建、启动、停止、删除容器。
- 仓库 (Registry): 存放镜像的地方,最常用的公共仓库是 Docker Hub。
1. 镜像管理 (Image)¶
镜像是创建容器的基础,你需要先拥有一个镜像才能运行容器。
| 功能说明 | 具体命令 | 备注 |
|---|---|---|
| 搜索镜像 | docker search nginx |
从 Docker Hub 搜索公共镜像。 |
| 拉取镜像 | docker pull nginx |
默认拉取 latest 标签的镜像。 |
| 拉取指定版本 | docker pull python:3.10-slim |
冒号后面跟 Tag(版本标签),slim 表示精简版。 |
| 查看本地镜像 | docker images |
列出本地已下载的所有镜像,包含大小信息。 |
| 删除镜像 | docker rmi nginx |
删除前需确保没有容器正在使用该镜像。 |
| 构建镜像 | docker build -t myapp:1.0 . |
根据当前目录下的 Dockerfile 构建镜像,-t 指定名称和标签。 |
| 清理无用镜像 | docker image prune |
删除所有没有被任何容器引用的"悬空"镜像,释放磁盘空间。 |
2. 容器管理 (Container) —— 核心¶
这是你日常使用 Docker 最频繁的部分。
| 功能说明 | 具体命令 | 备注 |
|---|---|---|
| 创建并运行容器 | docker run -d --name my_nginx -p 8080:80 nginx |
最常用! -d 后台运行,--name 自定义容器名,-p 端口映射(主机端口:容器端口)。 |
| 交互式运行 | docker run -it python:3.10 bash |
-it 进入容器内部的终端,适合需要交互操作的场景。 |
| 查看运行中的容器 | docker ps |
只看正在运行的。加 -a 参数可以看到所有容器(包括已停止的)。 |
| 停止容器 | docker stop my_nginx |
优雅地停止容器(发送 SIGTERM 信号)。 |
| 启动已停止的容器 | docker start my_nginx |
重新启动一个之前被 stop 的容器。 |
| 重启容器 | docker restart my_nginx |
等于先 stop 再 start。 |
| 删除容器 | docker rm my_nginx |
删除已停止的容器。加 -f 可以强制删除运行中的容器。 |
| 进入运行中的容器 | docker exec -it my_nginx bash |
极度常用! 在一个正在运行的容器里执行命令或开启一个终端进行调试。 |
| 查看容器日志 | docker logs my_nginx |
查看容器的标准输出日志。加 -f 可以实时跟踪(类似 tail -f)。 |
| 查看容器详细信息 | docker inspect my_nginx |
查看容器的 IP 地址、挂载卷、端口映射等完整配置信息。 |
| 清理所有停止的容器 | docker container prune |
一键删除所有已停止的容器。 |
3. 数据卷与挂载 (Volume)¶
容器本身是"用完即扔"的,如果你需要持久化保存数据(比如数据库文件),就必须使用数据卷。
| 功能说明 | 具体命令 | 备注 |
|---|---|---|
| 挂载目录运行 | docker run -v /宿主机路径:/容器内路径 nginx |
最常用! 把宿主机的文件夹映射到容器内,实现数据持久化和文件共享。 |
| 创建命名卷 | docker volume create my_data |
创建一个由 Docker 管理的数据卷。 |
| 查看所有卷 | docker volume ls |
列出所有数据卷。 |
| 删除卷 | docker volume rm my_data |
删除指定的数据卷。 |
| 清理无用卷 | docker volume prune |
删除所有没有被容器使用的数据卷。 |
4. Docker Compose:多容器编排¶
当你的项目需要同时运行多个服务(比如一个 Web 应用 + 一个数据库 + 一个 Redis 缓存),手动挨个 docker run 就太麻烦了。Docker Compose 让你用一个 docker-compose.yml 文件定义所有服务,然后一键启动。
一个典型的 docker-compose.yml 示例:
version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./app:/code
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
| 功能说明 | 具体命令 | 备注 |
|---|---|---|
| 启动所有服务 | docker compose up -d |
最常用! 在 docker-compose.yml 所在目录执行,-d 后台运行。 |
| 停止所有服务 | docker compose down |
停止并删除所有容器、网络。加 -v 可同时删除数据卷。 |
| 查看服务状态 | docker compose ps |
查看当前 Compose 项目中所有服务的运行状态。 |
| 查看服务日志 | docker compose logs -f |
实时查看所有服务的日志,也可以指定服务名如 docker compose logs -f web。 |
| 重新构建服务 | docker compose up -d --build |
当修改了 Dockerfile 后,加 --build 强制重新构建镜像。 |
| 只启动某个服务 | docker compose up -d web |
只启动指定的服务(及其依赖)。 |
5. Dockerfile 常用指令速查¶
Dockerfile 就是构建镜像的"说明书",告诉 Docker 如何一步步搭建你的环境。
# 以 Python 3.10 精简版为基础
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 先复制依赖文件并安装(利用 Docker 缓存层加速构建)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 暴露端口
EXPOSE 8000
# 容器启动时执行的命令
CMD ["python", "app.py"]
| 指令 | 用途 | 示例 |
|---|---|---|
FROM |
指定基础镜像 | FROM ubuntu:22.04 |
WORKDIR |
设置工作目录 | WORKDIR /app |
COPY |
复制文件到镜像 | COPY . /app |
RUN |
构建时执行命令 | RUN apt-get update && apt-get install -y curl |
ENV |
设置环境变量 | ENV APP_ENV=production |
EXPOSE |
声明容器监听的端口 | EXPOSE 8080 |
CMD |
容器启动时的默认命令 | CMD ["python", "app.py"] |
ENTRYPOINT |
容器启动时的固定入口 | ENTRYPOINT ["python"],搭配 CMD ["app.py"] 使用 |
6. 常用技巧与实用命令¶
| 功能说明 | 具体命令 | 备注 |
|---|---|---|
| 查看磁盘占用 | docker system df |
查看镜像、容器、数据卷各自占了多少空间。 |
| 一键清理所有无用资源 | docker system prune -a |
核弹级清理! 删除所有停止的容器、无用的网络、悬空镜像和构建缓存。 |
| 复制文件到容器 | docker cp 本地文件 容器名:/容器内路径 |
在宿主机和容器之间传输文件。 |
| 从容器复制文件 | docker cp 容器名:/容器内路径 本地路径 |
反向操作,从容器中取出文件。 |
| 查看容器资源占用 | docker stats |
实时监控所有运行中容器的 CPU、内存、网络等使用情况。 |
| 导出镜像为文件 | docker save -o myapp.tar myapp:1.0 |
把镜像打包成 .tar 文件,方便在没有网络的机器间传递。 |
| 从文件导入镜像 | docker load -i myapp.tar |
加载 .tar 文件中的镜像。 |
7. 实践注意¶
# 进入docker容器后,可能会遇到网络访问受限的问题(比如无法使用apt-get安装软件、无法克隆仓库)。这是因为Docker默认使用了一个独立的网络环境,可能无法直接访问外部网络。解决方法是配置Docker的网络代理:
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897
# 在容器环境内退出
exit
# start_isaac.sh启动脚本
# 可以在启动文件start_isaac.sh中设置启动后的入口(进入容器后的指定出生点 (-w))
docker exec -w /root/isaac_ws/openarm_isaac_lab -it isaac-lab bash
# 挂载目录的设置也要注意
-v ~/isaac_ws:/root/isaac_ws:rw