Docker: Difference between revisions
imported>Vater m there is a lot of content in several articles |
imported>Asymmetric Add section on reproducible image creation dates |
||
Line 31: | Line 31: | ||
Also check out the excellent article by lethalman about [http://lethalman.blogspot.de/2016/04/cheap-docker-images-with-nix_15.html building minimal docker images with nix]. | Also check out the excellent article by lethalman about [http://lethalman.blogspot.de/2016/04/cheap-docker-images-with-nix_15.html building minimal docker images with nix]. | ||
=== Reproducible image dates === | |||
The manual advises against using <code>created = "now"</code>, as that prevents images from being reproducible. | |||
An [https://christine.website/blog/nix-flakes-2-2022-02-27 alternative], if using flakes, is to do <code>created = self.lastModifiedDate</code>, which uses the commit date, and is therefore reproducible. | |||
== How to calculate the <code>sha256</code> of a pulled image == | == How to calculate the <code>sha256</code> of a pulled image == |
Revision as of 11:24, 1 March 2022
Enabling the docker service
Inside your configuration.nix
:
{
...
virtualisation.docker.enable = true;
...
}
More options are available.
Adding users to the docker
group will provide them access to the socket:
{
users.users.<myuser>.extraGroups = [ "docker" ];
}
Building a docker image with nixpkgs
There is an entry for dockerTools in the nixpkgs manual for reference. In the nixpkgs repo some examples can be found.
Also check out the excellent article by lethalman about building minimal docker images with nix.
Reproducible image dates
The manual advises against using created = "now"
, as that prevents images from being reproducible.
An alternative, if using flakes, is to do created = self.lastModifiedDate
, which uses the commit date, and is therefore reproducible.
How to calculate the sha256
of a pulled image
The sha256
argument of the dockerTools.pullImage
function is the checksum of the archive generated by Skopeo. Since the archive contains the name and the tag of the image, Skopeo arguments used to fetch the image have to be identical to those used by the dockerTools.pullImage
function.
For instance, the sha of the following image
pkgs.dockerTools.pullImage{
imageName = "lnl7/nix";
finalImageTag = "2.0";
imageDigest = "sha256:632268d5fd9ca87169c65353db99be8b4e2eb41833b626e09688f484222e860f";
sha256 = "1x00ks05cz89k3wc460i03iyyjr7wlr28krk7znavfy2qx5a0hfd";
};
can be manually generated with the following shell commands
skopeo copy docker://lnl7/nix@sha256:632268d5fd9ca87169c65353db99be8b4e2eb41833b626e09688f484222e860f docker-archive:///tmp/image.tgz:lnl7/nix:2.0
nix-hash --base32 --flat --type sha256 /tmp/image.tgz
1x00ks05cz89k3wc460i03iyyjr7wlr28krk7znavfy2qx5a0hfd
Container images with nix
While dockerTools
allows to build lightweight containers, it requires nix
to be installed on the host system. An alternative are docker images with nix preinstalled, maintained by LnL7.
Docker Compose with Nix
Arion is optimized for running Nix-based projects in Docker Compose. It uses the NixOS module system for configuration, it can bypass docker build
and lets you use dockerTools or use the store directly in the containers. The images/containers can be typical dockerTools style images or full NixOS configs.
See also
For rootless docker containers : https://nixos.wiki/wiki/Podman