Dockerfile vs Docker Compose: chi ha la precedenza?

  • Di
  • 2025-01-16 - 2 minuti
banner

Quando si lavora con Docker e Docker Compose, si può avere dei dubbi su quali configurazioni abbiano la precedenza se definite due volte: cosa succede agli utenti, cosa alle configurazioni dell’ambiente? Facile, con alcuni esempi! 😏

Variabili di ambiente

La documentazione di Docker fornisce una spiegazione dettagliata di come le variabili di ambiente abbiano la priorità o meno quando impostate sia in Docker Compose che nei Dockerfile.

L’ordine di precedenza (dal più alto al più basso) è il seguente:

  • In primis, quelle impostate tramite il comando docker compose run -e quando si lavora da terminale.
  • Poi si passa al file di environment che può essere il file .env predefinito o con l’argomento --env-file.
  • Se presenti, i valori presenti nel file YAML per Docker Compose utilizzando solo l’attributo environment nel file Compose.
  • Eventuali utilizzi dell’attributo env_file nel file Compose.
  • Infine, le variabili descritte nel Dockerfile tramite istruzione ENV.

Esempio

In questo esempio, si va a configurare una variabile che definisce che livello di dettaglio devono avere i log: nel caso del Dockerfile, il livello è settato su warn, mentre nel Docker Compose su info. La precedenza andrà a Docker Compose, seguendo le regole definite in precedenza:

FROM ubuntu:20.04

ENV LOG_LEVEL=warn

...
version: '3.8'

services:
  my_service:
    build: ../../draft
    environment:
      - LOG_LEVEL=info

Gestione degli utenti

Quando si definisce un utente sia in un Dockerfile che in un file YAML Docker Compose, l’utente specificato nel file Docker Compose ha la precedenza all’avvio del container.

Esempio

In un Dockerfile, puoi specificare un utente utilizzando l’istruzione USER. Ciò imposta l’utente predefinito per tutte le istruzioni successive nel Dockerfile e per il container quando viene eseguito. Ad esempio:

FROM ubuntu:20.04
USER appuser

In un file docker-compose.yml, puoi anche definire un utente per il servizio utilizzando la chiave utente. Ciò sovrascrive qualsiasi utente definito nel Dockerfile quando il container viene avviato tramite Docker Compose. Ad esempio:

version: '3'
services:
  myservice:
    image: myimage
    user: anotheruser

L’utente definito nel file docker-compose.yml avrà la precedenza su quello definito nel Dockerfile. Ciò significa che quando esegui la tua applicazione tramite Docker Compose, avvierà il container con un altro utente, indipendentemente da quanto specificato nel Dockerfile.

Questo comportamento consente flessibilità nella configurazione dei container, in particolare quando diversi ambienti (sviluppo, test, produzione) potrebbero richiedere utenti diversi per motivi di sicurezza od operativi.

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful
Logo di VueSchool

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

#TheRedComics

Edizione di Gennaio - Buon Anno nuovo!

A cura di Sophie Aiello, copy di Chiara Romano

Fumetto di dicembre di Sophie Aiello, Copy di Chiara Romano

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!