summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniël de Kok <me@danieldk.eu>2019-06-06 10:39:50 +0200
committerDaniël de Kok <me@danieldk.eu>2019-06-06 15:03:08 +0200
commit3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258 (patch)
tree3f544ab7cffefb723680a1f124a26e8a7b8be949
parent7e6756af41944569fc2d7903ff122b1d56170e21 (diff)
downloadnixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar.gz
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar.bz2
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar.lz
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar.xz
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.tar.zst
nixpkgs-3b0d5b5ed3815d3bf5cf1c85a6c8e17091ba7258.zip
nixos/tests/docker-tools: check layer sharing with buildLayeredImage
Adapted from grahamc's blog post on layered Docker images in Nix:

https://grahamc.com/blog/nix-and-layered-docker-images
-rw-r--r--nixos/tests/docker-tools.nix6
-rw-r--r--pkgs/build-support/docker/examples.nix8
2 files changed, 14 insertions, 0 deletions
diff --git a/nixos/tests/docker-tools.nix b/nixos/tests/docker-tools.nix
index f91121077ea..9ab1a71f331 100644
--- a/nixos/tests/docker-tools.nix
+++ b/nixos/tests/docker-tools.nix
@@ -68,6 +68,12 @@ import ./make-test.nix ({ pkgs, ... }: {
       $docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-on-top}'");
       $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-on-top.imageName}");
 
+      # Ensure layers are shared between images
+      $docker->succeed("docker load --input='${pkgs.dockerTools.examples.another-layered-image}'");
+      $docker->succeed("docker inspect ${pkgs.dockerTools.examples.layered-image.imageName} | ${pkgs.jq}/bin/jq -r '.[] | .RootFS.Layers | .[]' | sort > layers1.sha256");
+      $docker->succeed("docker inspect ${pkgs.dockerTools.examples.another-layered-image.imageName} | ${pkgs.jq}/bin/jq -r '.[] | .RootFS.Layers | .[]' | sort > layers2.sha256");
+      $docker->succeed('[ $(comm -1 -2 layers1.sha256 layers2.sha256 | wc -l) -ne 0 ]');
+
       # Ensure order of layers is correct
       $docker->succeed("docker load --input='${pkgs.dockerTools.examples.layersOrder}'");
       $docker->succeed("docker run --rm  ${pkgs.dockerTools.examples.layersOrder.imageName} cat /tmp/layer1 | grep -q layer1");
diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix
index ac21be907b8..29eea33a7e1 100644
--- a/pkgs/build-support/docker/examples.nix
+++ b/pkgs/build-support/docker/examples.nix
@@ -226,4 +226,12 @@ rec {
     '';
   };
 
+  # 14. Create another layered image, for comparing layers with image 10.
+  another-layered-image = pkgs.dockerTools.buildLayeredImage {
+    name = "another-layered-image";
+    tag = "latest";
+    config.Cmd = [ "${pkgs.hello}/bin/hello" ];
+    contents = [ pkgs.hello ];
+  };
+
 }