初学者的问题;Docker 在使用命令时如何处理底层操作系统的变化RUN?
我们以一个非常简单的JRE 1.8官方 Docker Hub Dockerfile 为例。在安装 java 包时,Dockerfile 使用apt-get:
RUN apt-get update && apt-get install -y --no-install-recommends ...
Run Code Online (Sandbox Code Playgroud)
对于未经训练的人来说,这似乎是特定于平台的指令,仅适用于基于 Debian 的操作系统(或至少安装了 APT 的操作系统)。
这在 CentOS 安装上到底如何工作,例如,包管理器在哪里yum?或者上帝保佑,像Solaris这样的东西。
如果这种使用 fork 任意 shell 命令的模式RUN在 docker 中很普遍,那么如何避免平台间甚至版本间的依赖关系呢?
即,如果 Dockerfile 编写者拥有比我更新的版本grep,并且他们使用了一些早期版本中不可用的新 CLI 标志,该怎么办?
唯一的两个结果可能是:(1) RUN 命令以非零退出代码退出 (2) Dockerfile 在运行命令之前更改了 grep 的安装版本。
正如我在您的问题中评论的那样,您可以添加 FROM 语句来指定您想要的中继操作系统。例如:
FROM docker.io/centos:latest
RUN yum update -y
RUN yum install -y java
...
Run Code Online (Sandbox Code Playgroud)
现在你必须使用以下命令构建/创建图像:
docker build -t <image-name> .
Run Code Online (Sandbox Code Playgroud)
这个想法是,您将使用您熟悉的操作系统(例如 CentOS)并构建它的映像。现在,您可以获取此映像并在 Ubuntu/CentOS/RHEL/无论什么...上运行它
docker run -it <image-name> bash
Run Code Online (Sandbox Code Playgroud)
(您只需在所需的操作系统中安装 docker 即可。
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |