31 Ocak 2023 • 30 dakikalık okuma
Docker, işletim sistemi seviyesinde sanallaştırma sağlayan bir uygulamadır. Docker, "konteynır" (ing.: container) adı verilen yazılım paketlerini oluşturmak, çalıştırmak ve yönetmek için kullanılmaktadır.
Docker, işletim sistemi seviyesinde sanallaştırma sağlayan bir uygulamadır. Docker, "konteynır" adı verilen yazılım paketlerini oluşturmak, çalıştırmak ve yönetmek için kullanılmaktadır. Konteynırlar birbirinden ayrı ve bağımsız halde çalışabilmektedir. Detaylı bilgi ve Docker kurulum adımları için tıklayınız.
Docker "konteynır", çalıştıracağı uygulamanın kodlarını, dosyalarını, bağımlılıklarını ve konfigürasyonlarını vb. içinde barındıran izole bir ortamdır. Konteynır bir uygulamanın çalışması için sadece gerekli kod ve bağımlılıkları barındırır. Böylece sanal sunuculara göre daha az yer kaplar, daha az kaynak tüketir ve daha hızlı çalışırlar. Bağımlılıkları içinde barındırdıklarından hızlı şekilde farklı ortamlara taşınabilir ve hızlıca ayağa kaldırılırlar. Docker üzerindeki tüm konteynırlar birbirlerinden tamamen izole çalışırlar. Konteynır aslında bilgisayar üzerinde izole çalışan bir süreçtir (ing: process) ve tüm konteynırlar kurulu olduğu bilgisayar çekirdeğini (ing.: kernel) paylaşırlar.
Docker "imaj", (ing.: image) konteynırları oluşturmak için kullanılan taslaktır. Konteynırın çalışması için gerekli bağımlılıkları, yönergeleri ve ayarları barındırır. Bir imaj ile birden fazla konteynır oluşturulabilir. Docker imaj oluşturmak için dockerfile kullanılır.
Docker "volüm", (ing.: volume) konteynırların verilerini kaydeden yapıdır. Konteynırlardan ayrı olarak host bilgisayarın dosya sisteminde bulunurlar. Böylece konteynırlar silinse bile verileri kaybolmaz ve farklı konteynırlar tarafından da ereişilip kullanılabilirler.
Docker "ağ", (ing.: network) konteynırların birbirleriyle iletişim kurmasını sağlayan yapıdır. Konteynırlar birbirlerinden izole çalıştığından docker networkler üzerinden haberlerşirler.
Docker kurulu sürüm bilgisini gösterir;
docker --version
Docker kurulu sürüm detaylı bilgilerini gösterir;
docker info
Bilgisayardaki yüklü imajları listeler;
docker images
docker image ls
Bilgisayardaki çalışan konteynırları listeler;
docker container ls
docker ps
Bilgisayardaki konteynırları listeler;
docker container ls -a
docker ps -a
Durmuş tüm konteynırları listeler;
docker container ls -a --filter status=exited
Konteynırları çalıştırır;
docker container start containerID
docker container start containerName
Konteynırları durdurur;
docker container stop containerID
docker container stop containerName
Çalışan tüm konteynırları durdurur;
docker container stop $(docker container ls -q)
Konteynırı geçici olarak durdurur;
docker container pause containerName
Geçici olarak durdurulmuş konteynırı kaldığı yerden devam ettirir;
docker container unpause containerName
Konteynırları siler;
docker container rm containerID
Tüm konteynırları siler;
docker container rm $(docker container ls -aq)
Konteynır loglarını gösterir;
docker container logs containerName
Konteynır istatistiklerini gösterir;
docker container stats containerName
Konteynır detaylı inceleme için;
docker container inspect containerName
Konteynır içindeki processleri gösterir;
docker container top containerName
Çalışan konteynırların ID değerlerini getirir;
docker container ls -q
Tüm konteynırların ID değerlerini getirir;
docker container ls -aq
hello-world adlı konteynırı çalıştırır. Bilgisayarda yüklü değil ise Docker Hub sitesinden imajı indirir ve çalıştırır;
docker container run hello-world
hello-world adlı konteynırı isim vererek çalıştırır;
docker container run --name my-first-container hello-world
nginx adlı konteynırı çalıştırır. Bilgisayarın 80 portuna gelen isteği konteynırının 81 portuna yönlendirir;
docker container run --publish 80:81 nginx
nginx adlı konteynırı arka planda çalıştırır;
docker container run --publish 80:81 --detach nginx
mongodb adlı konteynıra bağlanıp içinde komut çalıştırır;
docker container exec -it mongodb bash
Konteynırı işlemci ve bellek kısıtlaması ile çalıştırır;
docker container run -d --name mongodb --cpu-shares 256 --memory 128M mongo
Konteynır kısıtlama değerlerini günceller;
Yükün yarısı kullanacak şekilde günceller;
docker container update --cpu-shares 500 alpine
İşlemci gücünün yarısı kullanılacak şekilde günceller;
docker container update --cpus 0.5 alpine
nginx adlı imajın en güncel sürümünü bilgisayara indirir;
docker image pull nginx
nginx adlı imajın 1.20 sürümünü indirir;
docker image pull nginx:1.20
nginx adlı imajı siler;
docker image rm nginx
docker image rmi nginx
mynginx adlı imaj oluşturur;
docker image tag nginx:1.20 mynginx
İmaj detaylarını gösterir;
docker image inspect dockerImageID
İmaj detaylarını gösterir;
docker image inspect dockerImageID
Konteynırda yapılan değişiklikleri kaydeder ve adı yazılan konteynırın aynı özelliklerinde imaj oluşturur;
docker container commit alpine alpine:melihsafran
Konteynır ile imaj arasındaki farkları gösterir;
docker container diff mongodb
Konteynır volume üç farklı türde oluşturulabilir.
Host volume oluşturur. Host dizinine konteyner dizinini bağlar;
docker run -v /home/host/mount/data/:/var/lib/mysql/data
Anonymous volume oluşturur. Docker arka tarafta konteyner için host sunucuda volume oluşturur ve dizini bağlar;
docker run -v /var/lib/mysql/data
Named Volume oluşturur;
docker run -v volumename:/var/lib/mysql/data
Docker Host sunucusunda bulunan volume dizinlerini listeler. Docker volume dosyaları var/lib/docker/volumes yolu altında bulunur.)
docker volume ls
Volume siler;
docker volume rm volumeID
Tüm volume dizinlerini siler;
docker volume prune
Volume dizininin bağlı olduğu konteynırları gösterir;
docker container inspect containerID
Named Volume oluşturup konteynırı çalıştırır;
docker container run -d --name mysql1 -v mysqldb1:/var/lib/mysql mysql
Oluşturulacak konteynırın Named Volume var olan volume dizinine bağlar;
docker container run -d --name mysql2 -v mysql-db1:/var/lib/mysql mysql
Bind Mount ekler. ngnix mount dizinini çalıştırılan directory ile değiştirir;
docker container run -d --name nginx -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
Docker Network, Bridge network türünde ağ oluşturur; Brigde türü ağ üzerinden konteynırlar birbiri ile iletişim kurabilir, açılan port ile host bilgisayardan konteynırlara erişilebilir.
docker network create -d bridge my-bridge-network
Host network türünde ağ oluşturur, host bilgisayar ağını kullanır;
docker network create -d host my-host-network
Overlay network türünde ağ oluşturur, bu tür birden fazla hostu birbirine bağlamak ve swarm servisleri arasında iletişim kurmak için kullanılır;
docker network create -d overlay my-overlay-network
Docker Network tanımlı ağları listeler;
docker network ls
Ağ özelliklerini gösterir;
docker network inspect my-bridge-network
bridge-net adlı ağ üzerinde cis-alpine adlı konteynırı çalıştırır;
docker container run -dit --name cis-alpine --network bridge-net alpine ash
trans-alpine adlı konteynırı bridge-net adlı ağa bağlar;
docker network connect bridge-net trans-alpine
Dockerfile, Docker imajı oluşturmak için kullanılır. Dockerfile, imaj oluşturmak için kullanılan komutları ve parametreleri içeren bir metin dosyasıdır.
Konteynırı oluşturacak temel imajı belirtir;
FROM node
İmajı oluştururken çalışacak komutları belirtir. Birden fazla run komutu yazılabilir;
shell biçimi ile;
RUN mkdir -p /home/app
ya da exec biçimi ile;
RUN ["mkdir", "-p", "/home/app"]
Host bilgisayardaki mevcut dizindekileri konteynırın içindeki yazılan dizine kopyalar;
COPY . /home/app
Konteynır oluştururken çalışacak varsayılan komutu belirtir; Konteynır çalışırken bir komut girilir ise dockerfile ile girilen varsayılan komut çalıştırılmaz. Dockerfile dosyasına bir kere yazılır.
Shell biçimi ile;
CMD node /home/app/server.js
ya da exec biçimi ile;
CMD ["node", "/home/app/server.js"]
Konteynırı başlatılırken çalışması istenen komutu belirtir; CMD komutuna benzer fakat CMD komutu parametreleri konteynırı çalışmaya başlanırken değiştirilebilir. ENTRYPOINT parametreleri değiştirilmez. Dockerfile dosyasına bir kere yazılır.
ENTRYPOINT ["echo", "Hello!"]
Dosyaları ve dizinleri konteynırın içine kopyalar; Uzak sunucudaki dosyaları url adresi ile ve sıkıştırılmış dosyaları açarak istenilen dizine kopyalar.
ADD codes /home/app
Konteynırda kullanılan ortam değişkenleri tanımlar;
ENV PORT 80
İmaj oluştururken kullanılan değişkenleri tanımlar;
ARG imageName
Konteynırın çalışacağı dizini belirtir;
WORKDIR /home/app
Konteynıra erişilecek portu tanımlar;
EXPOSE 8080
Kayıt yeri olarak kullanılacak olan volume dizinini tanımlar;
VOLUME /opt/data
Örnek Dockerfile;
# Dockerfile
FROM node:19-alpine3.16
RUN mkdir -p /home/app
COPY . /home/app
CMD ["node", "/home/app/server.js"]
İmaj oluşturmak için Dockerfile dosyasının bulunduğu dizinde;
docker build -t myApp:v1.0 .
Oluşturulan imajından konteynırı çalıştırmak için;
docker run myApp:v1.0 .