跳转至

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