Docker 是一个开源的容器化平台,用于构建、部署和运行应用程序。以下是一些常用的 Docker 命令,按类别分类整理:


🐳 1. 镜像(Images)相关命令

  • 列出本地镜像

    docker images
    
  • 拉取镜像

    docker pull <image_name>:<tag>
    # 示例:
    docker pull nginx:latest
    
  • 构建镜像(从 Dockerfile)

    docker build -t <image_name>:<tag> .
    # 示例:
    docker build -t myapp:v1 .
    
  • 删除镜像

    docker rmi <image_id_or_name>
    
  • 查看镜像历史

    docker history <image_name>
    

📦 2. 容器(Containers)相关命令

  • 列出正在运行的容器

    docker ps
    
  • 列出所有容器(包括已停止的)

    docker ps -a
    
  • 运行容器

    docker run [OPTIONS] <image_name>
    # 常用选项:
    # -d:后台运行(detached)
    # -p host_port:container_port:端口映射
    # --name:指定容器名称
    # -v /host/path:/container/path:挂载卷
    # 示例:
    docker run -d -p 8080:80 --name mynginx nginx
    
  • 启动/停止/重启容器

    docker start <container_id_or_name>
    重启全部容器:docker restart $(docker ps -a -q)
    docker stop <container_id_or_name>
    1. 优雅停止所有容器(推荐):docker stop $(docker ps -q)
    2. 强制停止所有容器(卡死时用):docker kill $(docker ps -q)
    3. 停止并删除所有容器:docker rm -f $(docker ps -a -q)
    docker restart <container_id_or_name>
    
    
  • compose操作

停止当前项目的所有容器 → 并删除这些容器 + 网络:docker compose down
重新构建镜像 → 启动 / 更新所有服务 → 后台运行:docker compose up -d --build
-d (detach 后台运行),--build (最重要!启动前强制重新构建镜像)
  • 进入正在运行的容器

    docker exec -it <container_id_or_name> /bin/bash
    
  • 查看容器日志

    docker logs <container_id_or_name>
    # 实时跟踪日志:
    docker logs -f <container_id_or_name>
    
  • 删除容器

    docker rm <container_id_or_name>
    # 强制删除正在运行的容器:
    docker rm -f <container_id_or_name>
    

🗃️ 3. 卷(Volumes)相关命令

  • 创建卷

    docker volume create <volume_name>
    
  • 列出卷

    docker volume ls
    
  • 查看卷详情

    docker volume inspect <volume_name>
    
  • 删除卷

    docker volume rm <volume_name>
    

🌐 4. 网络(Networks)相关命令

  • 创建网络

    docker network create <network_name>
    
  • 列出网络

    docker network ls
    
  • 连接容器到网络

    docker network connect <network_name> <container_name>
    
  • 断开容器与网络

    docker network disconnect <network_name> <container_name>
    
  • 删除网络

    docker network rm <network_name>
    

🧹 5. 系统清理命令

  • 删除所有停止的容器、未使用的网络、构建缓存等

    docker system prune
    
  • 加上 -a 删除所有未使用的镜像(不仅仅是 dangling 镜像)

    docker system prune -a
    

📁 6. 其他实用命令

  • 查看 Docker 信息

    docker info
    
  • 查看 Docker 版本

    docker version
    
  • 将容器保存为镜像(提交更改)

    docker commit <container_id> <new_image_name>:<tag>
    
  • 导出/导入容器或镜像

    # 导出容器快照
    docker export <container_id> > container.tar
    
    # 导入为镜像
    docker import container.tar <image_name>:<tag>
    
    # 保存镜像为 tar 文件
    docker save -o image.tar <image_name>
    
    # 从 tar 加载镜像
    docker load -i image.tar
    

如果你需要在没有网络连接的环境中使用 Docker 镜像,可以通过“有网机器下载打包 -> 传输文件 -> 无网机器加载”的方式来实现。

这是一个非常成熟的操作流程,核心在于使用 Docker 自带的 saveload 命令。以下是具体的操作步骤:

📦 第一步:在有网络的机器上下载并打包镜像

你需要有一台可以访问互联网的电脑(可以是你的本地电脑或跳板机),将所需的镜像下载下来并导出为一个压缩文件。

  1. 拉取镜像
    使用 docker pull 命令下载你需要的镜像及版本。

    # 语法:docker pull 镜像名:标签
    docker pull nginx:latest
    docker pull redis:6.2.17
    
  2. 验证镜像
    确保镜像已经下载成功。

    docker images | grep nginx
    
  3. 导出为离线文件 (.tar)
    使用 docker save 命令将镜像保存为一个 tar 包。你可以把多个镜像打到同一个包里。

    # 语法:docker save -o 输出文件名.tar 镜像名:标签
    docker save -o nginx-redis-offline.tar nginx:latest redis:6.2.17
    
    • 进阶技巧:如果文件很大,传输困难,你可以使用压缩流来减小体积(这会生成一个 .tar.gz 文件):
    docker save nginx:latest | gzip > nginx-latest.tar.gz
    

🚚 第二步:将文件传输到离线机器

将生成的 .tar 文件通过以下方式拷贝到目标离线服务器或虚拟机中:

  • 物理介质:U盘、移动硬盘。
  • 内部传输:SCP命令、FTP、内部共享网盘、scp。
  • 云桌面:直接上传文件。

📥 第三步:在离线机器上加载镜像

