Skip to content

Instantly share code, notes, and snippets.

@muratcakmaksoftware
Last active May 19, 2022 19:48
Show Gist options
  • Save muratcakmaksoftware/49407505adc63b460664649dc1f4f00b to your computer and use it in GitHub Desktop.
Save muratcakmaksoftware/49407505adc63b460664649dc1f4f00b to your computer and use it in GitHub Desktop.
Dockerfile Commands
Komut Örnek Açıklama
# # Yorum satırı Yorum satırı için kullanılır.
MAINTAINER MAINTAINER Murat Dockerfile yazan kişi isim ve email gibi bilgi içerir. Kullanımdan kaldırılmıştır. Label kullanılmaktadır.
FROM <image_name>:<tag_version> FROM alpine:3.14 Base image tanımlama.
latest yerine tag koyulması önerilir.
Minimal image seçilmesi build hızları için önemlidir.
RUN <commands> RUN apt-get update && apt-get install -y Yeni bir katman(step) üzerinde çalıştırmak istediğimiz komutları yürütür. Genellikle image'ın üzerinde yazılımın gereksinimleri olan bağılımlıklar yürütülür.
Birden fazla RUN kullanmak daha fazla katman oluşturacağından image boyutunu yükseltecektir. Bu yüzden tek satır yani && kullanarak olabildiğince yazabildiklerimizi yazmalıyız.
WORKDIR <path> WORKDIR /home Container içerisinde çalıştırılacak komutlar hangi dizinde çalıştırılacağını belirtir.
ADD <src> <dest> ADD . /usr/src Container içerisine local veya internet üzerinden dosya/zip/tar kopyalamak için kullanılır.
zip,tar ve gz gibi tanıdığı sıkıştırılmış dosyaları otomatik extract eder.
.dockerignore kopyalamasını istemediklerimizi böyle bir dosya oluşturarak yazabiliriz.
. (nokta) bulunduğunuz mevcut dizindeki tüm dosyalar demektir.

Docker ekibi bu komutun kullanılmasını önermemektedir. Local kopyalama için COPY kullanılabilir. Ancak internetten indirme yapılacaksa CURL veya WGET kullanmamızı önermektedir. Sebep olarak daha çok yer kaplamaktadır ve dengesiz olarak çalışmaktadır. Geriye dönük destek olduğundan komut varlığını sürdürmektedir.
COPY <src> <dest> COPY ./my.cnf /etc/my.cnf Local'deki bir dosyayı container kopyalamak için kullanılır.
EXPOSE <port>/<protocol> EXPOSE 80/tcp EXPOSE komutu port'u yayınlamamaktadır. Sadece belge görevi görür.
Port'da Protocol belirtilmezse varsayılan TCP dir.
Örnek çalıştırma: docker run -p 80:80/tcp
ARG <key>=<value> ARG MY_NAME="Murat Çakmak" ARG değişkenler container'da çalışmaz. Dockerfile içerisinde sadece kullanılır ve build sırasında değerler değiştirilebilir. Örneğin bir secret değişkenini tutmak isteyebilirsiniz.
docker run build --build-arg <KEY>=<VALUE>
Dockerfile içerisinde değişkeni kullanımı ${VARIABLE_NAME}
ENV <key>=<value> ENV MY_NAME="Murat Çakmak" ENV değişkenler container'da çalışır ortam değişkeni olarak kalır.
Dockerfile içerisinde kullanılır ve build sırasında değeri değiştirilebilir.
LABEL <key>=<value> LABEL description="blabla" \
multi.label1="value2"\
multi.label1="value3"
Label ile bilgilendirme verileri tutulur. Örnek olarak dockerfile yazan kişi bilgileri veya özellik hakkında.
VOLUME ["/mydata"] //mydata container'ın içine oluşur VOLUME ["/mydata", "mydata2"] Container'lar stateless modunda çalışır buda şu demektir. Container kapanıp açıldığında içerisindeki veriler silinecektir.
Volume ile belirleme yaparak bu verilerin host üzerinde docker'ın bölümlediği bir yerde tutulmasını sağlarız.
Container içerisindeki mydata dizini, host üzerinde anonim bir isimle volume oluşturur ve değişikleri hosta aktarır.
USER <user_name>:<group_name> USER murat Komutlar hangi user üzerinden yürütüleceğini belirler.
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT ["/bin/echo", "elma", "armut"] CMD ile benzer bir yapıya sahiptir.
Image'ımızı docker run ile çalıştırırken varsayılan parametrelerin yanında istersek ek parametrede vererek çalıştırmayı sağlar.
ENTRYPOINT Container ayağa kalktığında belirlediğiniz executable'da varsayılan ve değiştirilemeyen parametrelerle çalıştırma yapar. Eğer parametre eklersenizde yeni parametre olarak yanına ekler.
Örnek: docker run param1(buradaki param1 sizin sabit olarak belirlediğiniz parametrelerin yanına eklenecektir.)
ENTRYPOINT bir tane olmalıdır.
CMD ["executable", "param1", "param2"] CMD ["/bin/echo", "elma", "armut"] Image'ımızı docker run ile çalıştırırken varsayılan çalışmasını istediğiniz executable'daki parametrelere göre çalışır.
docker run <image_name> param1 gibi parametre verirseniz ENTRYPOINT'i baz alacaktır.
ENTRYPOINT tanımlamasanızda FROM ile aldığınız linux işletim sistemin Image'ında varsayılan olarak /bin/sh tanımlıdır.
Bu yüzden /bin/sh param1 olarak çalışacaktır.
ENTRYPOINT ["executable"]

CMD ["param1", "param2"]
ENTRYPOINT ["/bin/echo"]

CMD ["elma", "armut"]
Image'ımızı docker run ile çalıştırırken hem varsayılan parametreleriyle çalıştırabiliriz hemde istediğimiz parametrelerle çalışmasını sağlayabiliriz.
docker run <image_name> param1
HEALTHCHECK
--interval=15m //Tekrar süresi
--timeout=5s //Beklenen cevap süresi
--retries=N //Başarısız olma durumunda tekrar deneme sonrasında status atanır.
0 (success) //Container sağlıklı
1 (unhealthy) //Container düzgün çalışmıyor
2 (reserved) //Container beklenmedik şekilde kapandı
HEALTHCHECK --interval=5m --timeout=3s CMD command Container çalışıp çalışmadığını kontrol etmek için kullanılır. Health Status otomatik güncellenir.

Recommended Resources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment