Docker

Docker Nedir
Docker, uygulama geliştirme, dağıtım ve yönetim için kullanılan bir açık kaynaklı platformdur. Docker, yazılımları kapsayıcı adı verilen standartlaştırılmış birimler halinde paketler. Bir kapsayıcı, belirli bir uygulamayı çalıştırmak için gereken kod, sistem araçları, çalışma zamanı, kitaplıklar, bağımlılıklar ve yapılandırma dosyalarını içeren bir yazılım paketini temsil eder.

Docker, aşağıdaki avantajları sunar:

  • Uygulamaların hızlı ve kolay bir şekilde dağıtılmasını sağlar.
  • Uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını sağlar.
  • Uygulamaların kaynak kullanımını optimize eder.
  • Uygulamaların güvenliğini artırır.

 

Docker Mimari Yapısı ve bölümleri

Docker, bir görüntüden oluşturulan ve çalışan bir uygulama olan kapsayıcıları kullanarak yazılımları dağıtmak ve yönetmek için kullanılan bir açık kaynaklı platformdur. Docker mimari yapısı, aşağıdaki bölümlerden oluşur:

  • Docker Engine: Docker Engine, Docker’ın çekirdek bileşenidir. Docker Engine, kapsayıcıları oluşturmak, çalıştırmak, durdurmak ve silmek için gereken tüm işlevleri sağlar.
  • Docker Hub: Docker Hub, Docker görüntülerini depolamak, aramak ve paylaşmak için kullanılan bir platformdur.
  • Docker Client: Docker Client, Docker Engine’i komut satırı aracılığıyla kontrol etmek için kullanılan bir araçtır.
  • Dockerfile: Dockerfile, bir görüntüyü oluşturmak için gerekli talimatları içeren bir metin dosyasıdır.

Docker Engine

Docker Engine, Docker’ın çekirdek bileşenidir. Docker Engine, kapsayıcıları oluşturmak, çalıştırmak, durdurmak ve silmek için gereken tüm işlevleri sağlar. Docker Engine, aşağıdaki bileşenlerden oluşur:

  • Docker daemon: Docker daemon, Docker’ın arka planda çalışan hizmetidir. Docker daemon, kapsayıcıları oluşturmak, çalıştırmak, durdurmak ve silmek için gereken tüm işlevleri sağlar.
  • Docker CLI: Docker CLI, Docker Engine’i komut satırı aracılığıyla kontrol etmek için kullanılan bir araçtır.
  • Docker API: Docker API, Docker Engine’in uzaktan erişimi için bir API’dir. Docker API, Docker’ı üçüncü taraf araçlarla entegre etmek için kullanılabilir.
 
 

 

 

Docker Kurulumu Ubuntu

Ubuntu’da Docker’ı kurmak için aşağıdaki adımları izleyin:

  1. Sisteminizi güncelleyin.
sudo apt-get update && sudo apt-get upgrade
  1. Docker’ı indirin ve kurun.
sudo apt-get install docker.io
  1. Docker’ı başlatın.
sudo systemctl start docker
  1. Docker’ı etkinleştirin.
sudo systemctl enable docker
  1. Docker’ı test edin.
docker run hello-world

Bu komut, Docker’ın düzgün bir şekilde kurulduğunu ve çalıştığını doğrulayacaktır.

Temel Komutlar

Docker hakkında genel bilgileri gösterir.

$ docker info

Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.10
 Git commit:        9ee9f40
 Built:             Wed Jun 22 23:37:41 2023
 OS/Arch:           linux/amd64
 Experimental:      true

Server:
 Engine:
  Version:           20.10.12
  API version:       1.41 (minimum version 1.12)
  Go version:        go1.17.10
  Git commit:        9ee9f40
  Built:             Wed Jun 22 23:37:41 2023
  OS/Arch:           linux/amd64
  Experimental:      true

Cluster:
  Enabled:          false
  Node addresses:

Runtimes:
  runc:
    Version:          1.10.3
    Runtime API version: 1.10

Default runtime: runc

Images:
  Total:              1
  Repository:          hello-world
  Tag:                 latest
  Digest:              sha256:f65c1954624d7036f8771979b039d8293e45a91b01585e84f987194729b15822

Containers:
  Total:              1
  Running:             0
  Paused:              0
  Stopped:             1
  Images:              1
  Ports:               0/tcp
  Names:               /hello-world

Volumes:
  Total:              0

BuildKit:
  Version:           0.8.4

Plugins:
  filesystem:
    Name:            aufs
    Description:     The aufs image filesystem
    Version:          1.10.3
    Enabled:          true
  network:
    Name:            bridge
    Description:     The default bridge network
    Version:          1.10.3
    Enabled:          true
  secrets:
    Name:            default
    Description:     The default secrets store
    Version:          1.10.3
    Enabled:          true

Yürütmekte olan kapsayıcıları listeler.

$ docker ps

CONTAINER ID   IMAGE       COMMAND   CREATED   STATUS    PORTS   NAMES

Tüm kapsayıcıları listeler, hem çalışan hem de durdurulmuş.

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 000000000000 hello-world “echo ‘Hello World'” 2 minutes ago Exited (0) 5602/tcp hello-world

CentOS 7 görüntüsünü kullanarak bir kapsayıcı oluşturur ve “Hello World” yazdırır.

$ docker run centos:7 echo "Hello World"

Hello World

Tüm kapsayıcıları listeler, hem çalışan hem de durdurulmuş.

$ docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 000000000000 centos:7 “echo ‘Hello World'” 4 minutes ago Exited (0) 5602/tcp hello-world

CentOS 7 görüntüsünü kullanarak bir kapsayıcı oluşturur ve bir Bash kabuğu başlatır. Bu komut, aşağıdakileri yapar:

Çıktı:

[root@localhost ~]# docker container run -it centos:7 bash

root@123456789abcdef:/#

“e9264c0b63ac” ID’sine sahip durdurulmuş bir kapsayıcıyı başlatır.

Çıktı:

[root@localhost ~]# docker container start e9264c0b63ac

e9264c0b63ac

“03264c0b63ac” ID’sine sahip çalışan bir kapsayıcıya bir Bash kabuğu başlatır.

-i bayrağı, kapsayıcıya bir giriş arabirimi sağlar. Bu, kapsayıcıdaki bir terminale erişmenizi sağlar.

-t bayrağı, kapsayıcıya bir TTY sağlar. Bu, kapsayıcıdaki bir terminalde metin girişi ve çıktısı yapabilmenizi sağlar.

bash komutu, bir Bash kabuğu başlatır.

Çıktı:

[root@localhost ~]# docker container exec -it 03264c0b63ac bash

root@123456789abcdef:/#

üm kapsayıcıları listeler, hem çalışan hem de durdurulmuş. Kapsayıcı adlarını ve ID’lerini, görüntü adlarını, komutları, oluşturma tarihlerini ve durumlarını gösterir. Ayrıca, bağlantı noktalarını ve adları da gösterir.

Çıktı:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 000000000000 centos:7 “echo ‘Hello World'” 2 minutes ago Exited (0) 5602/tcp hello-world 999999999999 centos:7 “ping 127.0.0.1 -c 10” 3 minutes ago Up 0.0.0.0:80->80/tcp my-app

Ayrıntılı açıklama:

-a bayrağı, tüm kapsayıcıları listeler, hem çalışan hem de durdurulmuş.

-no-trunc bayrağı, kapsayıcı adlarını ve ID’lerini tam olarak gösterir.

Tüm kapsayıcıları listeler, hem çalışan hem de durdurulmuş. Kapsayıcı ID’lerini ve durumlarını gösterir.

Çıktı: 952asdsadgrwed

CentOS 7 görüntüsünü kullanarak bir kapsayıcı oluşturur ve “ping 127.0.0.1 -c 10” komutunu çalıştırır. Bu komut, yerel makinenin IP adresine 10 kez ping gönderir.

Çıktı:

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.075 ms
...

“041887512863” ID’sine sahip kapsayıcıya bir Bash kabuğu ekler. Bu, kapsayıcıdaki bir terminale erişmenizi sağlar.

Çıktı:

root@123456789abcdef:/#

-i bayrağı, kapsayıcıya bir giriş arabirimi sağlar.

-t bayrağı, kapsayıcıya bir TTY sağlar.

Tüm kapsayıcıları listeler, hem çalışan hem de durdurulmuş. Kapsayıcı adlarını, ID’lerini, görüntü adlarını, komutları, oluşturma tarihlerini ve durumlarını gösterir. Ayrıca, bağlantı noktalarını ve adları da gösterir.

