Docker ile Kalıcı Veri Depolama ile MySQL/MariaDB Nasıl Dağıtılır? | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

Docker ile Kalıcı Veri Depolama ile MySQL/MariaDB Nasıl Dağıtılır?

Giriş

Bu eğitimde, kalıcı veri depolama ile Docker kullanarak bir MySQL veya MariaDB veritabanı konteyneri dağıtıyorsunuz. Konteynerlerde veritabanı çalıştırmak, dağıtımı, sürüm kontrolünü ve ortamlar arasında taşınabilirliği basitleştirir. Bu eğitimin sonunda, Docker'da konteynerin dışında güvenli bir şekilde depolanan verilerle çalışan üretime hazır bir MySQL veya MariaDB örneğine sahip olacaksınız.

Ön Koşullar

Hedef kitle: Orta düzey sistem yöneticileri
Tahmini tamamlama süresi: ~30–45 dakika

İşletim Sistemi

  • Ubuntu 24.04 LTS (test edildi)
  • Ayrıca uyumlu: Ubuntu 22.04 LTS, Debian 12 / 13

Yazılım Gereksinimleri

  • Docker 24.0.6 veya daha yeni
  • Docker Compose v2 (modern Docker kurulumlarıyla birlikte gelir)

Docker sürümünüzü kontrol edin:

docker --version

Beklenen çıktı: Docker version 24.0.6, build ed223bc

Docker Compose sürümünü kontrol edin:

docker compose version

Beklenen çıktı: Docker Compose version v5.1.0

Tip

Docker yüklü değilse, 1. Adımda yükleyeceksiniz.

Donanım Gereksinimleri

  • Minimum 2 GB RAM
  • En az 10 GB boş disk alanı

Ağ Gereksinimleri

  • 3306 portu kullanılabilir (varsayılan MySQL/MariaDB portu)
  • Yalnızca harici bağlantılar gerekiyorsa erişime izin verecek şekilde yapılandırılmış bir güvenlik duvarı

İzinler

  • sudo ayrıcalıklarına sahip kök olmayan bir kullanıcı
  • Kullanıcı docker grubuna eklenmiş (önerilir)

Varsayılan Bilgi

  • Temel Docker kavramları (imajlar, konteynerler, hacimler)
  • Komut satırı işlemlerinde rahatlık

Adım 1: Docker'ı Yükleyin ve Doğrulayın

Docker yüklü değilse, yükleyin:

sudo apt update && sudo apt upgrade -y && sudo apt install curl

curl -sSL https://get.docker.com/ | CHANNEL=stable bash

sudo apt install docker-ce docker-compose-plugin -y

Docker'ı etkinleştirin ve başlatın:

sudo systemctl enable docker

sudo systemctl start docker

Docker'ın çalıştığını doğrulayın:

sudo systemctl status docker

Beklenen sonuç: Docker hizmet durumu aktif (çalışıyor) gösterir.

Docker kullanırken sudo kullanmaktan kaçınmak için kullanıcıyı docker grubuna ekleyin:

sudo usermod -aG docker <YOUR_USERNAME>

newgrp docker

Adım 2: Kalıcı Veri Dizini Oluşturun

Bir bağlama montajı, ana sistemden bir dizini doğrudan bir konteynere eşler ve bu dizini konteynerin dosya sisteminde erişilebilir hale getirir.
Veritabanı verileri için bir dizin oluşturun ve uygun izinleri ayarlayın:

mkdir -p ~/mysql-docker/data

chmod 750 ~/mysql-docker/data

Bu dizin, konteynerin dışındaki veritabanı dosyalarını depolayacaktır.

Info

Kalıcı depolama olmadan, konteyner kaldırıldığında tüm veritabanı verileri kaybolur.

Adım 3: Docker Compose Yapılandırması Oluşturun

Proje dizininize gidin:

cd ~/mysql-docker

Bir docker-compose.yml dosyası oluşturun:

nano docker-compose.yml

Aşağıdaki yapılandırmayı ekleyin (MySQL örneği):

services: mysql: image: mysql:8.0.36 container_name: mysql-server restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MYSQL_DATABASE: appdb MYSQL_USER: appuser MYSQL_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql

MariaDB alternatifi — MariaDB tercih ediyorsanız, kullanın:

services: mariadb: image: mariadb:11.3 container_name: mariadb-server restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MARIADB_DATABASE: appdb MARIADB_USER: appuser MARIADB_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql

Info

Önemli: Gerçek şifreleri sürüm kontrolünde asla sabit kodlamayın. Üretimde ortam değişkenlerini veya bir .env dosyasını kullanın. <YOUR_STRONG_USER_PASSWORD> ve <YOUR_STRONG_ROOT_PASSWORD> ile güvenli şifrelerinizi değiştirin.

Adım 4: Veritabanı Konteynerini Başlatın

Çalıştırın:

docker compose up -d

Beklenen çıktı:

  • Docker imajı çeker (eğer daha önce indirilmemişse)
  • Konteyner ayrık modda başlar

Konteyner durumunu doğrulayın:

docker ps

Beklenen çıktı:

CONTAINER ID IMAGE STATUS PORTS abc123def456 mysql:8.0.36 Up 10 seconds 0.0.0.0:3306->3306/tcp

Adım 5: Veritabanı İşlevselliğini Doğrulayın

Konteynere Bağlanın

MySQL konteyneri için çalıştırın:

docker exec -it mysql-server mysql -u root -p

MariaDB konteyneri için çalıştırın:

docker exec -it mariadb-server mysql -u root -p

Kök şifrenizi girin.
Beklenen sonuç: MySQL kabuk istemi görünür: mysql>

Veritabanlarını Kontrol Edin

SHOW DATABASES;

Görmeniz gerekenler:

  • appdb
  • information_schema
  • mysql
  • performance_schema
  • sys

EXIT;

Veri Kalıcılığını Test Edin

Bir test tablosu oluşturun

docker exec -it mysql-server mysql -u root -p

MySQL kabuğunda aşağıdaki komutları girin:

USE appdb;

CREATE TABLE test_table (id INT PRIMARY KEY);

EXIT;

Konteyneri durdurun ve kaldırın

docker compose down

Konteyneri yeniden başlatın

docker compose up -d

Tablonun hala mevcut olduğunu doğrulayın

docker exec -it mysql-server mysql -u root -p

MySQL kabuğunda aşağıdaki komutları girin:

USE appdb;

SHOW TABLES;

Beklenen sonuç: test_table görünür. Bu, kalıcı depolamanın çalıştığını doğrular.

Adım 6: Dağıtımı Güvenli Hale Getirin

Harici Erişimi Kısıtlayın

Veritabanı erişimi yalnızca dahili olarak gerekiyorsa, docker-compose.yml dosyasındaki portları değiştirin:

ports: - "127.0.0.1:3306:3306"

Yeniden başlatın:

docker compose down

docker compose up -d

Info

Önemli: Port 3306'yı kesinlikle gerekli olmadıkça herkese açık hale getirmekten kaçının.

Bir .env Dosyası Kullanın

.env oluşturun:

nano .env

Örnek:

MYSQL_ROOT_PASSWORD=<YOUR_STRONG_ROOT_PASSWORD> MYSQL_PASSWORD=<YOUR_STRONG_USER_PASSWORD>

docker-compose.yml dosyasında referans verin:

environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD}

Doğrulama

Her şeyin doğru çalıştığını şu şekilde doğrulayabilirsiniz:

  • docker ps çalıştırarak — konteyner Çalışıyor
  • MySQL CLI ile bağlanarak — giriş başarılı
  • Konteyneri yeniden başlatarak — veriler kalıcı
  • Günlükleri kontrol ederek: docker logs mysql-server

Beklenen günlük girdileri: "bağlantılar için hazır".

Değişiklikleri Geri Alma

Konteyneri durdurmak ve kaldırmak için:

docker compose down

Kalıcı verileri kaldırmak için:

Info

Önemli: Bu, tüm veritabanı verilerini kalıcı olarak siler.

rm -rf ~/mysql-docker/data

Docker'ı kaldırmak için:

sudo apt remove docker-ce docker-compose-plugin -y

Sorun Giderme

Konteyner Başlatılamıyor

Günlükleri kontrol edin:

docker logs mysql-server

Yaygın nedenler:

  • Zayıf şifre reddedildi
  • Port 3306 zaten kullanılıyor

Port kullanımını kontrol edin:

sudo ss -tulnp | grep 3306

İzin Hataları

Eğer izin reddedildi hataları görüyorsanız:

sudo chown -R 999:999 ~/mysql-docker/data

999 genellikle MySQL konteyner kullanıcı kimliğidir.

Sonuç ve Sonraki Adımlar

MySQL veya MariaDB'yi Docker'da kalıcı depolama ile başarıyla dağıttınız. Veritabanı artık izole bir konteynerde çalışırken verileri ana sistemde güvenli bir şekilde depoluyor.

Sonraki adımlar:

  • Otomatik yedeklemeleri yapılandırın
  • Yüksek kullanılabilirlik için replikasyon uygulayın
  • Uygulama konteynerleriyle entegre edin
  • Prometheus ve Grafana ile izleme ekleyin

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA