构建Docker images 是否需要 OS 作为 base image ?

简介: dockfile ; scratch;

不需要

  1. 使用 dockfile 创建 docker images 的时候,需要从 base docker image 开始. 主机上的容器(container) 共享主机内核(kernel), 但是每个容器必须提供其自身运行需要的操作系统(OS)。 在 windows系统中, 1 : 1 mapping of kernel : OS ; 但是在 Linux 系统当中, kernel 包括多种类型 OSs : Debian, Ubuntu, Alpine, SuSE, CoreOS 等
  2. 语句FROM 通常指定操作系统类型,但是不需要或者没有必要将操作系统 bundle进一个容器。容器应该仅包括它所需要的。 FROM 提供初始的文件系统,例如,文件、目录等。 同样可以可以使用 Docker 保留的最小的镜像scratch 作为容器构建的起点。使用 镜像scratch将传递给创建过程如下信息: Dockerfile 文件中下一个命令将作为镜像第一个文件系统层。尽管scratch 出现在 Docker repository 当中,但是你不能 pull 或者 run 这个镜像, 也不能用scratch来命名任何镜像。你可以在 Dockfile 当中refer它。使用 FROM scratch ,从一个空的 images 开始构建。
    镜像scratch 在创建 base images(比如 debian 和 busybox) 的时候非常重要,或者 super minimal images (仅包含 a single binary 和其他它需要的) .
    使用 scratch 创建一个简易容器 :
FROM scratch
COPY hello /
CMD ["/hello"]
  1. 镜像NGINX 使用 Debian 操作系统:
FROM debian:buster-slim

LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"

ENV NGINX_VERSION   1.17.6
ENV NJS_VERSION     0.3.7
ENV PKG_RELEASE     1~buster

RUN set -x \
# create nginx user/group first, to be consistent throughout docker variants
    && addgroup --system --gid 101 nginx \
    && adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid 101 nginx \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates \
    && \
    NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \

reference :
[1] scratch. website
[2] does docker always need an operating system as base image.Stack Overflow
[3] Create a simple parent image using scratch. website

目录
相关文章
|
5天前
|
机器学习/深度学习 Dart 前端开发
移动应用与系统:构建现代数字生态的基石在当今这个高度数字化的社会中,移动应用与操作系统已成为我们日常生活不可或缺的一部分。它们不仅改变了我们的沟通方式,还重塑了我们的工作、学习和娱乐模式。本文将深入探讨移动应用开发的基础、移动操作系统的功能以及这两者如何共同塑造了我们的数字世界。
随着智能手机和平板电脑的普及,移动应用与系统的重要性日益凸显。它们不仅为用户提供了便捷的服务和丰富的功能,还为开发者提供了广阔的创新平台。本文将介绍移动应用开发的基本概念、技术栈以及最佳实践,并探讨主流移动操作系统的特点和发展趋势。通过分析移动应用与系统的相互作用,我们可以更好地理解它们在现代社会中的重要地位。
|
2天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
6天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
8天前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
11天前
|
安全 Android开发 数据安全/隐私保护
构建未来:移动应用开发与操作系统的融合之道
在数字化浪潮中,移动应用和操作系统如同现代文明的双子星座。本文将探索它们之间的紧密联系,揭示如何通过技术创新和设计哲学的融合,共同塑造我们的数字生活。从用户体验到系统性能,我们将一窥这些看似简单却复杂的互动是如何影响我们日常生活的。
|
19天前
|
Java 开发工具 Android开发
移动应用开发之旅:探索移动操作系统与应用构建的奥秘
【8月更文挑战第33天】在数字时代的浪潮中,移动应用已成为我们日常生活的一部分。本文将带您深入理解移动操作系统的工作原理,并揭示如何在这个多姿多彩的平台上开发出引人入胜的应用。我们将从基础概念出发,逐步深入到高级编程技巧,最终通过一个实际的代码示例,展示如何将理论应用于实践。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和灵感。让我们一起踏上这场激动人心的移动应用开发之旅吧!
|
21天前
|
机器学习/深度学习 安全 vr&ar
构建未来:移动应用开发与操作系统的协同进化
【8月更文挑战第31天】在数字时代的浪潮中,移动应用和操作系统如同双子星座,共同照亮了技术发展的夜空。本文将深入探究移动应用的开发流程、操作系统的核心机制,以及它们如何相互影响,共同塑造我们的数字生活。通过实际代码示例,我们将一窥移动技术的奥秘,理解其背后的逻辑和创新点。让我们一起踏上这段旅程,探索移动技术如何改变世界。
|
20天前
|
机器学习/深度学习 vr&ar Android开发
构建未来:移动应用开发与操作系统的革新之路
【9月更文挑战第1天】 在数字时代的浪潮中,移动应用和操作系统是推动技术前进的重要力量。本文将深入探讨移动应用开发的新趋势、移动操作系统的创新演进,以及它们如何共同塑造我们的未来生活。通过分析当前技术发展的现状和挑战,我们将一窥即将到来的技术变革,并理解这些变化对个人和社会的深远影响。
28 1
|
21天前
|
Android开发 数据安全/隐私保护 iOS开发
构建未来:移动应用开发与操作系统的协同进化
【8月更文挑战第31天】在数字时代的浪潮中,移动应用与操作系统共同编织了一幅互动丰富的技术画卷。本文将探讨移动应用开发的新趋势、移动操作系统的创新特性,以及它们如何相互影响,推动着技术的进步。通过实际代码示例,我们将深入了解这一动态进化过程,揭示背后的技术细节和设计理念。
|
21天前
|
人工智能 Java Android开发
构建未来:移动应用开发与操作系统的融合之旅
【8月更文挑战第31天】本文将带您踏上一段探索移动应用开发和操作系统交互的旅程。我们将从基础概念出发,逐步深入到实际的开发案例,最后探讨未来的趋势。文章不仅包含理论知识,还结合了代码示例,旨在为初学者和有经验的开发者提供实用指南。