常用的 Docker 命令
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 自带的 save 和 load 命令。以下是具体的操作步骤:
📦 第一步:在有网络的机器上下载并打包镜像
你需要有一台可以访问互联网的电脑(可以是你的本地电脑或跳板机),将所需的镜像下载下来并导出为一个压缩文件。
-
拉取镜像
使用docker pull命令下载你需要的镜像及版本。# 语法:docker pull 镜像名:标签 docker pull nginx:latest docker pull redis:6.2.17 -
验证镜像
确保镜像已经下载成功。docker images | grep nginx -
导出为离线文件 (.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。
- 云桌面:直接上传文件。
📥 第三步:在离线机器上加载镜像
在没有网络的服务器上,执行以下命令加载镜像。
-
加载镜像
使用docker load命令读取 tar 包。# 语法:docker load -i 镜像文件.tar docker load -i nginx-redis-offline.tar- 如果你在第一步使用了 gzip 压缩,加载时需要使用:
docker load < nginx-latest.tar.gz -
验证加载结果
检查镜像是否已经出现在本地列表中。docker images -
运行容器
现在你可以像平常一样使用docker run启动容器了。docker run -d -p 80:80 nginx:latest
📊 核心命令速查表
为了方便你记忆,我整理了最关键的两个命令:
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 导出 (有网端) | docker save -o app.tar nginx:latest | 将镜像保存为离线文件 |
| 加载 (离线端) | docker load -i app.tar | 将离线文件导入 Docker 环境 |
💡 常见问题与技巧
- 如何处理依赖?
如果你的应用需要在容器内安装系统依赖(如ffmpeg或gcc),建议在有网机器上构建一个“预装依赖的基础镜像”,然后导出这个基础镜像,而不是试图在离线机器上执行apt-get install。 - 文件太大怎么办?
如上述进阶技巧所示,使用gzip压缩可以显著减小文件体积(通常能减少 60% 以上),传输后再在离线端解压加载。 - 批量操作
如果你需要迁移服务器上所有的镜像,可以使用脚本批量导出和导入,避免遗漏。
在离线环境中部署容器时,预先在有网络的机器上构建一个包含所有系统依赖(如 ffmpeg、gcc、libgl1 等)的基础镜像,然后通过 docker save 导出并传输到目标离线机器,是最可靠、最高效的做法。
下面我将为你提供一个完整的操作流程,包括 Dockerfile 编写 → 构建镜像 → 导出 → 在离线环境加载使用。
✅ 第一步:编写 Dockerfile(预装依赖)
创建一个 Dockerfile,基于官方基础镜像(如 ubuntu:22.04 或 python: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. 编写 | 创建含依赖的 Dockerfile | FROM ..., 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 run 或 FROM my-offline-base |
这种方式彻底规避了离线环境无法安装系统包的问题,是工业级部署的标准实践。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)