You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Nix构建体积最小的Python Docker镜像?

如何用Nix构建体积最小的Python Docker镜像?

我目前能做到的最小镜像体积为133MB,但官方Python slim镜像仅约40MB,因此我认为还可以优化。以下是我的尝试方案:

buildImage: 133MB

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildImage {
  name = "python-docker";
  tag = "latest";
  config = {
    Cmd = [ "${pkgsLinux.python3}/bin/python" "--version" ];
  };
}

buildImage + copyToRoot: 219MB

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildImage {
  name = "python-docker";
  tag = "latest";
  copyToRoot = [ pkgsLinux.python3 ];
  config = {
    Cmd = [ "python3" "--version" ];
  };
}

buildImage + contents: 219MB

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildImage {
  name = "python-docker";
  tag = "latest";
  contents = [ pkgsLinux.python3 ]; # 会显示警告,因为`contents`已被弃用
  config = {
    Cmd = [ "python3" "--version" ];
  };
}

buildLayeredImage: 133MB

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildLayeredImage {
  name = "python-docker";
  tag = "latest";
  config = {
    Cmd = [ "${pkgsLinux.python3}/bin/python" "--version" ];
  };
}

buildLayeredImage + copyToRoot: 无法正常工作

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildLayeredImage {
  name = "python-docker";
  tag = "latest";
  copyToRoot = [ pkgsLinux.python3 ];
  config = {
    Cmd = [ "python3" "--version" ];
  };
}

buildLayeredImage + contents: 134MB

{ pkgs ? import ./pinned.nix { }
, pkgsLinux ? import ./pinned.nix { system = "x86_64-linux"; }
}:

pkgs.dockerTools.buildLayeredImage {
  name = "python-docker";
  tag = "latest";
  contents = [ pkgsLinux.python3 ];
  config = {
    Cmd = [ "python3" "--version" ];
  };
}

pinned.nix 内容

import (
  builtins.fetchTarball {
    url = "https://github.com/NixOS/nixpkgs/archive/1c6eb4876f71e8903ae9f73e6adf45fdbebc0292.tar.gz";
    sha256 = "15gc5vmpz0wpasra6xmqq2l4cc65g9jm1zfrm16w43hmanrzx3l4";
  }
)

注意:我使用的是Mac M1笔记本电脑。


内容的提问来源于Stack Exchange,提问作者swoutch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:56:03