Skip to content

Commit c318e81

Browse files
committed
fly-io-pop: improve docker image generation
- Do not tag the image as `latest` so that we have some actual image history we can use to rollback a deploy on fly.io (instead of always overwritting the previous image at each deploy); - Use the `layers` argument in `buildLayer` to avoid duplication in the resulting image, see this [blog post]. [blog post]: https://blog.eigenvalue.net/2023-nix2container-everything-once/
1 parent 0cb1ac1 commit c318e81

2 files changed

Lines changed: 11 additions & 5 deletions

File tree

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
++ (with pkgs; [
197197
age
198198
flyctl
199+
skopeo
199200
sops
200201
ssh-to-age
201202
python3Packages.ipython

library/nix/packages/fly-io-pop/flake-module.nix

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ in
8686
nginx
8787
sops-install-secrets
8888
]);
89-
shellLayer = nix2container.buildLayer {
89+
shellLayer = {
9090
copyToRoot = [
9191
(pkgs.buildEnv {
9292
name = "root";
@@ -413,7 +413,7 @@ in
413413
mkVarDir = pkgs.runCommand "mkVarDir" derivationArgs ''
414414
mkdir -p $out/var
415415
'';
416-
mountPointLayer = nix2container.buildLayer {
416+
mountPointLayer = {
417417
copyToRoot = [ mkVarDir ];
418418
perms = [
419419
{
@@ -536,7 +536,7 @@ in
536536
};
537537
};
538538
secretsManifest = result.config.clan-destiny.fly-io-pop.secretsManifest;
539-
configLayer = nix2container.buildLayer {
539+
configLayer = {
540540
deps = [
541541
processComposeConfig
542542
secretsManifest
@@ -636,10 +636,15 @@ in
636636
})
637637
];
638638
};
639+
mkLayer = prevLayers: layerParams:
640+
let
641+
layer = nix2container.buildLayer (layerParams // { layers = prevLayers; });
642+
in
643+
prevLayers ++ [ layer ];
644+
assembleLayers = layers: builtins.foldl' mkLayer [ ] layers;
639645
in
640646
nix2container.buildImage {
641647
name = "registry.fly.io/clan-destiny-pop";
642-
tag = "latest";
643648
config = {
644649
env = [
645650
"PATH=/bin"
@@ -655,7 +660,7 @@ in
655660
"--unix-socket=/run/process-compose.sock"
656661
];
657662
};
658-
layers = [
663+
layers = assembleLayers [
659664
shellLayer
660665
mountPointLayer
661666
configLayer

0 commit comments

Comments
 (0)