Iva*_*van 10 linux docker dockerfile
我是 docker 的新手,这只是一个令人着迷的工具。然而,我无法理解其中的一件事。简单的 Dockerfile 通常以操作系统名称和版本开头,例如:
FROM ubuntu:xenial
....
Run Code Online (Sandbox Code Playgroud)
但是哪个 Linux 操作系统将用于 Dockerfile 之类的
FROM perl
....
Run Code Online (Sandbox Code Playgroud)
或者
FROM python:3.6
....
Run Code Online (Sandbox Code Playgroud)
当然,我可以通过从此映像运行容器并打印操作系统信息来找到这一点,例如:
docker run -it --rm perl bash
# cat /etc/*-release
Run Code Online (Sandbox Code Playgroud)
或者
docker run -it --rm python:3.6 bash
# cat /etc/*-release
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在这两种情况下,操作系统都是“Debian GNU/Linux 10 (buster)”。
所以,我的问题是:
如何找出将为特定 docker 映像运行哪个操作系统,而不实际从中创建 docker 容器(该docker inspect命令不提供此信息 docker inspect perl | grep -i Debian:)
如何更改现有 docker 映像的操作系统类型。例如,我有一个使用 Ubuntu 14.04 的映像,我想将其更改为 Ubuntu 18.04。
感谢您的帮助:)
k0p*_*kus 11
docker 镜像不需要操作系统。有可能扩展故意为空的暂存映像,并且容器可能只包含一个二进制文件或某个卷。
拥有完整的操作系统是可能的,但也具有误导性:主机与容器共享其内核。(这不是虚拟机。)
这意味着无论您运行什么“操作系统”,都会在容器中找到相同的内核:
两个都:
docker run --rm -it python:3.6 uname -a
docker run --rm -it python:3.6-alpine uname -a
Run Code Online (Sandbox Code Playgroud)
将报告您主机的相同内核。
所以你必须研究不同的方法:
docker run --rm -it python:3.6 cat /etc/os-release
Run Code Online (Sandbox Code Playgroud)
或者
lsb_release -sirc
Run Code Online (Sandbox Code Playgroud)
或对于 Cent 操作系统:
cat /etc/issue
Run Code Online (Sandbox Code Playgroud)
许多图像也不是从头开始,而是基于高山,以避免尺寸开销。ubuntu 基础镜像可以轻松拥有 500MB 指纹,而 alpine 使用大约 5MB;所以我也宁愿检查一下。
还可以避免将所有内容手动安装到一个大 Dockerfile 内的一个 Ubuntu 映像上的陷阱。如果每个服务都是链接在一起的自己的容器,则 Docker 效果最佳。(为此请检查docker-compose。)
最后,作为用户,您不应该关心图像的操作系统,而应该关心它的大小。只有作为 Dockerfile 的开发人员,才需要了解操作系统,并且您可以通过查看构建镜像的 Dockerfile 来了解(如果它位于 docker hub 上,您可以在那里阅读)。
您基本上必须查看用于创建图像的内容,并使用适合该工作的工具。(基于 Debian 的镜像使用apt-get,alpine 使用apk,Fedora 使用yum。)
| 归档时间: |
|
| 查看次数: |
9191 次 |
| 最近记录: |