Una balena davanti ad una porta.
Home » Come si usa Docker Entrypoint all’interno di un progetto Rails.

Come si usa Docker Entrypoint all’interno di un progetto Rails.

Scrivo questi appunti come forma di esercizio personale per approfondire l’argomento e cercare di fissare nella mia mente i concetti che vi stanno dietro.

Come sviluppatori web rails usiamo docker insieme a rails tutti i giorni sia in ambiente di sviluppo che in produzione con evidente vantaggi. Purtroppo il concetto di entrypoint mi affatica e non mi è del tutto chiaro quindi ho deciso di approfondirlo scrivendo questo articolo.

ENTRYPOINT è uno dei comandi disponibili all’interno di un Dockerfile.

L’istruzione ENTRYPOINT si usa per eseguire dei comandi dopo l’inizializzazione del container.

Ad esempio, in un progetto rails, può essere eseguito in ambiente di sviluppo, per eseguire il comando bundle.

Possono essere usate due forme:

# Modalità "shell"
ENTRYPOINT esegui un comando
# Modalità "exec" (la modalità da preferire seconda la guida ufficiale di docker)
ENTRYPOINT ["esegui", "un", "comando"]

Le due forme comportano diverse conseguenze:
– la modalità shell esegue il comando all’interno di una shell (/bin/sh-c)
– la modalità exec aggiunge l’istruzione senza includerla all’interno di una shell

Personalmente uso un file bash come entrypoint; ad esempio:

# docker-compose.yml
services:
  web:
    build: .
    command: ['rails', 'server', '-b', '0']
    volumes:
      - .:/app
      - bundle_cache:/usr/local/bundle
    ports:
      - 3000:3000
    entrypoint: ./docker-entrypoint.sh

Di conseguenza questo potrebbe essere un entrypoint.sh da posizionare all'interno della cartella principale del progetto.
# docker-entrypoint.sh
#!/bin/sh
set -e

# Operazioni personalizzate prima dell'avvio del servizio principale

# Esempio: Impostazione delle variabili di ambiente
export MY_VARIABLE="valore"

echo "bundle"
bundle

echo "rails db:migrate"
rails db:migrate

echo "npm install"
npm install

# Esempio: Esecuzione di altri comandi o script

# Avvio del servizio principale
exec "$@"

Fonti:


Pubblicato

in

,

da

Tag:

Commenti

Rispondi