Bölüm:11 Multi-Stage Build ve ARG

Onur BOLATOĞLU
2 min readJan 18, 2021

--

Docker tarafından 2017 senesinde yayınlanan multi-stage build özelliği imaj yaratma aşamasını kademelere bölmemizi ve ilk kademe de yarattığımız imaj içerisindeki dosyaları bir sonraki kademe de oluşturacağımız imaja kopyalayabilmemize imkan sağlıyor. Bu sayede nihai imaj boyutumuzun küçülmesine imkan tanıyor.

Örnek Dockerfile,

FROM node:12 AS stage1 > stage ismi stage1'dir
ADD ./app
WORKDIR /app
RUN npm install
2.stageFROM nodejs
COPY --from=stage1 /app /app
WORKDIR /app
EXPOSE 8085
CMD ["server","js"]

Dockerfile içerisinde birden fazla from talimatı kullanarak multi-stage yani çok aşamalı bir docker imajı oluşturma işlemi yaptığımız zaman, en son elde ettiğimiz nihai imaj her zaman son FROM talimatı ile girdiğimiz talimatlardan oluşmaktaıdr. Bundan önceki aşamaların tek amacı, son aşamada kullanabileceğimiz dosyaları oluşturmak. Bu dosyaları oluşturur ve son aşamada ki imaja bunları kopyalarız. Sadece kopyaladığımız dosyalar son aşamada ki imajın içerisinde olur. Önceki tüm aşamalar oluşturduğumuz imaja son nihai imaja dahil edilmez.

ARG,

Dockerfile içerisinde değişken kullanmak istersek ARG talimatı ile tanımlayarak daha sonrasında bunu değişken olarak kullanabiliriz.
Örnek Dockerfile,

FROM ubuntu:latest
WORKDIR /test
ARG VERSION
ADD https://www.python.org/ftp/python/${VERSION}/python-${VERSION}.tgz .

Örnek build komutu,

örn,
docker image build -t onurbolatogluu/arg --build-arg VERSION=3.7.2
örn,
docker image build -t onurbolatogluu/arg --build-arg VERSION=3.8.2

Dockerfile içerisinde birden fazla internet üzerinde bulunan dosyanın, vb versiyonunu imajıma eklemek istersem onların hepsi de aynı tipteki URL’e sahipse bunu değişken kısımlarını bir değişken olarak tanımlayabilir, bunu da ARG ile dockerfile içerisine tanımlar daha sonra da birden fazla dockerfile yaratıp farklı farklı versiyonları onlardan oluşturmak yerine, imaj oluştururken hangi değeri atamak istersem o argümana bu değeri atayarak dockerfile içerisinde ki oluşturduğum değişkenin o değeri almasını sağlayabilirim. --build-arg bize bu imkanı sağlar.
Dockerfile içerisinde imaj yaratılırken kullanabileceğimiz değişkenler atamak istersek ARG talimatını kullanırız. ARG ile oluşturulan değişken sadece imaj yaratılma aşamasında geçerli olur. İmaj yaratılırken yani docker image build komutuna --build-arg opsiyonu kullanarak atanabilir. ARG ile tanımlanan değişkenler bu imajdan yaratılan container içerisinde yer ALMAZ.

Örnek Dockerfile,

ARG VERSION
FROM ubuntu:$VERSION
CMD ["cat","/etc/lsb_release"]

Build,

docker image build -t argexample --build-arg VERSION=18.04

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet