compose2nix 实战教程:从 Docker Compose 到 NixOS 的完整迁移方案 compose2nix 实战教程从 Docker Compose 到 NixOS 的完整迁移方案【免费下载链接】compose2nixGenerate a NixOS config from a Docker Compose project.项目地址: https://gitcode.com/gh_mirrors/co/compose2nixcompose2nix 是一款强大的工具能够将现有的 Docker Compose 项目自动转换为 NixOS 配置让你轻松实现从 Docker Compose 到 NixOS 的无缝迁移。它不仅支持 Docker 和 Podman 运行时还能将每个 Compose 服务映射为 NixOS 原生管理的 systemd 服务使服务管理更加高效和透明。为什么选择 compose2nix 进行迁移在 NixOS 上运行 Docker Compose 项目并非最佳实践。传统方法是通过 systemd 服务运行docker-compose up和docker compose down命令但这种方式存在诸多弊端任何 Compose 文件的更改都需要重启整个 systemd 服务服务状态对 NixOS 不透明难以实现精细化管理Docker Compose 的功能在 NixOS 中已有原生支持造成功能冗余而使用 compose2nix 进行迁移则能带来以下优势✅双运行时支持同时支持 Docker 和 Podman满足不同用户需求✅原生系统集成每个 Compose 服务映射为独立的 systemd 服务由 NixOS 原生管理✅精细化更新单个服务的变更仅影响该服务及其依赖项避免整体重启✅灵活扩展生成的 systemd 服务可通过 NixOS 配置进一步扩展✅额外功能支持通过 Docker Compose 标签设置 systemd 服务选项如compose2nix.systemd.相关标签快速开始安装与基础使用安装 compose2nix你可以通过以下几种方式安装 compose2nix方法一使用 nix run推荐# 最新版本 nix run github:aksiksi/compose2nix -- -h # 特定版本 nix run github:aksiksi/compose2nix/v0.3.0 -- -h方法二从 nixpkgs 安装在你的 NixOS 配置中添加environment.systemPackages [ pkgs.compose2nix ];方法三通过 Flake 安装在flake.nix中添加compose2nix.url github:aksiksi/compose2nix; compose2nix.inputs.nixpkgs.follows nixpkgs;然后在 NixOS 配置中安装environment.systemPackages [ inputs.compose2nix.packages.x86_64-linux.default ];基础使用方法使用 compose2nix 非常简单基本命令如下compose2nix -projectmyproject默认情况下工具会在当前目录查找docker-compose.yml文件并将生成的 NixOS 配置输出到docker-compose.nix文件中。详细迁移步骤步骤 1准备 Docker Compose 文件确保你的 Docker Compose 文件通常是docker-compose.yml处于当前工作目录。compose2nix 支持大多数常见的 Docker Compose 功能包括服务、网络和卷等定义。步骤 2生成 NixOS 配置运行 compose2nix 命令生成 NixOS 配置文件# 基本用法 compose2nix -projectmyproject # 自定义输入和输出文件 compose2nix -inputsdocker-compose.yml,another-compose.yml -outputmy-nix-config.nix # 指定运行时Docker 或 Podman compose2nix -projectmyproject -runtimedocker步骤 3集成到 NixOS 配置将生成的 Nix 文件集成到你的 NixOS 配置中例如在/etc/nixos/configuration.nix中添加imports [ ./docker-compose.nix # 路径指向你生成的 Nix 文件 ];步骤 4应用配置运行以下命令应用新的 NixOS 配置sudo nixos-rebuild switch高级功能与最佳实践处理 secretscompose2nix 支持与 secrets 管理工具集成如 agenix 和 sops-nix。使用 agenix将所有 secret 环境变量放在加密的 env 文件中例如my-env-file.env确保解密后的 env 文件对运行 compose2nix 的用户可读使用以下命令运行 compose2nixcompose2nix --env_files/run/agenix/my-env-file.env --include_env_filestrue使用 sops-nix在 Compose 服务中添加compose2nix.settings.sops.secrets标签services: webapp: image: nginx:latest labels: - compose2nix.settings.sops.secretsexample.env,some-folder/example-2.env运行 compose2nix 并指向加密的 secrets YAML 文件compose2nix \ --inputs docker-compose.yml \ --sops_file ./secrets/secrets.yaml服务管理命令生成配置后你可以使用以下 systemd 命令管理服务列出所有服务sudo systemctl list-units podman-*重启服务sudo systemctl restart podman-myproject-myservice.service启动/停止项目所有服务# 启动所有服务 sudo systemctl start podman-compose-myservice-root.target # 停止所有服务 sudo systemctl stop podman-compose-myservice-root.target容器自动更新对于 Podman 用户可以通过以下步骤实现容器自动更新为每个要自动更新的 Compose 服务添加io.containers.autoupdateregistry标签确保使用完全限定的镜像路径例如docker.io/repo/image运行以下命令检查或执行更新# 检查哪些容器将被更新 sudo podman auto-update --dry-run # 执行更新并重启服务 sudo podman auto-update你还可以启用 Podman 提供的定时器每天自动运行更新systemd.timers.podman-auto-update.wantedBy [ timers.target ];控制服务自动启动默认情况下所有生成的服务都会在启动时由 systemd 自动启动。你可以通过以下方式修改此行为禁用所有服务的自动启动compose2nix -auto_startfalse为单个服务启用/禁用自动启动在 Compose 文件中添加标签services: my-service: labels: # 启用自动启动 - compose2nix.settings.autoStarttrue # 禁用自动启动 - compose2nix.settings.autoStartfalse支持的 Compose 功能compose2nix 支持 Docker Compose 的大部分功能包括服务配置imagecontainer_nameenvironmentenv_filevolumestmpfslabelsportsdnscap_add/cap_droploggingrestartdeploy.restart_policydeploy.resources.limitsdevicesnetworks.aliases等等网络配置labelsnamedriverdriver_optsenable_ipv6ipamexternalinternal卷配置driverdriver_optslabelsnameexternal常见问题与解决方案手动停止容器后自动重启如果停止一个服务它可能会被依赖它的服务自动重启。这是由于 systemd 的UpheldBy设置导致的。目前这是一个已知问题正在与 systemd 团队讨论解决方案。Docker 多网络支持如果你使用 Docker 运行时且服务连接到多个网络需要使用 Docker 25 版本。你可以在 NixOS 配置中固定 Docker 版本{ virtualisation.docker.package pkgs.docker_25; }Podman 内部网络端口转发在 rootful Podman 中标记为internal的网络可能无法进行端口转发。解决方法是移除internal设置并添加网络驱动选项networks: my-network: driver: bridge driver_opts: no_default_route: 1 # 防止外部网络访问 ipam: config: - subnet: 10.8.1.0/24 gateway: 10.8.1.0总结compose2nix 提供了一种简单而强大的方式将 Docker Compose 项目迁移到 NixOS 环境。通过将 Compose 服务转换为 NixOS 原生管理的 systemd 服务它解决了传统方法中的诸多痛点同时保留了 Docker Compose 的易用性。无论你是 NixOS 新手还是有经验的用户compose2nix 都能帮助你更高效地管理容器服务充分利用 NixOS 的强大功能。现在就尝试使用 compose2nix体验从 Docker Compose 到 NixOS 的无缝迁移吧【免费下载链接】compose2nixGenerate a NixOS config from a Docker Compose project.项目地址: https://gitcode.com/gh_mirrors/co/compose2nix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考