From c728f836971a7d5374473a9c19fa0c30bae86d57 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 08:07:50 +0000 Subject: [PATCH 1/7] =?UTF-8?q?Create=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-swarm-on-nixos.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md new file mode 100644 index 0000000..fe8e953 --- /dev/null +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -0,0 +1,53 @@ +--- +title: Docker Swarm on NixOS +date: 2024-08-08T01:01:00.000Z +author: David Vasandani +summary: Docker Swarm on NixOS +tags: + - post +--- +1. Update `nixpkgs.url` in `flake.nix` to `nixos-24.05` where Docker Engine 2.7 is available +``` + inputs = { + # NixOS official package source, using the nixos-24.05 branch here + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; + }; +``` + +2. Update `networking.firewall` in `configuration.nix` to open the Docker ports +``` +# open ports in firewall + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [ + 22 + 53 + 2377 + 7946 + 3000 + ]; + networking.firewall.allowedUDPPorts = [ + 7946 + 4789 + ]; +``` + +3. Add `virtualisation.docker` in `configuration.nix` to install and start Docker Engine 2.7 +``` + virtualisation.docker = { + enable = true; + package = pkgs.docker_27; + daemon.settings = { + live-restore = false; + }; + } +``` + +4. Rebuild +``` +nixos-rebuild switch +``` + +5. Initialize the Swarm +``` +docker swarm init --advertise-addr ###.###.###.### +``` From e25e62f0ee22890fc20a9298e4821662ee313427 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 08:08:41 +0000 Subject: [PATCH 2/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index fe8e953..bc4e03f 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -6,7 +6,7 @@ summary: Docker Swarm on NixOS tags: - post --- -1. Update `nixpkgs.url` in `flake.nix` to `nixos-24.05` where Docker Engine 2.7 is available +1. Update `flake.nix` to `nixos-24.05` where Docker Engine 2.7 is available ``` inputs = { # NixOS official package source, using the nixos-24.05 branch here @@ -14,7 +14,7 @@ tags: }; ``` -2. Update `networking.firewall` in `configuration.nix` to open the Docker ports +2. Update `configuration.nix` to open the Docker ports ``` # open ports in firewall # Open ports in the firewall. @@ -31,7 +31,7 @@ tags: ]; ``` -3. Add `virtualisation.docker` in `configuration.nix` to install and start Docker Engine 2.7 +3. Update `configuration.nix` to install and start Docker Engine 2.7 ``` virtualisation.docker = { enable = true; From c6455048eda5737d4046eeee247a44996e77fffe Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 08:11:42 +0000 Subject: [PATCH 3/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index bc4e03f..b42f037 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -9,15 +9,12 @@ tags: 1. Update `flake.nix` to `nixos-24.05` where Docker Engine 2.7 is available ``` inputs = { - # NixOS official package source, using the nixos-24.05 branch here nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; }; ``` 2. Update `configuration.nix` to open the Docker ports ``` -# open ports in firewall - # Open ports in the firewall. networking.firewall.allowedTCPPorts = [ 22 53 From 482731f2f6a17c77f92a7a401dac78f8378d5555 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 10:33:25 +0000 Subject: [PATCH 4/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-swarm-on-nixos.md | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index b42f037..a511d7b 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -32,11 +32,15 @@ tags: ``` virtualisation.docker = { enable = true; + rootless = { + enable = true; + setSocketVariable = true; + }; package = pkgs.docker_27; daemon.settings = { live-restore = false; }; - } + }; ``` 4. Rebuild @@ -48,3 +52,37 @@ nixos-rebuild switch ``` docker swarm init --advertise-addr ###.###.###.### ``` + +--- + +Continue if you want to expose the Docker API via TCP + +1. Add `listenOptions`. Only tcp should be set because `/run/docker.sock` is already exposed via `rootless.setSocketVariable` + +``` + virtualisation.docker = { + enable = true; + listenOptions = [ "0.0.0.0:2375" ]; + rootless = { + enable = true; + setSocketVariable = true; + }; + package = pkgs.docker_27; + daemon.settings = { + live-restore = false; + }; + }; +``` + +2. Add new listener port to `networking.firewall.allowedTCPPorts` +``` + networking.firewall.allowedTCPPorts = [ + 22 + 53 + 2377 + 7946 + 3000 + ]; +``` + +3. From 169cab5dbd5f60dc541982f4f84572ba2f362d4a Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 10:40:49 +0000 Subject: [PATCH 5/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-swarm-on-nixos.md | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index a511d7b..79f763e 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -6,6 +6,8 @@ summary: Docker Swarm on NixOS tags: - post --- +### Install Docker + 1. Update `flake.nix` to `nixos-24.05` where Docker Engine 2.7 is available ``` inputs = { @@ -55,7 +57,7 @@ docker swarm init --advertise-addr ###.###.###.### --- -Continue if you want to expose the Docker API via TCP +### Expose the Docker API via TCP 1. Add `listenOptions`. Only tcp should be set because `/run/docker.sock` is already exposed via `rootless.setSocketVariable` @@ -85,4 +87,23 @@ Continue if you want to expose the Docker API via TCP ]; ``` -3. +3. Rebuild +``` +nixos-rebuild switch +``` + +4. Restart Docker Socket +``` +systemctl restart docker.socket +``` + +5. Add the remote Docker context +``` +docker context create remote --docker "host=tcp://###.###.###.###:2375" +``` + +6. Use the new context for a one-off command or switch to it +``` +docker --context remote ps +docker context use remote +``` From 202a2cec5912b7564f46724c7fac314a98c62d67 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 10:51:14 +0000 Subject: [PATCH 6/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-swarm-on-nixos.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index 79f763e..1c554da 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -107,3 +107,31 @@ docker context create remote --docker "host=tcp://###.###.###.###:2375" docker --context remote ps docker context use remote ``` + +--- + +### Join a worker to the Swarm and scale a service + +1. Join the Swarm from the worker device +``` +docker swarm join --token XXX ###.###.###.###:2377 + +2. Create a Swarm Service +``` +docker service create --replicas 1 --name helloworld alpine ping docker.com +``` + +3. Inspect +``` +docker service inspect --pretty helloworld +``` + +4. Scale the service. +``` +docker service scale helloworld=5 +``` + +5. List the tasks +``` +docker service ps helloworld +``` From 2482537b1f0e26a7d0719096edb0be10aaf22d72 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Aug 2024 11:12:20 +0000 Subject: [PATCH 7/7] =?UTF-8?q?Update=20Post=20=E2=80=9Cdocker-swarm-on-ni?= =?UTF-8?q?xos/docker-swarm-on-nixos=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md | 1 + 1 file changed, 1 insertion(+) diff --git a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md index 1c554da..4820af5 100644 --- a/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md +++ b/posts/docker-swarm-on-nixos/docker-swarm-on-nixos.md @@ -115,6 +115,7 @@ docker context use remote 1. Join the Swarm from the worker device ``` docker swarm join --token XXX ###.###.###.###:2377 +``` 2. Create a Swarm Service ```