我已经浏览了Docker文档的每一页.
我还不明白为什么在安装/创建应用程序环境之前需要"基本映像"(例如,Ubuntu Base Image)来提供容器.
我的问题:
映像只是文件系统和依赖项或特定应用程序/软件的一组特定目录的快照。我所说的快照是指在容器环境中使用基本配置运行该软件(例如 mysql、redis 等)所需的文件的副本。当您使用镜像创建容器时,系统中的一小部分资源会借助命名空间和cgroup进行隔离,然后镜像内的文件会被复制到这个隔离的资源环境中。
让我们了解一下什么是基础镜像:
基础镜像是我们最终想要创建的镜像的起点或初始步骤。
假设你想要一个运行 redis 的镜像(这是一个愚蠢的例子,你可以通过另一种方式实现它,但为了解释起见,你不会在 docker hub 上找到该镜像)你需要一个起点来创建镜像为了那个原因。因此,让我们以 Alpine 图像作为基础图像。Alpine 是最轻的映像,包含仅用于运行基本命令的文件(例如:在容器内添加 ls、cd、apk)。
使用以下命令创建 Dockerfile:
FROM alpine
RUN apk add --update redis
CMD ["redis-server"]
Run Code Online (Sandbox Code Playgroud)
现在,当您运行
docker build .
命令时,它会给出以下输出:
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM alpine
---> a24bb4013296
Step 2/3 : RUN apk add --update redis
---> Running in 535bfd2d1ff1
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-
cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/1) Installing redis (5.0.9-r0)
Executing redis-5.0.9-r0.pre-install
Executing redis-5.0.9-r0.post-install
Executing busybox-1.31.1-r16.trigger
OK: 7 MiB in 15 packages
Removing intermediate container 535bfd2d1ff1
---> 4c288890433b
Step 3/3 : CMD ["redis-server"]
---> Running in 7f01a4da3209
Removing intermediate container 7f01a4da3209
---> fc26d7967402
Successfully built fc26d7967402
Run Code Online (Sandbox Code Playgroud)
此输出显示,在步骤 1/3 中,它采用了基础 alpine 镜像,在步骤 2/3 中,向其中添加了一层 redis,然后
redis-server
在容器启动时执行步骤 3/3 中的命令。该RUN
命令仅在镜像构建过程中执行。
对输出的进一步解释超出了这个问题的范围。
因此,当您从 docker hub 拉取镜像时,它只具有运行基本要求的配置。当您需要向镜像添加自己的需求和配置时,您可以Dockerfile
在基础镜像上创建并逐层添加依赖项,以根据您的需要运行它。
归档时间: |
|
查看次数: |
1214 次 |
最近记录: |