MariaDB’yi Docker Konteyneri Olarak Kurun ve Çalıştırın

MariaDB’nin Docker kapsayıcısı olarak nasıl kurulup çalıştırılacağına ilişkin temel eğitimimize hoş geldiniz. Docker web sitesine göre “Docker, uygulamaları geliştirmek, göndermek ve çalıştırmak için açık bir platformdur”. Eldeki bir konteyner, uygulamanın bir bilgi işlem ortamından diğerine hızlı ve güvenilir bir şekilde çalışmasını sağlayacak şekilde kodu ve tüm bağımlılıklarını paketleyen standart bir yazılım birimidir. Docker kapsayıcı görüntüsü, bir uygulamayı çalıştırmak için gereken her şeyi içeren hafif, bağımsız, yürütülebilir bir yazılım paketidir: kod, çalışma zamanı, sistem araçları, sistem kitaplıkları ve ayarlar”.

MariaDB’yi Docker Container olarak kurma

Docker Engine’i yükleyin

Devam etmeden önce sisteminize Docker Engine’i yükleyin.

MariaDB Docker Görüntüsünü İndirin

Her liman işçisi konteyneri belirli bir görüntüyü temel alır. Docker görüntüsü, bir kapsayıcıyı çalıştırmak için gereken her şeyi içerir ve dolayısıyla bir uygulamanın nasıl çalıştırılacağını tanımlayan bir dizi talimattır.

Kendi Docker görüntünüzü oluşturabilir veya topluluğun oluşturduğu görüntüleri kullanabilirsiniz. Görüntüleri Docker Hub’da bulabilirsiniz.

Bu eğitimde, topluluğun mevcut Docker görüntülerini kullanacağız.

MariaDB Docker Görüntüsünü arayın

Öncelikle, belirli MariaDB Docker Görüntüsünün adını tanımlamanız gerekir. Docker hub’ında görseli aramak için aşağıdaki komutu çalıştırmanız yeterlidir;

docker search mariadb

Oluşturulmuş bir ton MariaDB görüntüsü alacaksınız;

NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   3572                [OK]                
linuxserver/mariadb                    A Mariadb container, brought to you by Linux…   151                                     
bitnami/mariadb                        Bitnami MariaDB Docker Image                    120                                     [OK]
toughiq/mariadb-cluster                Dockerized Automated MariaDB Galera Cluster …   41                                      [OK]
...

Genellikle öneki olmayan bir görüntü, resmi liman işçisi hub görüntüsü, kararlı ve bakımı yapılan bir görüntü olarak kabul edilir. Ayrıca Resmi sütununda [Tamam] bulunur. Bu nedenle yukarıdaki listeden ilk görseli çekeceğiz.

Docker Hub’dan MariaDB Docker Görüntüsünü İndirin

Docker Görüntüsünü indirmek için docker pull <görüntünün adı> komutunu kullanırsınız. Bu durumda imaj adımız mariadb olur.

docker pull mariadb

Komut, halihazırda mevcut değilse görüntüyü sisteminize indirir.

Varsayılan olarak, bir docker görüntüsünü aldığınızda bunun en son sürümü indirilir. MariaDB Docker Images’ın diğer sürümlerini (örneğin, MariaDB 10.3 Docker Image) indirmeniz gerekiyorsa şu komutu kullanmanız yeterlidir;

docker pull mariadb:10.3

Docker Hub MariaDB sayfasında kullanabileceğiniz çok çeşitli etiketleri görebilirsiniz.

İndirilen Docker Görüntülerini Listeleme

Docker Images komutunu kullanarak yerel olarak mevcut görselleri listeleyebilirsiniz.

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              8075b7694a2d        8 days ago          407MB

En son MariaDB Docker Image’ı indirdik.

MariaDB Docker Container’ı Çalıştırma

Docker imajını yerleştirdikten sonra imaja dayalı bir docker konteyneri oluşturup çalıştırabilirsiniz. docker run <options> <image-name>, Docker kapsayıcılarını çalıştırmak için kullanılan Docker komutudur.

Bir MariaDB kapsayıcısını çalıştırırken aşağıdaki ortam değişkenlerinden birini belirtmeniz gerekir:

  • MYSQL_ROOT_PASSWORD: MariaDB kökü için ayarlanacak şifreyi belirtir (zorunlu).
  • MYSQL_ALLOW_EMPTY_PASSWORD: MariaDB kök kullanıcı hesabı için boş bir parola belirler (isteğe bağlı). Değerleri alır, evet veya hayır
  • MYSQL_RANDOM_ROOT_PASSWORD: MariaDB kök kullanıcı hesabı için rastgele bir parola ayarlar (isteğe bağlı). Değerleri alır, evet veya hayır

Buradaki durumumuzda görselin adı mariadb’dir (en sonuncusu etikettir);

