Docker ARG Komutu
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: