diff options
-rw-r--r-- | nixos/tests/docker-tools.nix | 7 | ||||
-rw-r--r-- | pkgs/build-support/docker/examples.nix | 39 |
2 files changed, 46 insertions, 0 deletions
diff --git a/nixos/tests/docker-tools.nix b/nixos/tests/docker-tools.nix index 502b537ed68..f91121077ea 100644 --- a/nixos/tests/docker-tools.nix +++ b/nixos/tests/docker-tools.nix @@ -67,5 +67,12 @@ import ./make-test.nix ({ pkgs, ... }: { # Ensure building an image on top of a layered Docker images work $docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-on-top}'"); $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-on-top.imageName}"); + + # 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"); + # This is to be sure the order of layers of the parent image is preserved + $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layersOrder.imageName} cat /tmp/layer2 | grep -q layer2"); + $docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layersOrder.imageName} cat /tmp/layer3 | grep -q layer3"); ''; }) diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix index 557a4dbf54b..ac21be907b8 100644 --- a/pkgs/build-support/docker/examples.nix +++ b/pkgs/build-support/docker/examples.nix @@ -187,4 +187,43 @@ rec { runAsRoot = "touch /example-file"; fromImage = bash; }; + + # 13. example of 3 layers images This image is used to verify the + # order of layers is correct. + # It allows to validate + # - the layer of parent are below + # - the order of parent layer is preserved at image build time + # (this is why there are 3 images) + layersOrder = let + l1 = pkgs.dockerTools.buildImage { + name = "l1"; + tag = "latest"; + extraCommands = '' + mkdir -p tmp + echo layer1 > tmp/layer1 + echo layer1 > tmp/layer2 + echo layer1 > tmp/layer3 + ''; + }; + l2 = pkgs.dockerTools.buildImage { + name = "l2"; + fromImage = l1; + tag = "latest"; + extraCommands = '' + mkdir -p tmp + echo layer2 > tmp/layer2 + echo layer2 > tmp/layer3 + ''; + }; + in pkgs.dockerTools.buildImage { + name = "l3"; + fromImage = l2; + tag = "latest"; + contents = [ pkgs.coreutils ]; + extraCommands = '' + mkdir -p tmp + echo layer3 > tmp/layer3 + ''; + }; + } |