Ombyggnad 2026/2027 pågår - döda länkar förekommer. Mer information

Metalsmith i container

2023-07-19 på Anders Ytterströms webblogg

En sak jag länge varit sugen på att utvärdera är att bli av med beroendet till node.js i mindre, simplare projekt. Som denna webbplats, exempelvis, som enbart behöver det för att transformera markdown-filer till HTML-dokument med Metalsmith.

Det enklaste sättet att göra det på är att använda sig av containers, där allt som behövs ligger i en image. Detta inlägg beskriver hur jag gjorde för att få till det.

Indentifiera vilka volymer som behövs

Jag behöver i princip tre volymer för att kunna återanvända samma container image flera gånger för att bygga min webbplats.

Containerfile

Ser ut såhär, i sin enkla helhet.

FROM node:20-alpine AS base
WORKDIR /app
FROM base AS deps
COPY package*.json ./
RUN npm install
FROM deps AS final
RUN mkdir ./assets ./pub ./src
VOLUME ["./assets", "./pub", "./src"]
COPY . .
ENTRYPOINT ["node", "index.js"]

... med några väl valda ignores.

Bygga container image lokalt

Jag gör detta med Buildah, men det går lika bra att göra med Docker.

buildah build --net host .

Kör container imagen lokalt för att bygga webbplatsen

Jag gör detta med Podman, och monterar de tre volymerna.

podman run \
--net host \
-ti \
--volume ./dist:/app/pub \
--volume ../../Sync/Rahvin/madrse/src:/app/src \
--volume ../../Sync/Rahvin/madrse/assets:/app/assets \
[container id]

Ovanstående volymsökvägar råkar vara det jag använder för stunden. Katalogerna behöver såklart finnas på filsystemet.

Ersätt [container-id] med det ID som gavs av Buildah.

Hosta container images på Github Packages

Då jag har koden på Github så passade jag på att lägga in en action som bygger och publicerar container imagen automatiskt. Då blir det ännu enklare att bygga sajten, eftersom jag då bara behöver hämta imagen från Github Packages istället för att bygga den ochh hålla repa på container-id.

podman run \
--net host \
-ti \
--volume ./dist:/app/pub \
--volume ../../Sync/Rahvin/madrse/src:/app/src \
--volume ../../Sync/Rahvin/madrse/assets:/app/assets \
ghcr.io/madr/19:main

Två saker extra krävs för detta.


Ovanstående inlägg publicerades 2023-07-19. Det går att prenumerera på denna webblogg. Härifrån är följande mål rekommenderade: