Docker MySql Örneği

Docker CLI ile MySql Veritabanı Kurulumu

Deniz TÜRKMEN
4 min readSep 13, 2022

Merhabalar,

Bu yazımda Docker’a MySql container kurulumu inceliycez. Yapacağımız adımlar,

  • MySql container kurulumu,
  • MySql database kurulumu,
  • MySql table kurulumu ve tabloya veri kaydetme(insert) işlemlerinin nasıl yapıldığını öğrencez.

İlk olarak bir tane Mysql containerı ayağa kaldıralım. Bunun için aşağıdaki komutu çalıştıralım.

docker container run --name deniz-mysql --detach --publish 3306:3306 -e MYSQL_ROOT_PASSWORD=secret mysql

MySql containerı ayağa kaldırırken,

  • -e (enviroment) ile veritabanı bağlanacağımız şifreyi belirledik.
  • -d (detach) arka planda çalışmasını sağladık.
  • -p (publish ) mysql çalışacağı portu belirttik. Daha doğrusu tarayıcımızdan erişebilceğimiz port’u belirledik.
  • - name ile de containerımızın adını tanımladık.

Yukarıdaki şekilde görüldüğü gibi “mysql” image local bilgisayarımda olmadığı için ilk önce image indirme işlemi yapıldı.

MySql içerisine iki türlü database, tablo ve insert işlemi yapılabilir.

  1. Yöntem linux Shell ile bir script yazılıp çalıştırabilir.
  2. Yöntem ise containerın içerisine bağlanıp tek tek kurulumları yapabiliriz.
  1. Yöntem: Bunun bir tane db.sh adında dosya oluşturulur.

vim db.sh dosyanın içeriğine bakacak olursak

#!/bin/bash
now=$(date)
echo $nowtouch db.sql
db=”CREATE DATABASE IF NOT EXISTS test;”
usus=”use test;”
tbl=”CREATE TABLE IF NOT EXISTS Person (
id int NOT NULL AUTO_INCREMENT,
adi varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
soyadi varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
telefon varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
date_time varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;”
ins=”INSERT INTO Person (adi, soyadi, telefon, date_time) VALUES(‘Deniz’, ‘TURKMEN’, ‘4567848665’, ‘07072021’);”
echo “Sql Oluşturuluyor…..”
echo $db >> db.sql
echo $usus >> db.sql
echo $tbl >> db.sql
echo $ins >> db.sql
echo use test; >> db.sql
docker exec -i deniz-mysql mysql -uroot -psecret < db.sql
rm -rf *.sql
echo “oluştu….”

Burada bilmemiz gereken docker içindeki mysql veritabanımızı oluşturken ki sıralamayı uygulamamız gerekiyor. Eğer sıralama yanlış olursa database kurulumunu yapmayacaktır.

Diğer bir önemli nokta ise ‘rm -rf *.sql’ komutudur. En son halinde gerekli işlem adımlarını yazdıktan sonra siliyorum. Ama herhangi bir sorun teşkil etmez çünkü database ve tabloyu oluştururken IF NOT EXISTS kullanıyorum. Eğer IF NOT EXISTS kullanmamış olsaydım işlemler bittikten sonra silmem gerekecekti. Silmezseniz dosyanın üzerine her çalıştırdığınızda üst üste yazar ve ‘mysql syntax’ hatası alırsınız.

Çalıştırmak için terminalden

sh db.sh

Daha sonrada container içerisine girip baktığımızda

Scriptimizin doğru bir şekilde çalıştığını görmekteyiz.

2.Yöntem: Bunun için ilk önce oluşturduğumuz containerın içerisine bağlanmamız gerekir. Bunun için çalıştırcağımız komut

docker container exec -it container_name mysql -u root -p -h 127.0.0.1

Aşağıdaki şekilde gözüktüğü gibi containerımızın adı deniz-mysql -h localimdeki hostname bağlanacağımı belirttim. Son olarak ta container ayağa kaldırırken ki verdiğim şifre olan “secret” Enter password kısmına girerek mysql containerıma bağlantı sağladık.

Şimdide yazdığım basit bir database ve tablo işlemleri gerçekleştirelim. Bunun için container içerisine “exec -it” komutu ile giriş yapıyoruz.

CREATE DATABASE DenizDB;
USE DenizDB;
CREATE TABLE `Person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`adi` varchar(128) COLLATE utf8_general_ci NOT NULL,
`soyadi` varchar(128) COLLATE utf8_general_ci NOT NULL,
`telefon` varchar(11) COLLATE utf8_general_ci NOT NULL,
`date_time` varchar(128) COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

Database ismi DenizDB, table ismimiz Person ve Person tablomuzun alanları id, adi, soyadi ,Telefon ve date_time oluşmaktadır. Şimdide mysql bağlı olduğumuz container da bu kodu çalıştıralım.

Görüldüğü üzere database ve tabloyu kaydetti. Şimdide bu database ve tabloyu kontrol edelim. Bunun için ilk önce

show databases;

komutu ile local de olan databaseleri listeleyelim. Burada dikkat etmeniz gereken en önemli nokta “EOF” yani ; ( Noktalı Virgül) ile kullanılan komutu sonlandırmamız gerekir. Eğer komutun sonuna “;” konulmaz ise bizden hala komut girmemizi beklemektedir.

Yukarıdaki şekilde gözüktüğü gibi veri tabanımız oluştu. Şimdide veri tabanımıza giriş yapalım ve içindeki tablomuzu kontrol edelim. Bunun için çalıştıracağımız komut,

use database_name yaniuse DenizDB;show tables;

Görüldüğü gibi tablomuzda oluşmuş. Şimdide basit bir insert komutu çalıştıralım. Bunun için,

INSERT INTO 'Person'(adi,soyadi,telefon,date_time) VALUES ("Deniz","TURKMEN","5321234567","18–06–2021_20–25–3");

Aşağıdaki şekilde gözüktüğü gibi insert işlemimizde başarılı ile gerçekleşmiştir.

Kaydettiğimiz kaydı görüntülemek için kullanacağımız komut

select * from Person;

Kaydımız başarılı bir şekilde Mysql containerımıza insert olmuştur.

--

--

Deniz TÜRKMEN
Deniz TÜRKMEN

Responses (1)