Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Docker-Compose, Networks, Volumes

 Docker Kod Notları 2

docker-compose, network, volumes

Docker Compose: image' ler dan oluşturduğumuz container'ları, servisleri tanımını tek bir dosyada yaparak ayağa kaldırmamızı sağlar. Aynı zamanda bir ağ bağlantısı köprüsü oluşturarak birden fazla container aynı ağda konuşturup iletişim sağlaması ve bir çok farklı özellikler ile tek bir dosyada yönetmemizi sağlar.

docker compose komutları docker-compose.yml dosyalarında tutulur ve bu dosyanın bulunduğu klasörde komut satırına girilerek çalıştırılır.

yml dosya uzantısı özelliği kolay okunaklı olduğu ve anahtar değer şeklinde değerler yazıldığı için kullanımı oldukça kolaydır.

önemli docker-compose.yml dosyasında girdiğimiz değerler 2 boşluk ve alt değerlerde 2 boşluk altında girilmelidir, bu düzen dikkat edilmez ise söz dizimi hatası verecektir.

version    kullanacağımız docker versionu belirtilir
services   çalışıcak uygulamayı belirtilir.
ports       dış portan gelen isteği uygulamanın kullandığı iç porta yönlendirmek için belirtilir
volume    dosylarımız tutalacağı veya yerel pcden container aktaracağımız yolu belirtiriz. bunu belirtmez isek docker default olarak bir volume oluşturur ve orda tutar ,fakat container her yeniden başlatıldığında bu veriler silinir. bu yüzden docker 'ın dışında bir yol belirtmemiz önemlidir.
container_name    container 'ımız için bir etiket ismi oluşturuyoruz.

Dosya adı: docker-compose.yml
Dosya içeriği:

version: "3.1"

services:

  s_nginx:

    container_name: c_nginx

    image: nginx

    ports:

      - 8080:80

      - 8081:80

  s_html:

    container_name: c_html

    image: httpd

    volumes:

      -  C:\docker-containers\docker_compose\html/:/usr/local/apache2/htdocs

    ports:

      - 9090:80

      - 9091:80

volumes:

  html:


oluşturduğumuz yml dosyamızı çalıştırmak için, dosyamızın bulunduğu klasöre girip komut satırını açıyoruz ve aşağıdaki kodu çalıştırıyoruz.

>    docker-compose up -d

çalışan compose durdurmak için yml dosyamızın bulundugu klasordeki komut satırımıza aşağıdaki kodu çalıştırıyoruz.

> docker-compose down

docker compose loglarını görmek için aşağıdaki kodu çalıştırıyoruz.

> docker-compose logs

docker compose içerisinde bir servisi oluşturmak için aşağıdaki kodu çalıştırıyoruz.

>docker-compose build s_html



Docker Network:
Docker host üzerindeki docker container’lar gateway’e sahiptirler ve bu gateway üzerinden birbirilerine bağlantı kurabilirler. Her container’ımızın kendisine ait IP adresi ve bir port numarası vardır.
Docker container’ların birbirleriyle ve dışarıdaki uygulamalardan bu container’larla iletişim sağlanmasını sağlayan şey, Docker network yapısıdır.

3 adet network türü vardır:

Bridge: Aksi belirtilmediği sürece varsayılan network türüdür. Container yarattığımızda herhangi bir network belirtmezsek, default olarak bu network yapısını yani bridge network’u kullanır.

Host: Eğer container’lar host network’ü ile çalıştırılırsa, container’lar hosttaki ayarları kullanarak hayatına devam edecektir. İlgili container’a, Docker hostun kendi IP adresi üzerinden erişim sağlanır.

None: Container’ların hiçbir şekilde ağ altyapısını kullanmamasını sağlarlar. Bu network türüyle yaratılan container’a, ne dışarıdan ne de docker host içerisinden erişim sağlayabilirsiniz.

docker network yardımcı komutları:
>    docker network --help
connect :bir contenir o network bağlamak için
create  : yeni bir network oluşturmak için
disconnect : connect network bağlantısını koparmak için
inspect :  detaylarını görüntülemek için
ls : listeleme
prune : kullanım ıdısında olan aktif olarak kullanılmayan networkleri silmek için
rm : network kaldırmak için

örnek olarak komut satırında kullanıldığı gibi docker-compose.yml içerisinde de kullanabiliriz. :
>    docker network create custom_net --driver bridge
>    docker network inspect custom_net 

--network  hangi network de olması gerektiğini belirtiyoruz.

>    docker run -d -p 80:80 --name c_nginx --network custom_net nginx
>    docker network disconnect custom_net c_nginx

Docker Volumes

Docker üzerinde oluşan dataların saklanması ile ilgili bir bileşen docker container arasında veri saklamamız veya container arasında veri paylaşmamız için kullanılır, harici ortamda verilerin saklanması. 

docker volume yardımcı komutları:
>    docker volume --help
 create : yeni volume oluşturma  
 inspect : detaylarını görmek 
 ls : listeleme
 prune : kullanılmayan volume silmek
 rm : birvolume kaldırmak

örnek olarak komut satırında kullanıldığı gibi docker-compose.yml içerisinde de kullanabiliriz. :
docker volume prune
docker volume create v_test
docker volume inspect v_test

-v    kaydedeceğimiz yolu ve nereye kaydedeceğimizi belirtiyoruz.

>    docker run -d -p 80:80 --name c_nginx -v C:\app_data\nginx:/usr/share/nginx/html nginx

Docker Image, Container, Dockerfile

 Docker Kod Notları
image, container,dockerfile

Docker İmage: katman veya uygulamalardan olur. container içinde çalışır. image'lar oluşturup container içinde çalıştırırız. image 'ları kendi projemize göre özelleştiririz.

Docker Container: sanal makine, bir ip ,network ,sub mask vardır, image veya image'lerdan oluşur.


ls aktif listeyi verir.

ls -a daha önce çalışmış olduklarımızı da  gösterir

Image listeleme

>    docker image ls

>    docker image ls -a

Container Listeleme

>    docker container ls

>    docker container ls -a


Docker run Basit bir container ayağa kaldırmamıza yarar.

-d  container'ın komut satırında açık olmadan arka planda çalışması için kullanıyoruz.

-p iç porttan dış porta bağlanıyor, sunucu ipsinden 8080 protuna istek attığımızda container içerde nginx kullandığı 80 portuna yönlendirecektir.

>    docker run -d  --name c_nginx -p 8080:80 nginx


DOCKERFILE

Dockerfile içerisinde hangi Image’ın kullanılacağı, hangi dosyaları içereceği ve hangi uygulamanın hangi parametrelerle çalışacağı yazılır. Docker, Dockerfile dosyasında bulunan komutları sırayla tek tek çalıştırır. Her komut yeni bir katman oluşturur. Docker build sonunda elimizde uygulaması ait Docker Image oluşur .

Dockerfile dosyasının herhangi bir uzantısı yoktur. bunun için dosta ismi sadece Dockerfile  olmalıdr. Dosya uzantıları işletim sisteminizde gizli ise, uzantıları açıp siliniz.

Örnek bir dockerfile

RUN uygulama içerisinde kullanacağımız kodlardır. her bir run komutu bir katmandır, image boyutunu arttırır. birden fazla komutu tek bir katmanda toplamak için aralara && "and" işareti ekleyerek kullanabiliriz.

From base image yani dockerhub içerisinde var olan bir uygulamayı çğrıyoruz ve kendimize göre özelleştiriyoruz.

alpine image en küçük boyutta minimum gereksinimle çalışan bir linux işletim sistemi dağıtımıdır.

Dosya adı:Dockerfile 

Dosya içeriği:

From alpine

RUN mkdir /test_dir && cd /test_dir

RUN echo "BU BİR TEST CONTAINER DIR." > test.txt

CMD cat test.txt


Dockerfile dosyasyının içinde bulunduğu klasörü komut satırında açıyoruz.

İlk önce dockerfile ile bir image oluşturuyoruz.

-t image bir etiket ismi vermek için kullanılır.

"nokta" işareti dockerfile bu klasörde oldugunu belirmetk için kullanılır.

>    docker image build -t test1 .

daha sonra oluşturduğumuz image container olarak ayağa kaldırıyoruz.

>    docker run test1

yukarıdaki komutu çalıştırarak dockerfile ile oluşturduğumuz image 'ı container olarak çalıştırıyoruz.

---------------------------------------------------------------------------------

Referans Belgeleri için tıklayınız