Last active
September 28, 2020 23:22
-
-
Save rvl/c1ca657882a883195f49 to your computer and use it in GitHub Desktop.
Examples of using nixpkgs PR 11156 https://github.com/NixOS/nixpkgs/pull/11156
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# How to build docker images (NIX_PATH and hydra cache required when building off master branch) | |
# export NIX_PATH=$HOME/dev | |
# nix-build --option extra-binary-caches http://hydra.nixos.org/ test-docker.nix | xargs -n1 docker load -i | |
with import <nixpkgs> {}; | |
rec { | |
# 1. basic example | |
bash = dockerTools.buildImage { | |
name = "bash"; | |
contents = bashInteractive; | |
}; | |
# 2. service example, layered on another image | |
redis = dockerTools.buildImage { | |
name = "redis"; | |
tag = "latest"; | |
# for example's sake, we can layer redis on top of bash or debian | |
fromImage = bash; | |
# fromImage = debian; | |
contents = pkgs.redis; | |
runAsRoot = '' | |
mkdir -p /data | |
''; | |
config = { | |
Cmd = [ "/bin/redis-server" ]; | |
WorkingDir = "/data"; | |
Volumes = { | |
"/data" = {}; | |
}; | |
}; | |
}; | |
# 3. another service example | |
nginx = let | |
nginxPort = "80"; | |
nginxConf = writeText "nginx.conf" '' | |
user nginx nginx; | |
daemon off; | |
error_log /dev/stdout info; | |
pid /dev/null; | |
events {} | |
http { | |
access_log /dev/stdout; | |
server { | |
listen ${nginxPort}; | |
index index.html; | |
location / { | |
root ${nginxWebRoot}; | |
} | |
} | |
} | |
''; | |
nginxWebRoot = writeTextDir "index.html" '' | |
<html><body><h1>Hello from NGINX</h1></body></html> | |
''; | |
in | |
dockerTools.buildImage { | |
name = "nginx-container"; | |
contents = pkgs.nginx; | |
runAsRoot = '' | |
#!${stdenv.shell} | |
${dockerTools.shadowSetup} | |
groupadd --system nginx | |
useradd --system --gid nginx nginx | |
''; | |
config = { | |
Cmd = [ "nginx" "-c" nginxConf ]; | |
ExposedPorts = { | |
"${nginxPort}/tcp" = {}; | |
}; | |
}; | |
}; | |
# 4. example of pulling an image. could be used as a base for other images | |
debian = dockerTools.pullImage { | |
imageName = "debian"; | |
imageTag = "jessie"; | |
# this hash will need change if the tag is updated at docker hub | |
sha256 = "18kd495lc2k35h03bpcbdjnix17nlqbwf6nmq3sb161blf0dk14q"; | |
}; | |
# 5. example of multiple contents, emacs and vi happily coexisting | |
editors = dockerTools.buildImage { | |
name = "editors"; | |
contents = [ | |
pkgs.coreutils | |
pkgs.bash | |
pkgs.emacs | |
pkgs.vim | |
pkgs.nano | |
]; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment