Docker ile MySQL Veritabanı Nasıl Kurulur?

Docker, MySQL veritabanı sunucusunun bir container içerisinde çalıştırılmasını sağlayarak veritabanı kurulumunu ve yönetimini kolaylaştırır. Docker kullanılarak MySQL, ana işletim sistemine doğrudan kurulmadan izole bir çalışma ortamında çalıştırılabilir.

Docker ile MySQL kurulumu; web uygulamaları, yazılım geliştirme ortamları, veritabanı testleri ve çok servisli projelerde kullanılmaktadır.

How To Run MySQL in a Docker Container: A Step-by-Step Guide with Customization Tips

Docker ile MySQL Kurulumu Nedir?

Docker ile MySQL kurulumu, MySQL veritabanı sunucusunun Docker Image kullanılarak bir container içerisinde çalıştırılmasıdır.

Geleneksel kurulumlarda MySQL sunucusu işletim sistemine doğrudan yüklenir. Docker kullanımında ise MySQL'in çalışması için gerekli yazılımlar bir Docker imajı üzerinden sağlanır.

Docker ile MySQL kullanımının temel özellikleri şunlardır:

  • MySQL, izole bir container ortamında çalıştırılabilir.

  • Aynı sunucuda farklı MySQL sürümleri kullanılabilir.

  • Veritabanı servisleri bağımsız olarak yönetilebilir.

  • Docker Volume kullanılarak veriler kalıcı olarak saklanabilir.

  • PHP, Python ve Node.js gibi uygulamalarla bağlantı kurulabilir.

  • Docker Compose ile diğer servislerle birlikte çalıştırılabilir.

Docker MySQL Image Nedir?

Docker 安装 MySQL_docker安装mysql-CSDN博客

Docker MySQL Image, MySQL veritabanı sunucusunu çalıştırmak için hazırlanmış bir container imajıdır.

Docker Hub üzerinde MySQL'in farklı sürümlerine ait imajlar bulunur.

Örnek:

docker pull mysql:8.4

Bu komut, MySQL 8.4 sürüm serisine ait Docker imajını indirir.

İndirilen imajları listelemek için:

docker images

Komut çalıştırıldığında yerel sistemde bulunan Docker imajları görüntülenir.

MySQL imajı seçilirken uygulamanın desteklediği veritabanı sürümü dikkate alınmalıdır.

Docker ile MySQL Nasıl Kurulur?

Docker ile MySQL kurulumu için sistemde Docker Engine veya Docker Desktop kurulu ve çalışır durumda olmalıdır.

1. MySQL Image İndirme

Terminal üzerinden aşağıdaki komut çalıştırılır:

docker pull mysql:8.4

Docker, gerekli imaj katmanlarını indirerek yerel sistemde saklar.

2. MySQL Container Oluşturma

MySQL container oluşturmak için:

docker run -d \
  --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=OrnekGucluParola123 \
  -e MYSQL_DATABASE=uygulama \
  -p 127.0.0.1:3306:3306 \
  -v mysql_data:/var/lib/mysql \
  mysql:8.4

Bu komutta:

  • docker run: Yeni container oluşturur ve başlatır.

  • -d: Container'ı arka planda çalıştırır.

  • --name: Container ismini belirler.

  • MYSQL_ROOT_PASSWORD: MySQL root kullanıcısının başlangıç parolasını tanımlar.

  • MYSQL_DATABASE: İlk kurulumda oluşturulacak veritabanını belirtir.

  • -p: MySQL portunu ana bilgisayarın yalnızca yerel ağ arayüzüne bağlar.

  • -v: MySQL verilerinin Docker Volume üzerinde saklanmasını sağlar.

  • mysql:8.4: Kullanılacak MySQL imajıdır.

Örnekteki parola yalnızca gösterim amaçlıdır. Gerçek kurulumlarda güçlü ve benzersiz bir parola kullanılmalıdır.

Bu komut biçimi Linux, macOS ve uygun Unix benzeri terminaller içindir. Windows PowerShell üzerinde çok satırlı komutların yazım biçimi farklıdır.

3. MySQL Container Durumunu Kontrol Etme

Container'ın çalışıp çalışmadığını kontrol etmek için:

docker ps

MySQL container kayıtlarını görüntülemek için:

docker logs mysql-server

MySQL'in ilk başlatılması sırasında veritabanı dosyalarının hazırlanması nedeniyle servisin bağlantı kabul etmeye başlaması biraz zaman alabilir.

4. MySQL Veritabanına Bağlanma

Çalışan MySQL container'ına terminal üzerinden bağlanmak için:

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

Komut çalıştırıldığında MySQL root parolası istenir.

Doğru parola girildiğinde MySQL komut satırı açılır.

Docker MySQL Veritabanı Nasıl Oluşturulur?

MySQL komut satırına bağlandıktan sonra yeni veritabanı oluşturulabilir.

CREATE DATABASE musteriler;

Mevcut veritabanlarını listelemek için:

SHOW DATABASES;

Oluşturulan veritabanını seçmek için:

USE musteriler;

Veritabanı içerisinde tablo oluşturmak için:

CREATE TABLE kullanicilar (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ad VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL UNIQUE
);

Tabloya örnek veri eklemek için:

INSERT INTO kullanicilar (ad, email)
VALUES ('Ahmet', 'ahmet@example.com');

Kaydedilen verileri görüntülemek için:

SELECT * FROM kullanicilar;

Bu işlemler Docker içerisinde çalışan MySQL sunucusu üzerinde gerçekleştirilir.

Docker MySQL Volume Nedir?

Understanding Docker Volumes with a Simple MySQL Example (Hands-On Practice)

Docker Volume, container verilerinin container'ın yaşam döngüsünden bağımsız olarak saklanmasını sağlayan depolama mekanizmasıdır.

MySQL container içerisinde veritabanı dosyaları varsayılan olarak /var/lib/mysql dizininde bulunur.

Docker Volume kullanımı:

docker volume create mysql_data

Volume bilgilerini görüntülemek için:

docker volume inspect mysql_data

Container oluşturulurken volume bağlamak için:

-v mysql_data:/var/lib/mysql

Bu yapılandırma sayesinde MySQL container silinse bile volume silinmediği sürece veritabanı dosyaları korunabilir.

Ancak Docker Volume kullanımı tek başına veritabanı yedeklemesi anlamına gelmez.

Docker Compose ile MySQL Nasıl Kurulur?

Deploy WordPress + MySQL + phpMyAdmin bằng Docker Compose

Docker Compose kullanılarak MySQL ve diğer servisler tek bir yapılandırma dosyası üzerinden yönetilebilir.

1. Proje Klasörü Oluşturma

mkdir docker-mysql
cd docker-mysql

2. Docker Compose Dosyası Hazırlama

Proje klasöründe compose.yaml dosyası oluşturulur.

services:
  mysql:
    image: mysql:8.4
    container_name: mysql-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: uygulama
      MYSQL_USER: uygulama_user
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "127.0.0.1:3307:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Bu yapılandırmada MySQL, Docker Container içerisinde çalıştırılır ve veriler Docker Volume üzerinde saklanır.

3. Ortam Değişkenlerini Tanımlama

Aynı klasörde .env dosyası oluşturulur.

MYSQL_ROOT_PASSWORD=guclu_root_parolasi
MYSQL_PASSWORD=guclu_kullanici_parolasi

Parola değerleri gerçek kullanımda güçlü ve benzersiz değerlerle değiştirilmelidir. .env dosyası Git gibi sürüm kontrol sistemlerine eklenmemelidir.

4. MySQL Servisini Başlatma

docker compose up -d

5. Servis Durumunu Kontrol Etme

docker compose ps

MySQL kayıtlarını görüntülemek için:

docker compose logs mysql

Docker ile MySQL'e PHP Bağlantısı Nasıl Yapılır?

Docker içerisinde çalışan MySQL sunucusuna PHP uygulamaları PDO veya MySQLi aracılığıyla bağlanabilir.

PHP uygulaması aynı Docker Compose ağı içerisindeyse MySQL servis adı bağlantı adresi olarak kullanılabilir.

Örnek PHP bağlantısı:

<?php

$host = "mysql";
$dbname = "uygulama";
$username = "uygulama_user";
$password = getenv("DB_PASSWORD");

try {
    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $username,
        $password,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]
    );

    echo "MySQL bağlantısı başarılı.";

} catch (PDOException $e) {
    error_log($e->getMessage());
    echo "Veritabanına bağlanılamadı.";
}

Bu örnekte PHP container'ına DB_PASSWORD ortam değişkeninin ayrıca tanımlanması gerekir.

PHP ortamında pdo_mysql eklentisinin kurulu olması da gereklidir.

Docker MySQL Veritabanı Nasıl Yedeklenir?

Docker içerisinde çalışan MySQL veritabanı mysqldump aracı kullanılarak yedeklenebilir.

Örnek:

docker exec -i mysql-server mysqldump -u root -p uygulama > uygulama_yedek.sql

Komut çalıştırıldığında MySQL parolası istenir. Ancak bu komutta -i ile standart girdinin bağlı olması ve çıktının dosyaya yönlendirilmesi nedeniyle etkileşimli parola istemi her terminalde uygun çalışmayabilir.

Bu nedenle parola yönetimi için güvenli bir MySQL istemci yapılandırması veya Docker secrets gibi yöntemler tercih edilebilir.

Yedekleme işlemi sırasında oluşan SQL dosyasının içeriği ve komutun başarı durumu kontrol edilmelidir.

Docker MySQL Yönetim Komutları

MySQL container durumunu görüntüleme:

docker ps

MySQL container durdurma:

docker stop mysql-server

MySQL container başlatma:

docker start mysql-server

MySQL container yeniden başlatma:

docker restart mysql-server

MySQL kayıtlarını görüntüleme:

docker logs mysql-server

MySQL container terminaline bağlanma:

docker exec -it mysql-server bash

MySQL container silme:

docker rm mysql-server

Son komut normal koşullarda durmuş bir container'ı siler. Ayrı olarak oluşturulmuş adlandırılmış Docker Volume otomatik olarak silinmez.

Docker MySQL Kullanırken Karşılaşılan Sorunlar

MySQL Container Başlamıyor

Container'ın durumunu kontrol etmek için:

docker ps -a

Hata kayıtlarını incelemek için:

docker logs mysql-server

Yanlış ortam değişkenleri, dosya izinleri, uyumsuz veri dosyaları veya yetersiz sistem kaynakları başlatma sorunlarına neden olabilir.

MySQL Bağlantısı Kurulamıyor

Bağlantı hatalarında aşağıdaki ayarlar kontrol edilmelidir:

  • MySQL container çalışıyor mu?

  • Kullanıcı adı ve parola doğru mu?

  • Bağlanılacak veritabanı mevcut mu?

  • Port yönlendirmesi doğru mu?

  • PHP ve MySQL aynı Docker ağına bağlı mı?

  • MySQL sunucusu bağlantı kabul etmeye hazır mı?

MySQL Verileri Kayboluyor

Container silindikten sonra verilerin korunması için uygun volume yapılandırması kullanılmalıdır.

Örnek:

volumes:
  - mysql_data:/var/lib/mysql

Verilerin korunması için düzenli yedekleme de yapılmalıdır.

Docker ile MySQL Kullanmanın Avantajları

How to Create a Database in MySQL: A Comprehensive Guide

Docker ile MySQL kullanımının temel avantajları şunlardır:

  • MySQL kurulumu container üzerinden gerçekleştirilebilir.

  • Veritabanı servisi diğer uygulamalardan izole edilebilir.

  • Farklı MySQL sürümleri ayrı ortamlarda çalıştırılabilir.

  • Docker Compose ile uygulama servisleri birlikte yönetilebilir.

  • Docker Volume sayesinde kalıcı depolama yapılandırılabilir.

  • Geliştirme ve test ortamları yeniden oluşturulabilir.

  • Veritabanı servisleri Docker komutlarıyla yönetilebilir.

Docker MySQL Güvenliği Nasıl Sağlanır?

Docker içerisinde MySQL kullanılırken güvenlik yapılandırmalarına dikkat edilmelidir.

  • MySQL root hesabı için güçlü parola kullanılmalıdır.

  • Uygulamalar için ayrı ve sınırlı yetkili veritabanı kullanıcıları oluşturulmalıdır.

  • MySQL portu gerekli olmadıkça dış erişime açılmamalıdır.

  • Docker imajları güncel tutulmalıdır.

  • Veritabanı dosyaları kalıcı depolama alanlarında saklanmalıdır.

  • Düzenli veritabanı yedeklemeleri yapılmalıdır.

  • Hassas bilgiler Docker imajlarının içerisine eklenmemelidir.

  • Veritabanı bağlantılarında ihtiyaç duyulduğunda TLS kullanılmalıdır.

Sonuç

Docker ile MySQL kurulumu, veritabanı sunucusunun izole bir container ortamında çalıştırılmasını sağlayan bir yöntemdir.

MySQL imajı Docker Hub üzerinden indirilebilir ve docker run komutuyla çalıştırılabilir. Docker Compose kullanılarak MySQL servisinin yapılandırılması ve diğer uygulamalarla birlikte yönetilmesi sağlanabilir.

Docker Volume kullanımı veritabanı dosyalarının container yaşam döngüsünden bağımsız olarak saklanmasına yardımcı olur.

Docker ile MySQL kullanımı; PHP uygulamaları, web projeleri, yazılım geliştirme ortamları ve veritabanı test sistemlerinde uygulanabilir.

 


Alıntı