跳转到主要内容

从conda环境创建最小Docker镜像

项目描述

Conda Docker

Conda Docker是docker概念的扩展,它具有与docker镜像关联的声明性环境。此外,这个工具不需要docker来构建镜像。因此,可以允许进行一些docker通常不允许的有趣的缓存行为和技巧。

功能

  • docker 不需要构建镜像
  • 声明性环境与docker镜像一一对应
  • 由于可以充分利用包缓存,构建时间显著加快
  • 分层(例如,mkl有单独的层)提供了有趣的机会
  • 无依赖项,允许将库打包为 zipapp

快速入门

从命令行构建conda docker镜像

conda docker build -b frolvlad/alpine-glibc:latest \
                   -i example-image:123456 \
                   -o demo.tar \
                   numpy numba flask

使用库的示例

无需docker下载docker镜像!

from conda_docker.registry.client import pull_image

image = pull_image('frolvlad/alpine-glibc', 'latest')

从文件系统修改docker镜像

from conda_docker.docker.base import Image
from conda_docker.registry.client import pull_image

image = pull_image('continuumio/miniconda3', 'latest')
image.remove_layer()
image.name = 'this-is-a-test'
image.add_layer_path('./')
image.add_layer_contents({
    'this/is/a/test1': b'this is test 1',
    'this/is/a/test2': b'this is test 2'
})
image.layers[0].config['Env'].append('FOO=BAR')
image.write_file('example-filter.tar')

从库构建conda docker镜像

from conda_docker.conda import build_docker_environment

build_docker_environment(
    base_image='frolvlad/alpine-glibc:latest',
    output_image='example-image:123456',
    packages=[
        'numpy',
        'numba',
        'flask',
    ],
    output_filename='demo.tar')

这是如何工作的?

结果证明,docker镜像只是文件的tar归档。有几个规范版本。对于 v1.0,规范在这里定义。我们不再写下规范,而是看看单个docker镜像。

docker pull ubuntu:latest
docker save ubuntu:latest -o /tmp/ubuntu.tar

列出docker镜像的目录结构。请注意,它是一个 layer.tar 的集合,这是文件系统的tar归档。还有几个json文件。VERSION 文件目前总是 1.0

tar -tvf /tmp/ubuntu.tar

Dockerhub碰巧以 v1 - v1.2 兼容的格式导出docker镜像。我们只看看 v1 重要的文件。存储库告诉层使用作为当前名称/标签的层头。

tar -xf /tmp/ubuntu.tar $filename
cat $filename | python -m json.tool

对于每个层,有三个文件:VERSIONlayer.tarjson

tar -xf /tmp/ubuntu.tar $filename
cat $filename
tar -xf /tmp/ubuntu.tar $filename
cat $filename | python -m json.tool

查看层元数据。

{
    "id": "93935bf1450219e4351893e546b97b4584083b01d19daeba56cab906fc75fc1c",
    "created": "1969-12-31T19:00:00-05:00",
    "container_config": {
        "Hostname": "",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": null,
        "Cmd": null,
        "Image": "",
        "Volumes": null,
        "WorkingDir": "",
        "Entrypoint": null,
        "OnBuild": null,
        "Labels": null
    },
    "os": "linux"
}

查看层文件系统。

tar -xf /tmp/ubuntu.tar $filename
tar -tvf $filename | head

参考文献

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

conda-docker-0.0.3.tar.gz (14.9 kB 查看哈希值)

上传时间

支持