在没有网络的服务器上,执行以下命令加载镜像。

  1. 加载镜像
    使用 docker load 命令读取 tar 包。

    # 语法:docker load -i 镜像文件.tar
    docker load -i nginx-redis-offline.tar
    
    • 如果你在第一步使用了 gzip 压缩,加载时需要使用:
    docker load < nginx-latest.tar.gz
    
  2. 验证加载结果
    检查镜像是否已经出现在本地列表中。

    docker images
    
  3. 运行容器
    现在你可以像平常一样使用 docker run 启动容器了。

    docker run -d -p 80:80 nginx:latest
    

📊 核心命令速查表

为了方便你记忆,我整理了最关键的两个命令:

操作命令示例说明
导出 (有网端)docker save -o app.tar nginx:latest将镜像保存为离线文件
加载 (离线端)docker load -i app.tar将离线文件导入 Docker 环境

💡 常见问题与技巧

  • 如何处理依赖?
    如果你的应用需要在容器内安装系统依赖(如 ffmpeggcc),建议在有网机器上构建一个“预装依赖的基础镜像”,然后导出这个基础镜像,而不是试图在离线机器上执行 apt-get install
  • 文件太大怎么办?
    如上述进阶技巧所示,使用 gzip 压缩可以显著减小文件体积(通常能减少 60% 以上),传输后再在离线端解压加载。
  • 批量操作
    如果你需要迁移服务器上所有的镜像,可以使用脚本批量导出和导入,避免遗漏。

在离线环境中部署容器时,预先在有网络的机器上构建一个包含所有系统依赖(如 ffmpeggcclibgl1 等)的基础镜像,然后通过 docker save 导出并传输到目标离线机器,是最可靠、最高效的做法。

下面我将为你提供一个完整的操作流程,包括 Dockerfile 编写 → 构建镜像 → 导出 → 在离线环境加载使用


✅ 第一步:编写 Dockerfile(预装依赖)

创建一个 Dockerfile,基于官方基础镜像(如 ubuntu:22.04python:3.11-slim),并在其中安装所需依赖。

# 使用官方 Ubuntu 作为基础镜像
FROM ubuntu:22.04

# 设置非交互式安装(避免 apt 弹出配置界面)
ENV DEBIAN_FRONTEND=noninteractive

# 更新包索引并安装常用依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        ffmpeg \
        gcc \
        g++ \
        make \
        curl \
        wget \
        git \
        libgl1 \
        libglib2.0-0 \
        && \
    # 清理缓存以减小镜像体积
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
    
# 可选:设置工作目录或默认命令
WORKDIR /app
CMD ["bash"]

💡 提示

  • --no-install-recommends 可避免安装不必要的推荐包,减小体积。
  • 最后一定要 apt-get clean 和删除 /var/lib/apt/lists/*,否则镜像会非常大。

🛠️ 第二步:在有网机器上构建镜像

在包含 Dockerfile 的目录下执行:

# 构建镜像,命名为 my-offline-base:latest
docker build -t my-offline-base:latest .

构建过程中,Docker 会自动下载基础镜像并执行 apt-get install 安装所有依赖。

验证是否成功:

docker run --rm my-offline-base:latest ffmpeg -version
# 应该能正常输出 ffmpeg 版本信息

📦 第三步:导出为离线文件

使用 docker save 将整个镜像打包成 .tar 文件:

# 导出镜像
docker save -o my-offline-base.tar my-offline-base:latest

# (可选)压缩以减小体积,便于传输
gzip my-offline-base.tar
# 生成 my-offline-base.tar.gz

🚚 第四步:将文件拷贝到离线机器

通过 U 盘、内网 SCP、FTP 等方式将 my-offline-base.tar.gz(或 .tar)传到目标服务器。


📥 第五步:在离线机器上加载镜像

在离线服务器上执行:

# 如果是 .tar.gz 文件,先解压再加载(或直接管道加载)
gunzip < my-offline-base.tar.gz | docker load

# 如果是 .tar 文件
docker load -i my-offline-base.tar

验证:

docker images | grep my-offline-base
# 应该能看到镜像已存在

🧪 第六步:基于该镜像运行应用容器

现在你可以在离线环境中,直接使用这个“全能”基础镜像来运行你的应用,无需联网安装任何东西。

例如,运行一个需要 ffmpeg 的 Python 脚本:

docker run -it --rm \
  -v $(pwd):/app \
  my-offline-base:latest \
  python3 /app/my_video_processor.py

或者,你也可以在自己的项目 Dockerfile 中直接继承它:

FROM my-offline-base:latest

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt  # 假设 requirements.txt 已包含,且 wheel 包已提前准备
CMD ["python", "app.py"]

⚠️ 注意:如果 pip install 也需要离线,建议提前用 pip download 下载好 wheel 包,一并打包进镜像。


✅ 总结

步骤操作关键命令
1. 编写创建含依赖的 DockerfileFROM ..., RUN apt-get install ...
2. 构建在有网机生成镜像docker build -t my-offline-base .
3. 导出打包为 tar 文件docker save -o image.tar image:tag
4. 传输拷贝到离线机U盘 / scp / 内网共享
5. 加载在离线机导入镜像docker load -i image.tar
6. 使用运行或继承该镜像docker runFROM my-offline-base

这种方式彻底规避了离线环境无法安装系统包的问题,是工业级部署的标准实践。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