Docker Nedir
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:
- Sisteminizi güncelleyin.
sudo apt-get update && sudo apt-get upgrade
- Docker’ı indirin ve kurun.
sudo apt-get install docker.io
- Docker’ı başlatın.
sudo systemctl start docker
- Docker’ı etkinleştirin.
sudo systemctl enable docker
- 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:
İşlem | Açıklama |
---|---|
docker container run | Kapsayıcıyı başlatır. |
-d bayrağı | Kapsayıcıyı arka planda başlatır. |
docker container stop | Kapsayıcının çalışmasını durdurur. |
docker container rm | Kapsayı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
Bu Docker komutları, grafana/loki-docker-driver adlı bir eklenti yüklemek ve yüklü eklentileri listelemek 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 install grafana/loki-docker-driver
komutu, Grafana Loki tarafından sağlanan bir Docker eklentisi yükler2. Bu eklenti, Docker konteynerlerinden gelen günlükleri Loki’ye gönderir2. Bu komutu çalıştırmak için, eklentinin son sürümünü belirtmeniz ve loki adında bir takma ad vermeniz gerekir2. Örneğin:
docker plugin install grafana/loki-docker-driver:2.9.1 --alias loki --grant-all-permissions
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 login komutu, Docker Hub veya başka bir Docker Registry’ye kimlik doğrulaması yapmak için kullanılır1. Bu komut, Docker image’lerini indirmek, yüklemek veya güncellemek için gerekli olan yetkilendirmeyi sağlar2. Docker login komutunun genel biçimi şöyledir:
docker login [OPTIONS] [SERVER]
Bu komutta, OPTIONS
parametresi ile isteğe bağlı olarak kullanıcı adı, parola veya kimlik doğrulama belgesi gibi bilgiler verilebilir3SERVER
parametresi ise, giriş yapılacak olan Docker Registry’nin adresini belirtir3. Eğer bu parametre verilmezse, varsayılan olarak Docker Hub’a giriş yapılır3.
Docker login komutunun çıktısı şuna benzer:
Login Succeeded
Bu çıktı, giriş işleminin başarıyla tamamlandığını gösterir.
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ştirir2. Dockerfile, 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.
- Örnek Docker file dosyası vim DockerFile
- FROM centos:7
- RUN yum -y update
- RUN yum -y install nano
- CMD ping -c 10 127.0.0.1
- CMD [“/bin/echo]
- ///////////////////
- docker image build –tag umut .
- FROM ubuntu
- RUN apt-get -y update \
- apt-get -y install nano\
- apt-get -y install httpd
/////////////////////
docker image build -t by-ubuntu .
- FROM nginx
- RUN rm /etc/nginx/nginx.conf /etc/nginx/conf./default.conf
- COPY content /usr/share/nginx/html
- COPY conf /etc/nginx
/////////////////////
- docker image build -t by-nginx .
- docker images
- docker run –name my_nginx -p 80:80 -d nginx
- 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 Registry Oluşturma localde oluştruma
Docker Registry, Docker görüntülerini depolamak ve yönetmek için kullanılan bir servistir. Kendi Docker Registry’nizi localde oluşturmak için aşağıdaki adımları izleyebilirsiniz:
- Öncelikle, docker pull registry komutuyla registry görüntüsünü indirin1.
- Sonra, docker run -d -p 5000:5000 –name <Çalışacak Container Adı> -v /images:/var/lib/registry registry komutuyla registry görüntüsünü arka planda 5000 portunu açarak, imagelarınızı kaybetmemek adına volume oluşturarak container adı belirleyerek çalıştırın2.
- Daha sonra, docker pull ubuntu komutuyla ubuntu görüntüsünü indirin2.
- Ardından, docker image tag ubuntu localhost:5000/benimubuntum komutuyla görüntüyü kendi registry’nize işaret edecek şekilde etiketleyin2.
- Son olarak, docker push localhost:5000/benimubuntum komutuyla görüntüyü kendi registry’nize yükleyin2.
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.
- docker volume create –name test1
- cd /var/lib/docker/volumes/test1/_data
- docker container run -it -v test1:/www/website centos:7 bash
- cd /www/website/
- echo ‘hello’there’ > test.txt
- 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.