我是Docker的新手,我认为已经理解Docker是一种软件虚拟化工具(反对操作系统虚拟化)。据我所知,通过这张图片,Docker提供了一个非常空白的环境,它具有给定的文件结构并在内核主机上执行。我们需要做的是将我们的应用程序及其依赖项(没有操作系统)放在我们应用程序的轻便携容器中。
但似乎Docker有一个黑暗面:每个Dockerfile都以“FROM”开头。
我看到this和this,但我不确定。听起来Docker接近一种简化的OS虚拟化器。
我对图像大小的优势感兴趣。但是如果我们必须在每个图像上安装一个操作系统,我的“便携式”应用程序将会非常繁重。
真的没有办法使用“空白图片”吗?
答案 0 :(得分:7)
您可以从FROM scratch
开始,这是一个空文件系统。
如果您想要启动自己的最小根文件系统,请参阅Creating a Base Image部分。
您可能会惊讶于您的应用程序实际上对根文件系统有多少依赖关系,最后,使用FROM
语句中的一个标准根文件系统通常会更高效,如Charles达菲评论说。
答案 1 :(得分:2)
FROM scratch
WORKDIR /
docker build empty/ -t empty
docker images | grep empty
答案 2 :(得分:0)
你的应用程序必须有一些底层操作系统,没有,它没有办法启动..
我认为docker索引中最基本的一个是busybox
,所以FROM busybox
会给你一个非常小的设置。
Docker还为其每个层使用了大量缓存。因此,在顶部使用FROM centos:centos7
的每个docker容器将只使用1组最小的centos7图像。
基本图像非常简约,所以无需担心......
答案 3 :(得分:0)
这可能有点太晚了。但我只是有一个用例,我需要创建一个裸骨容器,我可以作为多容器docker-compose的一部分启动,然后通过/ bin / bash进入它。请记住,docker容器必须运行服务,并且只有在服务运行时容器才会存在。所以,我用python创建了这个容器。我复制了一个让它睡觉的2行python脚本。这就是我做的。 1.使用以下代码创建python脚本wait_service.py:
import time
time.sleep(1000)
2。使用以下行创建Dockerfile:
FROM python:2.7
RUN mkdir -p /test
WORKDIR /test
COPY wait_service.py /test/
CMD python wait_service.py
3。构建并运行容器。使用容器ID,然后我可以进入它。请根据您想要保留此容器的时间来调整睡眠时间。