Docker ARG Komutu
3 min read

Docker ARG Komutu

Docker ARG komutu ile build aşamasına parametreler ile değer geçebilirsiniz.
Docker ARG Komutu
Photo by Victoire Joncheray / Unsplash

Docker ARG komutu, Dockerfile içinde kullanılır ve kullanıcının container'ı oluştururken değerleri belirtmelerine izin verir. Bu değerler, container oluşturulduğunda ENV komutları tarafından kullanılabilir.

ARG komutu, aşağıdaki şekilde kullanılabilir:

ARG variable_name=default_value

Bu örnekte, "variable_name" isimli bir değişken tanımlanır ve varsayılan değeri "default_value"dir.

Bu değerleri container oluşturulduğunda belirtmek için "docker build" komutu kullanılır, örnek olarak:

docker build --build-arg variable_name=new_value -t image_name .

Bu örnekte, "variable_name" değişkeni "new_value" değerine atanır ve oluşturulan container'a "image_name" ismi verilir.

Ayrıca, ENV komutları ile bu arg değerleri kullanılabilir. Örnek olarak:

ENV variable_name=$variable_name

Bu komut container oluşturulduğunda atanmış değerleri kullanır.

Dockerfile içinde birden fazla ARG komutları kullanılabilir ve ENV komutları ile birlikte kullanılabilir. Bu, container'ın oluşturulduğunda dinamik olarak değişebilen yapılar oluşmasını sağlar.

Daha detaylı bir örnek verirsek;

Örneğimizde, kullanıcının container'ı oluştururken belirleyeceği bir "APP_ENV" değişkeni var. Bu değişken, container'ın çalışacağı ortamı (development, production gibi) belirleyecek. Ayrıca, container'ın içinde çalışacak olan uygulamanın port numarasını da kullanıcının belirleyebileceği bir "APP_PORT" değişkeni var.

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set environment variable for the app
ARG APP_ENV=development
ENV APP_ENV=$APP_ENV

# Set port for the app
ARG APP_PORT=8000
ENV APP_PORT=$APP_PORT

# Set the working directory
WORKDIR /app

# Copy the requirements file
COPY requirements.txt .

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Copy the rest of the app files
COPY . .

# Make port available to the world outside this container
EXPOSE $APP_PORT

# Run the command on container start
CMD ["python", "app.py"]

Bu Dockerfile örneğinde, kullanıcı container oluştururken --build-arg komutunu kullanarak "APP_ENV" ve "APP_PORT" değişkenlerini belirtebilir. Örnek olarak, "production" ortamında çalışacak ve port numarası "8000" olan bir container oluşturmak için:

docker build --build-arg APP_ENV=production --build-arg APP_PORT=8000 -t myapp .

Bu komut ile oluşturulan container, "production" ortamında ve "8000" portunda çalışacaktır. Bu şekilde, kullanıcı container'ı oluştururken çalışma ortamını ve uygulamanın dinamik olarak çalışacağı portu belirleyebilir.

ARG ve ENV Komutları Arasındaki Fark Nedir?

Docker ARG ve ENV, Dockerfile içinde değişkenleri tanımlamak için kullanılan iki farklı komuttur. Ancak, aralarındaki temel fark, ARG komutlarının container oluşturulduğunda ve sadece "docker build" komutu ile kullanılabildiği iken, ENV komutları container oluşturulduktan sonra ve "docker run" komutu ile kullanılabilir.

  • ARG komutları, container oluşturulduğunda kullanıcı tarafından belirtilen değerleri kullanır. Bu değerler, container oluşturulduktan sonra değiştirilemez ve sadece "docker build" komutu ile kullanılabilir.
  • ENV komutları, container oluşturulduktan sonra değiştirilebilir ve "docker run" komutu ile kullanılabilir.

Bu nedenle, container oluşturulduğunda belirli bir değerin atanması gereken durumlarda ARG komutları tercih edilir. Örneğin, bir uygulamanın çalışacağı ortamı (development, production) belirlemek için ARG komutları kullanılabilir. Ancak, container çalışırken dinamik olarak değişebilen değerler için (örneğin, bir sunucunun adresi) ENV komutları kullanılabilir.

Ayrıca, ENV komutları, container oluşturulduktan sonra "docker run" komutu ile değiştirilebilir. Bu nedenle, container çalışırken dinamik olarak değişebilen değerler için ENV komutları tercih edilir.

Docker derslerine sıradaki yazı ile devam edebilirsiniz:

Docker Hub Nedir? Nasıl Image Yüklenir?
Docker Hub ve özel registry’ler docker image’lerinizi depolamanızı sağlar.