Çıktı:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 000000000000 centos:7 “echo ‘Hello World'” 2 minutes ago Exited (0) 5602/tcp hello-world 999999999999 centos:7 “ping 127.0.0.1 -c 10” 3 minutes ago Up 0.0.0.0:80->80/tcp my-app

Ayrıntılı açıklama:

–filter=”” bayrağı, herhangi bir filtre belirtmez. Bu, tüm kapsayıcıları listeler.

-d bayrağı, kapsayıcıyı arka planda başlatır. Bu, komut satırında kalmanıza ve başka şeyler yapmanıza olanak tanır.

docker container run -d centos:7 ping 127.0.0.1 komutu, aşağıdakileri yapar:

  • CentOS 7 görüntüsünü indirir (eğer henüz indirmediyse).
  • “ping 127.0.0.1” komutunu kullanarak bir kapsayıcı oluşturur.
  • Kapsayıcıyı arka planda başlatır.

Çıktı:

[root@localhost ~]# docker container run -d centos:7 ping 127.0.0.1

041887512863

-d bayrağı, aşağıdaki komutlarda da kullanılabilir:

“041887512863” ID’sine sahip kapsayıcıdan günlükleri görüntüler.

Çıktı:

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.075 ms
...
Kapsayıcı Başlatma Durdurma ve silme işlemleri

Kapsayıcı başlatma

Kapsayıcıları başlatmak için docker container run komutunu kullanırız. Bu komut, aşağıdakileri yapar:

  • Görüntüyü indirir (eğer henüz indirmediyse).
  • Komutu çalıştırır.
  • Kapsayıcıyı başlatır.

Örnek:

docker container run centos:7 echo "Hello World"

Bu komut, CentOS 7 görüntüsünü kullanarak bir kapsayıcı oluşturur ve “echo ‘Hello World'” komutunu çalıştırır. Kapsayıcıyı başlatır ve “Hello World” yazdırır.

-d bayrağı, kapsayıcıyı arka planda başlatır. Bu, komut satırında kalmanıza ve başka şeyler yapmanıza olanak tanır.

Örnek:

docker container run -d centos:7 echo "Hello World"

Bu komut, CentOS 7 görüntüsünü kullanarak bir kapsayıcı oluşturur ve “echo ‘Hello World'” komutunu arka planda çalıştırır. Kapsayıcıyı başlatır ve “Hello World” yazdırır.

Kapsayıcı durdurma

Kapsayıcıları durdurmak için docker container stop komutunu kullanırız. Bu komut, aşağıdakileri yapar:

  • Kapsayıcının çalışmasını durdurur.
  • Kapsayıcının bağlı olduğu tüm ağ bağlantılarını kapatır.

Örnek:

docker container stop CONTAINER_ID

CONTAINER_ID, durdurmak istediğiniz kapsayıcıya ait ID’dir.

Kapsayıcı silme

Kapsayıcıları silmek için docker container rm komutunu kullanırız. Bu komut, aşağıdakileri yapar:

  • Kapsayıcının verilerini ve meta verilerini siler.
  • Kapsayıcının bağlı olduğu tüm ağ bağlantılarını kaldırır.

Örnek:

docker container rm CONTAINER_ID

CONTAINER_ID, silmek istediğiniz kapsayıcıya ait ID’dir.

Kapsayıcı başlatma, durdurma ve silme işlemlerinin özeti:

İşlemAçıklama
docker container runKapsayıcıyı başlatır.
-d bayrağıKapsayıcıyı arka planda başlatır.
docker container stopKapsayıcının çalışmasını durdurur.
docker container rmKapsayıcının verilerini ve meta verilerini siler.

Belirtilen kapsayıcıyı zorla durdurur.

Örnek:

docker container kill CONTAINER_ID

CONTAINER_ID, durdurmak istediğiniz kapsayıcıya ait ID’dir.

Çıktı:

CONTAINER_ID

Belirtilen kapsayıcıyı başlatır.

Örnek:

docker container start CONTAINER_ID

CONTAINER_ID, başlatmak istediğiniz kapsayıcıya ait ID’dir.

Çıktı:

CONTAINER_ID

Belirtilen kapsayıcı hakkındaki bilgileri görüntüler. IP adresi için arama yapar.

Örnek:

docker container inspect CONTAINER_ID | grep IPAddress

CONTAINER_ID, bilgi almak istediğiniz kapsayıcıya ait ID’dir.

Çıktı:

"IPAddress": "192.168.1.100"

Kapsayıcılar çalışır durumdayken silinemez. Çünkü çalışan bir kapsayıcı, bir işleme veya hizmete ev sahipliği yapıyor olabilir. Bu, kapsayıcıyı silerseniz, işlemin veya hizmetin çalışmayı durduracağı anlamına gelir.

Kapsayıcıyı durdurmak için docker container stop komutunu kullanırız. Kapsayıcıyı durdurduktan sonra, docker container rm komutunu kullanarak silebiliriz.

Bu komut, kapsayıcıyı siler.

Çıktı:

CONTAINER_ID

80/tcp -> 0.0.0.0:5000

docker plugin ls komutu ise, yüklü olan tüm Docker eklentilerini listeler3. Bu komutun çıktısı şuna benzer:

ID                  NAME                DESCRIPTION           ENABLED
ac720b8fcfdb        loki:latest         Loki Logging Driver   true

Bu çıktı, loki adlı bir eklentinin yüklü ve etkin olduğunu gösterir.

Bu Docker komutları, belirli bir eklentiyi etkinleştirmek, devre dışı bırakmak veya kaldırmak için kullanılır. Virgülle ayrılmış komutlar, aynı anda birden fazla komut çalıştırmak için kullanılır1.

docker plugin enable plugin_name komutu, belirtilen eklentiyi etkinleştirir2. Bu komutun çıktısı şuna benzer:

plugin_name

Bu çıktı, eklentinin başarıyla etkinleştirildiğini gösterir.

docker plugin disable plugin_name komutu, belirtilen eklentiyi devre dışı bırakır3. Bu komutun çıktısı şuna benzer:

plugin_name

Bu çıktı, eklentinin başarıyla devre dışı bırakıldığını gösterir.

docker plugin rm plugin_name komutu, belirtilen eklentiyi kaldırır4. Bu komutun çıktısı şuna benzer:

plugin_name

Bu çıktı, eklentinin başarıyla kaldırıldığını gösterir.

Bu Docker komutları, Docker Hub’dan jenkins adlı bir imaj aramak ve indirmek için kullanılır. Virgülle ayrılmış komutlar, aynı anda birden fazla komut çalıştırmak için kullanılır1.

