Hur delar jag data mellan docker container/tjänster?

På tåg på väg mot Insjön i Dalarna har jag löst ett problem som stört mig rätt länge. Hur gör jag egentligen för att dela data mellan två docker containers/services om jag vill använda docker-compose?

Det här är en fortsättning på projekt som jag har skrivit om här.

Upplägget är att jag har en Docker container som är tänkt att periodiskt hämta in alla föreläsningar från ett flertal institutioner och organisationer. En annan container har jag tänkt ska vara en web-server som listar alla föreläsningar. För att import-containern ska kunna dela informationen med web-containern så har jag för enkelhetens skull enbart valt att använda mig av en csv-fil. (En bättre lösning är antagligen att ha en redig databas, men det får vänta.)

Vad jag inte hade lyckats med innan var hur var hur jag ska kunna få ihop dem båda och dessutom göra det via docker-compose. Anledningen till att jag vill använda just docker-compose är för att jag vill minimera antalet manuella steg när jag startar en ny molntjänst. Det verkar som att en del andra har haft liknande problem och det verkar härröra från att volume-from kommandot har försvunnit när docker-compose gick till version 3.

Lösningen visade sig handla om att använda “Long Syntax” för mappning av volymer och att specifikt använda typen “bind”. Dokumentationen finns under https://docs.docker.com/compose/compose-file/#volumes, och vad jag borde ha läst ordentligt: “The long form syntax allows the configuration of additional fields that can’t be expressed in the short form.”

Den resulterande, fungerande konfigurationen blev därmed:

version: '3.7'
services:
  importer:
    image: folkbildning.importer:latest
    build: ./importer
    volumes:
      - type: bind
        source: /Users/Johannes/PycharmProjects/Folkbildning/db
        target: /importer/db/
  web:
    image: folkbildning.web:latest
    build: ./web
    ports:
      - "5000:5000"
    volumes:
      - type:  bind
        source: /Users/Johannes/PycharmProjects/Folkbildning/db
        target: /web/db/

Ovanstående fil och resten av projektet finns här: https://github.com/dacre/PopularEducation

En annan notering är dock att en bör sätta rätt behörighet på den fil som delas. Här är länkar till såna frågor
https://github.com/moby/moby/issues/3124
och en fördjupad diskussion av de som utvecklar Docker: https://github.com/moby/moby/issues/30110
och vad som troligen är en bra lösning, även om jag i min lösning inte har valt bästa alternativet: https://dev.to/acro5piano/specifying-user-and-group-in-docker-i2e eller https://medium.com/@nielssj/docker-volumes-and-file-system-permissions-772c1aee23ca.

 
0
Kudos
 
0
Kudos

Now read this

Nytt projekt som matchar alla mina parametrar

Självglädjen, jagstoltheten och egonöjdheten som jag har känt den senate veckan vet inga gränser! Jag har äntligen identifierat ett projekt som matchar alla mina parametrar för vad jag vill göra på fritiden! Det är ett projekt som gör... Continue →