如何将构建的docker镜像移到无联网的生产环境?

遇到问题

  • 很久前构建的镜像,不确定名称。
  • 镜像名称并不是由目录名称决定的,常常是在构建镜像时通过 docker build 命令的 -t 选项指定的
  • docker-compose 本身并没有直接用于导出和导入镜像的命令。然而,可以结合 Docker 命令来完成这些任务。
  • 暂时先不用纠结“镜像”还是“容器”,按照这个启动即可。(下一篇会讲区别)
  • 一般镜像目录结构都是:
my-jupyter-project/
├── Dockerfile
└── docker-compose.yml

dockerfile示例:

# Dockerfile
FROM jupyter/minimal-notebook:latest

# 安装其他必要的包
RUN pip install --no-cache-dir \
    numpy \
    pandas \
    matplotlib

# 设置工作目录
WORKDIR /home/jovyan/work

# 将默认命令设置为启动 Jupyter Notebook
CMD ["start-notebook.sh"]

docker-compose.yml示例:

#docker-compose.yml
version: '3.8'

services:
  jupyter:
    image: my-jupyter-image:latest
    ports:
      - "8888:8888"
    volumes:
      - ./work:/home/jovyan/work
    environment:
      JUPYTER_TOKEN: "your_secure_token"
    command: "start-notebook.sh --NotebookApp.token='your_secure_token'"

volumes:
  work:

解决方案

一、确定镜像名称

如果镜像是很久前定义的,你可以使用 docker-compose 和 Docker 命令来查询现有的镜像名称和标签。以下是一些常用的方法:

方法一:查看 docker-compose.yml 文件

通常,镜像名称和标签会在 docker-compose.yml 文件中定义。你可以打开该文件,查找 image 字段。例如:

# docker-compose.yml
version: '3.8'

services:
  jupyter:
    image: my-jupyter-image:latest
    ports:
      - "8888:8888"
    volumes:
      - ./work:/home/jovyan/work
    environment:
      JUPYTER_TOKEN: "your_secure_token"
    command: "start-notebook.sh --NotebookApp.token='your_secure_token'"

在这个示例中,镜像名称是 my-jupyter-image,标签是 latest

方法二:使用 docker-compose 命令查询

你可以使用 docker-compose 命令来查看当前运行的服务和使用的镜像。首先,进入包含 docker-compose.yml 文件的目录,然后运行以下命令:

docker-compose ps

这会显示当前运行的容器和相关信息,包括镜像名称。

方法三:使用 Docker 命令查询本地镜像

如果你不确定镜像名称,可以使用 Docker 命令列出本地所有镜像并查找相关信息:

docker images

这会显示本地所有镜像的列表,包括镜像名称、标签、镜像 ID 和创建时间。例如:

REPOSITORY TAG IMAGE ID CREATED SIZE
my-jupyter-image latest abcdef123456 2 weeks ago 1.23GB

方法四:检查容器详细信息

如果容器已经在运行,可以使用以下命令查看容器的详细信息,包括镜像名称:

docker ps

这会列出所有正在运行的容器及其相关信息。找到目标容器的 CONTAINER ID 后,可以进一步查看详细信息:

docker inspect <CONTAINER ID>

在输出的 JSON 数据中,查找 Image 字段,它会显示完整的镜像名称和标签。

综合示例

要查找镜像名称和标签,可以:

  1. 打开并查看 docker-compose.yml 文件中的 image 字段。
  2. 使用 docker-compose ps 命令查看当前运行的服务和镜像。
  3. 使用 docker images 命令列出本地所有镜像。
  4. 使用 docker psdocker inspect <CONTAINER ID> 命令查看容器详细信息。

通过这些方法,可以轻松找到很久前定义的镜像名称和标签。

二、导出镜像

导出镜像

docker save -o my-jupyter-image.tar my-jupyter-image:latest

docker save -o my-jupyter-image.tar my-jupyter-image:latest

三、导入镜像

将镜像文件复制到目标环境中后,使用 Docker 命令导入镜像:

docker load -i my-jupyter-image.tar

测试结果

确保在目标环境中有正确配置的 docker-compose.yml 文件,然后使用 docker-compose 启动服务:

docker-compose up -d

虽然 docker-compose 本身没有导入和导出镜像的命令,但你可以使用 docker savedocker load 命令来完成这些任务,然后使用 docker-compose 管理和启动容器。这样,就可以在没有网络连接的环境中成功导入和部署镜像。

其它

查看docker目录

docker info

查看docker保存位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值