docker run --name mariadbdemo -e MYSQL_ROOT_PASSWORD=password -d mariadb

Yukarıdaki komut temel olarak mevcut en son görüntü sürümüne göre MariaDB Docker kapsayıcısını oluşturur ve çalıştırır (arka planda, -d), MariaDB veritabanı kök parolasını parolaya (-e MYSQL_ROOT_PASSWORD=parola) ve kabın adını mariadbdemo olarak ayarlar. (–name mariadbdemo, adı belirtmezseniz genellikle kaplar için rastgele adlar ayarlanır).

MariaDB Docker Images’ın başka sürümlerine sahipseniz söz konusu imaja dayalı olarak bir kapsayıcıyı çalıştıracak etiketleri belirtebilirsiniz. Örneğin, MariaDB 10.4 imajımız olduğunu ve bu imajı temel alan bir konteyner çalıştırmak istediğimizi varsayarak etiketi mariadb:10.4 olarak belirtebilirsiniz.

 docker run --name mariadbdemo -d -e MYSQL_ROOT_PASSWORD=password mariadb:10.4

Check docker run --help for more options.

Çalışan Container’ları Listeleme

Once you have run a container, you can list them using the docker ps command.

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ce03099cfffa        mariadb             "docker-entrypoint.s…"   43 seconds ago      Up 39 seconds       3306/tcp            mariadbdemo

Çalışan ve durdurulan tüm konteynerleri listelemek için docker ps -a komutunu kullanın.

Yalnızca çalışan konteyner kimliklerini almak için;

docker ps -q

MariaDB Konteyner Günlüklerini Kontrol Etme

docker logs <name-or-container-id> komutunu kullanabilirsiniz;

docker logs mariadbdemo

Veya

docker logs ce03099cfffa

MariaDB Docker Container’a Erişim

MariaDB liman işçisi konteyneriniz artık arka planda çalışıyor. Şu şekilde erişebilirsiniz:

  • Launching the interactive shell of the container
  • Logging into MariaDB Docker container using mysql client from your host via the docker network.

MariaDB docker kapsayıcısı için etkileşimli bir bash kabuğu başlatmak için docker exec -it <kapsayıcının adı|kapsayıcı kimliği> <kabuk>’u kullanın.

docker exec -it mariadbdemo bash

Bu sizi konteyner etkileşimli bash kabuğuna götürür;

root@9f26c99c35a5:/#

Ana makinenizdeki mysql istemcisini kullanarak MariaDB kapsayıcınıza da giriş yapabilirsiniz.

Bunun için MySQL istemcisini kurmanız gerekmektedir. Örneğin Ubuntu sistemlerinde şu komutu çalıştırarak MySQL istemcisini kurabilirsiniz:

apt install mysql-client

Daha sonra MariaDB kapsayıcınıza atanan IP adresini alın. Konteynerin IP adresini almak için, konteyner hakkında tüm ayrıntıları sağlayan docker inspect <container-of-the-container-id> komutunu kullanın.

docker inspect mariadbdemo | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

Bu durumda MariaDB konteynerimize 172.17.0.2 IP adresi atanır.

Konteynerimize bağlanmak amacıyla MySQL host istemcisini kullanmak için;

mysql -u root -p -h 172.17.0.2

Komut, kabın varsayılan bağlantı noktası olan 3306’yı dinlediğini varsayar.

Yukarıdaki Container’ı çalıştırırken MYSQL_ROOT_PASSWORD değişkeni ile belirlediğiniz şifreyi kullanmanız gerekecektir.

Enter password: password
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.5-10.5.4-MariaDB-1:10.5.4+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Kabuk içinde artık MariaDB’nizi bir ana bilgisayarda çalıştırırken yaptığınız gibi yönetebilirsiniz.

NOT: Liman işçisi konteynerinize atanan IP adresi dinamiktir ve konteyneri yeniden başlatırsanız liman işçisi ağı içinde ona yeni/farklı bir IP adresi atanacaktır.

MariaDB Docker Container’a Dışarıdan Erişme

MariaDB konteynerinde çalışan veritabanınıza erişmesi gereken bazı harici uygulamalarınız varsa, konteyner bağlantı noktasını ana bilgisayar sistemi aracılığıyla harici kullanıma açmanız gerekir. Varsayılan olarak kapsayıcıya yalnızca ana bilgisayar sisteminden erişilebilir

Örneğin, MariaDB kapsayıcımız varsayılan bağlantı noktası 3306’yı dinliyor.

MariaDB bağlantı noktası için ana makinenizdeki dinleme bağlantı noktalarını kontrol ederseniz herhangi bir bağlantı noktası bulamazsınız;

ss -altnp | grep 3306