docker search jenkins komutu, Docker Hub’da jenkins ile ilgili imajları arar2. Bu komutun çıktısı şuna benzer:

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
jenkins                          Official Jenkins Docker image                   6000      [OK]       
jenkins/jenkins                  The official Jenkins image from the Jenkins...  1000                  [OK]
jenkins/jnlp-slave               A Jenkins agent (FKA \"slave\") using JNLP ...  100                   [OK]
jenkinsci/blueocean              Docker image of the community-driven Jenkin...  100                   [OK]
jenkinsci/jenkins                 The official Jenkins image from the Jenkins...  100                   [OK]

Bu çıktı, arama sonuçlarının isim, açıklama, yıldız sayısı, resmi olup olmadığı ve otomatik oluşturulup oluşturulmadığı gibi bilgileri içerdiğini gösterir.

docker pull jenkins komutu ise, Docker Hub’dan jenkins adlı resmi imajı indirir3. Bu komutun çıktısı şuna benzer:

Using default tag: latest
latest: Pulling from library/jenkins
Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668
Status: Downloaded newer image for jenkins:latest
docker.io/library/jenkins:latest

Bu çıktı, imajın indirme durumunu ve etiketini gösterir.

Docker Hub Repository Oluşturma, Docker image’larınızı depolamak, paylaşmak ve dağıtmak için bir platform olan Docker Hub’da bir repository oluşturma işlemidir. Bir repository, bir veya daha fazla Docker image’ını içeren bir koleksiyondur. Bir repository oluşturmak için şu adımları izleyebilirsiniz1:

  • Docker Hub’a kaydolun veya giriş yapın.
  • Repositories menüsünden Create Repository seçeneğini tıklayın.
  • Repository’nizin adını, açıklamasını, görünürlüğünü (public veya private) ve GitHub veya Bitbucket hesabınızı belirleyin.
  • Create butonuna basın.

Bu şekilde, Docker Hub’da kendi repository’nizi oluşturmuş olursunuz. Daha sonra, docker tag ve docker push komutları ile kendi image’larınızı bu repository’e yükleyebilirsiniz2. Örneğin:

docker tag my-image:latest <your-username>/my-repo:latest
docker push <your-username>/my-repo:latest

Docker file

docker file nedir nasıl kullanılır

Dockerfile, Docker konteyner oluşturmak için kullanılan bir yapılandırma dosyasıdır1. Dockerfile, uygulamanın nasıl çalıştırılacağını ve hangi bağımlılıklarının yükleneceğini belirtir. Docker, bu Dockerfile’ı kullanarak bir konteyner oluşturur ve bu konteyner’ı image adı verilen dosya haline getirir. Bu image, daha sonra herhangi bir sistemde çalıştırılabilir2.

Dockerfile, dosya sistemini tanımlayan bir betik dosyasıdır. Dockerfile, satır satır yapılandırma komutlarından oluşur ve her komut, bir dosya veya dizin oluşturmak, bir dosya veya dizinin içeriğini değiştirmek gibi bir işlemi gerçekleştirir2Dockerfile, ayrıca konteyner’ın içerisinde çalışan süreçleri ve bu süreçlerin nasıl yönetileceğini de belirtir3.

Dockerfile nasıl kullanılır? Basit bir Dockerfile oluşturmak için aşağıdaki adımları izleyebilirsiniz:

  • Bir dosya oluşturun ve bu dosyaya Dockerfile adını verin.
  • Dosyanın başına FROM komutunu yazın ve bu komut ile konteyner’ın çalışacağı temel image’ı belirtin. Örneğin, FROM ubuntu:latest komutu ile Ubuntu’nun en son sürümünü kullanacağınızı belirtmiş olursunuz.
  • RUN komutları ile konteyner içerisinde çalıştırılacak komutları belirtin. Örneğin, RUN apt-get update komutu ile konteyner içerisinde apt-get paket yöneticisini güncelleyebilirsiniz.
  • COPY komutları ile konteyner içerisine dosya veya dizin kopyalayabilirsiniz. Örneğin, COPY index.html /var/www/html komutu ile index.html dosyası konteyner içerisindeki /var/www/html dizinine kopyalanabilir.
  • EXPOSE komutu ile konteyner’ın hangi portlardan erişilebileceğini belirtin. Örneğin, EXPOSE 80 komutu ile konteyner’ın 80. portundan erişilebileceğini belirtmiş olursunuz.
  • CMD komutu ile konteyner çalıştırılırken çalıştırılacak komutları belirtin. Örneğin, CMD ["nginx", "-g", "daemon off;"] komutu ile konteyner çalıştığında nginx komutunu çalıştırıyoruz ve “-g” ve “daemon off;” parametrelerini kullanıyoruz.

Bu adımlar tamamlandıktan sonra, Dockerfile oluşturulmuş olacak ve docker build komutu ile bu Dockerfile kullanarak bir konteyner oluşturulabilir. Örneğin, docker build -t my-app . komutu ile Dockerfile’ın bulunduğu dizinde bir konteyner oluşturulabilir2.

 

  1. Örnek Docker file dosyası vim DockerFile
  2. FROM centos:7
  3. RUN yum -y update
  4. RUN yum -y install nano
  5. CMD ping -c 10 127.0.0.1
  6. CMD [“/bin/echo]
  7. ///////////////////
  8. docker image build –tag umut .
  1. FROM ubuntu
  2. RUN apt-get -y update \
  3.           apt-get -y install nano\
  4.            apt-get -y install httpd

/////////////////////

docker image build -t by-ubuntu  .

 
 

 

 

  1. FROM nginx
  2. RUN rm /etc/nginx/nginx.conf /etc/nginx/conf./default.conf
  3. COPY content /usr/share/nginx/html
  4. COPY conf /etc/nginx

/////////////////////

  1. docker image build -t by-nginx .
  2. docker images
  3. docker run –name my_nginx -p 80:80 -d nginx
  4. docker ps
 
 

 

 

FROM ubuntu # Konteyner’ın temel image’ı olarak ubuntu image’ını kullan.
MAINTAINER by # Dockerfile’ın yaratıcısının adını ve e-posta adresini belirt. (Bu komut artık kullanılmıyor, yerine LABEL komutu kullanılıyor
RUN apt-get -y update # Konteyner içerisinde apt-get paket yöneticisini güncelle.
RUN  apt-get -y upgrade Bu komut, konteyner içerisindeki paketleri günceller.
RUN apt-get -y install nano # Konteyner içerisinde nano adlı metin editörünü yükler.
RUN apt-get -y install python3 python3-pip Bu komut, konteyner içerisinde python3 ve python3-pip yükler.
COPY /app # Bu komut eksik, hedef dizin belirtilmeli. Örneğin, COPY /app /app gibi. Bu komut, yerel /app dizinini konteyner içerisindeki /app dizinine kopyalar.
WORKDIR /app # Konteyner içerisindeki çalışma dizinini /app olarak değiştirir.
EXPOSE 5000 # Konteyner’ın 5000. portundan erişilebileceğini belirtir.
ENTRYPOINT echo “Hello Wold” # Konteyner çalıştığında echo “Hello Wold” komutunu çalıştırır. (Bu komut yanlış yazılmış, doğrusu echo “Hello World” olmalı.)

 
 

 

 

FROM alpine: 3.5 As build # Konteyner'ın temel image'ı olarak alpine:3.5 image'ını kullan ve bu aşamayı build olarak adlandır.
RUN apk update \ # Konteyner içerisinde apk paket yöneticisini güncelle.
apk add update alpine-sdk # Konteyner içerisinde alpine-sdk paketini yükle.
RUN mkdir /app # Konteyner içerisinde /app dizini oluştur.
WORKDIR /app # Konteyner içerisindeki çalışma dizinini /app olarak değiştir.
COPY hello.c /app # Yerel hello.c dosyasını konteyner içerisindeki /app dizinine kopyala.
RUN gee Hall hello.c-bin/hello # Bu komut yanlış yazılmış, doğrusu RUN gcc -Wall hello.c -o bin/hello olmalı. Bu komut, konteyner içerisinde gcc kompilatörünü kullanarak hello.c dosyasını bin/hello adlı çalıştırılabilir dosyaya dönüştürür.
RUN mkdir bin # Konteyner içerisinde bin dizini oluştur.
FROM alpine: 3.5 # Yeni bir aşama başlat ve temel image'ı olarak alpine:3.5 image'ını kullan.
COPY from build /app/bin/hello /app/hello # build aşamasından /app/bin/hello dosyasını yeni aşamadaki /app/hello dizinine kopyala.
CMD [\"/app/hello\"] olmalı. Bu komut, konteyner çalıştığında /app/hello dosyasını çalıştırır.

Docker Volume Komutları 1

 

Docker Volume, Docker container’larının üzerinde depolanan verileri kalıcı olarak saklamak için kullanılan bir yöntemdir. Volume’lar, container’ın durdurulup yeniden başlatılması durumunda bile verilerin kaybolmamasını sağlar.

Docker Volume komutları, volume’ları oluşturmak, listelemek, bağlamak, bağlamayı kaldırmak ve silmek için kullanılır.

Docker Volume Komutları:

  • docker volume create: Yeni bir volume oluşturur.
  • docker volume ls: Mevcut volume’ları listeler.
  • docker volume inspect: Belirli bir volume’un ayrıntılarını görüntüler.
  • docker volume mount: Bir volume’u bir container’a bağlar.
  • docker volume unmount: Bir volume’u bir container’dan söker.
  • docker volume prune: Tüm kullanılmayan volume’ları siler.

Örnekler:

  • Yeni bir volume oluşturma:
docker volume create my-volume
  • Mevcut volume’ları listeleme:
docker volume ls
  • Belirli bir volume’un ayrıntılarını görüntüleme:
docker volume inspect my-volume
  • Bir volume’u bir container’a bağlama:
docker run -it -v my-volume:/data ubuntu
  • Bir volume’u bir container’dan sarma:
docker rm -f my-container
  • Tüm kullanılmayan volume’ları silme:
docker volume prune

Docker Volume’lar Ne İçerir?

Docker Volume’lar, container’ın kullandığı tüm verileri içerebilir. Bu veriler, uygulamanın dosyalarını, ayarları ve diğer verileri içerebilir.

Docker Volume’ların Avantajları

  • Verilerin kalıcılığını sağlar.
  • Container’ın durdurulup yeniden başlatılması durumunda veriler kaybolmaz.
  • Birden fazla container tarafından paylaşılabilir.

Docker Volume’ların Dezavantajları

  • Volume’lar, container’ın bulunduğu host üzerinde depolanır.
  • Volume’lar, container’ın boyutuna göre büyüyebilir.

Docker Volume’ları Kullanım Alanları

  • Veri depolama: Uygulamaların dosyalarını, ayarları ve diğer verilerini saklamak için kullanılabilir.
  • Dosya paylaşımı: Birden fazla container tarafından paylaşılan dosyaları depolamak için kullanılabilir.
  • Ağ paylaşımı: Container’lar arasında ağ bağlantılarını paylaşmak için kullanılabilir.
  1. docker volume create –name test1
  2. cd /var/lib/docker/volumes/test1/_data
  3. docker container run -it -v test1:/www/website centos:7 bash
  4. cd /www/website/
  5. echo ‘hello’there’ > test.txt
  6. exit
 
 

 

 

 

Docker, container’lar arasında dosya paylaşımı için paylaşılan volume’lar sağlar. Paylaşılan volume’lar, birden çok container tarafından kullanılabilir ve verileri container’ın silinmesinden sonra bile korur.

Paylaşılan volume oluşturmak için, docker volume create komutunu -d seçeneğiyle birlikte kullanın. -d seçeneği, volume’un paylaşımlı olmasını sağlar.

Örneğin, aşağıdaki komut my-shared-volume adlı paylaşılan bir volume oluşturur:

docker volume create -d shared my-shared-volume

Paylaşılan volume’u bir container’a bağlamak için, docker volume mount komutunu kullanın. docker volume mount komutunun -t seçeneği, volume’un paylaşımlı olduğunu belirtir.

Örneğin, aşağıdaki komut my-shared-volume adlı paylaşılan volume’u /data dizininde bir container’a bağlar:

docker volume mount -t my-shared-volume /data

Paylaşılan volume’u kullanmaya başlayan her container, volume’un içeriğine erişebilir.

Paylaşılan volume’ları yönetmek için, docker volume komutunun ls, inspect ve rm seçeneklerini kullanabilirsiniz.

Paylaşılan Volume Örnekleri

Aşağıdaki örnekler, paylaşılan volume komutlarının nasıl kullanıldığını göstermektedir:

  • Paylaşılan bir volume oluşturma:
docker volume create -d shared my-shared-volume
  • Paylaşılan bir volume’u bir container’a bağlama:
docker volume mount -t my-shared-volume /data
  • Paylaşılan bir volume’u kullanma:
docker run -it --rm -v my-shared-volume:/data debian

Bu komut, Debian işletim sistemini çalıştıran bir container oluşturur. Container, /data dizininde bulunan my-shared-volume adlı paylaşılan volume’a erişebilir.

Docker Volume External Storage

Docker volume external storage, Docker volume’ları oluşturmak ve yönetmek için harici depolama kullanmanıza izin verir. Bu, Docker host’unuzun yerel depolama alanına bağlı olmamanızı sağlar ve volume’ları bulut depolama hizmetleri gibi uzak konumlarda saklamanıza olanak tanır.

Docker volume external storage kullanmak için, bir volume sürücüsü kullanmanız gerekir. Volume sürücüleri, Docker’a farklı depolama sistemleriyle nasıl etkileşime gireceğini söyler.

Docker’ın varsayılan volume sürücüsü local sürücüsüdür. Bu sürücü, volume’ları Docker host’unun yerel depolama alanında saklar.

Harici depolama kullanmak için, bir volume sürücüsü yüklemeniz ve yapılandırmanız gerekir. Örneğin, Amazon Elastic Block Store (EBS) kullanmak için, ebs volume sürücüsünü yüklemeniz ve AWS kimlik bilgilerinizi yapılandırmanız gerekir.

Bir volume sürücüsünü yükledikten sonra, onu kullanarak volume’lar oluşturabilirsiniz. Örneğin, aşağıdaki komut EBS kullanarak my-ebs-volume adlı bir volume oluşturur:

docker volume create --driver ebs my-ebs-volume

Harici depolama kullanan volume’ları container’lara bağlayabilirsiniz. Örneğin, aşağıdaki komut my-ebs-volume adlı volume’u /data dizininde bir container’a bağlar:

docker run -it --rm -v my-ebs-volume:/data debian

Harici depolama kullanan volume’ları yönetmek için, Docker’ın normal volume komutlarını kullanabilirsiniz.