首页 > 解决方案 > 如何构建支持多种语言(c、c++、rust、java、go、python、javascript、nodejs 等)的轻量级 docker 镜像

问题描述

我是 docker 的新手——我正在寻找一个支持多种语言的 docker 镜像。

我打算做的是以 alpine 为基础并安装所有用于 c++、c、rust 等的运行时库......我不确定什么是正确的做法。我已经搜索了 docker hub 但没有找到。

标签: dockerdockerfile

解决方案


正如@David 所提到的,在 Docker 中不建议这样做,即使您使用 alpine,它也永远不会创建轻量级映像。

如果您访问 PHP、nodejs 和 golang 的官方 docker hub,您会感到惊讶。

  • PHP 大约350MB (Alpine)

  • Golang 大约360MB (Alpine)

  • Nodejs 大约80MB (Alpine)

保留您在问题中提到的其余部分,例如,由于 OS alpine 大小,每个减去5MB仍然高于800MB,最终通过添加其余部分变得越来越大。

或者,您可以多阶段映像,但同样您必须在 Dockerfile 中管理和放置条件语句,以处理 nodejs 中的命令npm install,并composer install在 PHP 和 bla bla 中执行。

您可能会构建这样的图像,但它必须再次像一团糟一样管理。

ARG BASE_IMAGE="go"
FROM golang:alpine as go

FROM node:alpine as node

FROM php:7.0-apache as php

FROM nginx:alpine as nginx

FROM ${BASE_IMAGE}
ENV BASE_IMAGE=$BASE_IMAGE

将每个容器限制为一个进程是一个很好的经验法则

如果容器的经验法则是每个容器有一个进程,那么我认为它应该只为该进程提供一个环境。

dockerfile_best-practices


推荐阅读