Bir konteyner portunu ortaya çıkarmak için docker çalıştırma seçeneklerini kullanın, -p <ana bilgisayar-bağlantı noktası>:<konteyner-bağlantı noktası>. Aynı bağlantı noktasını kullanan ana bilgisayar aracılığıyla MariaDB konteyner bağlantı noktası 3306’yı kullanıma sunmak için aşağıdaki örnek komuta bakın;

docker run --name mariadbdemoport -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb

Kapsayıcı için aynı adları kullanmanız gerekiyorsa, mevcut kapsayıcıyı durdurup kaldırın ve aynı adı kullanarak yeni kapsayıcıyı yeniden başlatın.

Bağlantı noktası açıklığını doğrulayalım

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
3489ce131cce        mariadb             "docker-entrypoint.s…"   4 minutes ago       Up 2 seconds        0.0.0.0:3306->3306/tcp   mariadbdemoport
ce03099cfffa        mariadb             "docker-entrypoint.s…"   About an hour ago   Up 40 seconds       3306/tcp                 mariadbdemo

PORTS sütununu kontrol ederseniz, yeni konteynerimiz için konteyner portunun ana makinedeki 3306 numaralı portta açık olduğunu ve tüm arayüzleri dinlediğini fark edeceksiniz;

Ana bilgisayarın IP adresini belirtmeniz gerekiyorsa, -p ana bilgisayar-IP-adresi:Bağlantı Noktası:<kapsayıcı-bağlantı noktası> komutunu kullanın.

Ana bilgisayardaki dinleme bağlantı noktalarının tekrar kontrol edilmesi;

ss -altnp | grep 3306
LISTEN   0        4096                   *:3306                *:*

Konteyner bağlantı noktasını dinamik bir ana bilgisayar bağlantı noktasıyla eşlemeniz gerekiyorsa bu seçeneği kullanın;

-p <container-port>
docker run --name mariadbdemo-dport -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
bee9f036aedd        mariadb             "docker-entrypoint.s…"   8 seconds ago       Up 3 seconds        0.0.0.0:32768->3306/tcp   mariadbdemo-dport
3489ce131cce        mariadb             "docker-entrypoint.s…"   12 minutes ago      Up 7 minutes        0.0.0.0:3306->3306/tcp    mariadbdemoport
ce03099cfffa        mariadb             "docker-entrypoint.s…"   About an hour ago   Up 8 minutes        3306/tcp                  mariadbdemo

Gördüğünüz gibi konteyner limanı dinamik port 32768’de gösteriliyor.

Docker port komutunu kullanarak konteyner portunun hangi dinamik porta eşlendiğini her zaman bulabilirsiniz;

docker port mariadbdemo-dport
3306/tcp -> 0.0.0.0:32768

MariaDB Docker Container için Kalıcı Veri Birimini Ayarlama

Bir konteyner kaldırıldığında, iç hacimlerine yazdığı tüm veriler de kaldırılır. Verilerin kapsayıcı silme işlemleri sırasında kalıcı olmasını sağlamak için, MariaDB Docker kapsayıcısının iç birimini bazı ana bilgisayar dizinleriyle eşleyebilirsiniz.

Dahili bir Docker birimini harici bir ana bilgisayar birimine bağlamak için docker run komutunun -v <ana bilgisayar dizini>:<kapsayıcı dizini> seçeneğini kullanın.

MariaDB kapsayıcısının varsayılan veri dizini /var/lib/mysql’dir.

Örneğin, kapsayıcı verilerinin ana dizinim /opt/mariadb/data’ya yazılmasını istersem, önce dizini oluşturun ve -v seçeneğini kullanarak veri dizinlerini eşleyen bir kapsayıcı çalıştırın.

mkdir -p /opt/mariadb/data
docker run --name mariadbdemo-volume -v /opt/mariadb/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mariadb

Bu nedenle, konteyner veri dizinine (/var/lib/mysql) yazılan herhangi bir konteyner verisi, aynı anda /opt/mariadb/data ana bilgisayarındaki veri dizinine de yazılacaktır.

Durdur, Duraklat, Yeniden Başlat Docker Konteynerini Kaldırma

Çalışan bir kapsayıcıyı durdurmak için docker stop komutunu kullanın;

docker stop [option] <name|id>
docker stop mariadbdemo

Kimliklerini kullanarak tüm konteynerleri durdurabilirsiniz;

docker stop $(docker ps -q)

Bir kapla işiniz bittiğinde onu çıkarmayı seçebilirsiniz;

docker rm [option] <name|id>
docker rm mariadbdemo

Kaldırmayı zorlamak için;

docker rm --force mariadbdemo

Konteyneri duraklatmak için;

docker pause mariadbdemo

Yeniden başlatmak için;

docker restart mariadbdemo

Docker hacimlerini listelemek için;

docker volume ls

Docker inspect komutunu kullanarak belirli docker konteyner hacmini bulun.

Belirli birimi kaldırın;

docker volume rm volume-name

 

 

 

Yazının orijinalini buradan okuyabilirsiniz.