从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
对于每个层,有三个文件:VERSION
、layer.tar
和 json
。
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
参考文献
- Docker注册表API规范
- Docker镜像规范
项目详情
关闭
conda-docker-0.0.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a9fc6fecd486e1f425dbd8ba85ec55650448fa9714b5e7e0241a48479c11d41 |
|
MD5 | 0e84a9de2c402eb9337e8fd90a70c63f |
|
BLAKE2b-256 | 17ab200f8f4a607bdd08b90a48a83376cafba5726987de10e4eb753bd4598269 |