CodeBlanks Logo Icon CodeBlanks

ENV komutu

Dockerfile'da ENV ile değişken tanımlamayı öğrenirsin.

ENV komutu

ENV, Dockerfile'da image'a kalıcı bir ortam değişkeni ekler. Hem sonraki build adımlarında hem de çalışan container'da geçerlidir; docker run -e ile geçersiz kılınabilir:

FROM python:3.12-slim
ENV PYTHONUNBUFFERED=1 \
    PORT=8000
WORKDIR /app
CMD ["python", "app.py"]

PYTHONUNBUFFERED=1, Python'un çıktıyı tamponlamadan yazmasını sağlar; böylece log'lar docker logs'ta hemen görünür.

ENV ile yol ve sürüm

ENV değişkenleri sonraki talimatlarda $AD ile kullanılabilir. Bu, sürüm numarası ya da kurulum yolunu tek yerde tanımlamayı sağlar:

ENV APP_HOME=/opt/app
WORKDIR $APP_HOME
ENV PATH="$APP_HOME/bin:$PATH"
COPY bin/ $APP_HOME/bin/

Parola gibi gizli değerler ENV ile image'a yazılmamalıdır: docker history ve docker inspect onları gösterir.

Uygulama ENV ile varsayılanlar

node:20-alpine tabanlı bir Dockerfile yaz: NODE_ENV=production ve PORT=3000 değişkenlerini ENV ile tanımla; WORKDIR /app; COPY . .; EXPOSE 3000; CMD exec biçiminde node server.js.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
FROM node:20-alpine
ENV NODE_ENV=production PORT=3000
WORKDIR /app
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Beklenen çıktı

[+] Building 2.9s (8/8) FINISHED
 => naming to docker.io/library/web:latest done

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Image'da ENV PORT=8000 varken docker run -e PORT=9000 img ile container'da PORT kaçtır?

  • 8000
  • Boş
  • 8000,9000
  • 9000 Doğru cevap

Açıklama: Çalışma anı değeri image'daki varsayılanın yerine geçer.

2 Python çıktısını tamponsuz yap.

Soru
____ PYTHONUNBUFFERED=1
Cevap
ENV PYTHONUNBUFFERED=1

Açıklama: ENV hem build'de hem çalışma anında geçerlidir.

3 Eşleştir.

Kavram Anlamı
ENV Image'da kalıcı değişken
-e Çalışma anında geçersiz kılar
$APP_HOME Değişkenin kullanımı
PYTHONUNBUFFERED Anında log

Başlangıç bölümündeki tüm dersler