Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

Bu örneğimizde MySQL verilerini container yerine, ana sistemde bulunan bir klasörde tutacağız. Bu şekilde istediğiniz kadar containeri silip tekrar yaratabilirsiniz ama verileriniz hiçbir zaman kaybolmayacaktır.

Dockerfile


FROM ubuntu:16.04

COPY entrypoint.sh /usr/local/bin/entrypoint.sh

RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server \
&& sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf \
&& chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

VOLUME ["/var/lib/mysql"]

EXPOSE 3306

CMD ["mysqld_safe"]

entrypoint.sh


#!/bin/bash
set -e

mkdir /var/run/mysqld
chown -R mysql:mysql /var/run/mysqld /var/lib/mysql

if [ ! -f /var/lib/mysql/ibdata1 ]; then
mysqld --initialize-insecure;
fi

exec "$@"

.dockerignore


data/*

Folder structure


ubuntu@linux:~$ ls -la

-rw-rw-r-- 1 ubuntu ubuntu 378 Jan 24 20:02 Dockerfile
-rw-rw-r-- 1 ubuntu ubuntu 8 Jan 24 20:02 .dockerignore
-rw-rw-r-- 1 ubuntu ubuntu 185 Jan 24 20:02 entrypoint.sh

İmaj yaratma


ubuntu@linux:~$ docker build -t mysql_image .

Container yaratma


ubuntu@linux:~$ docker run -i -t -d -v `pwd`/data:/var/lib/mysql --name mysql_container mysql_image

Aşağıda da gördüğümüz gibi data klasörü yaratıldı ve MySQL verileri içine atılmış durumda.


ubuntu@linux:~$ ls -l

drwxr-xr-x 5 _apt input 4096 Jan 24 17:28 data

ubuntu@linux:~$ ls -l data/

-rw-r----- 1 _apt input 56 Jan 24 17:28 auto.cnf
-rw-r----- 1 _apt input 420 Jan 24 17:28 ib_buffer_pool
-rw-r----- 1 _apt input 12582912 Jan 24 17:28 ibdata1
-rw-r----- 1 _apt input 50331648 Jan 24 17:28 ib_logfile0
-rw-r----- 1 _apt input 50331648 Jan 24 17:28 ib_logfile1
-rw-r----- 1 _apt input 12582912 Jan 24 17:28 ibtmp1
drwxr-x--- 2 _apt input 4096 Jan 24 17:28 mysql
drwxr-x--- 2 _apt input 4096 Jan 24 17:28 performance_schema
drwxr-x--- 2 _apt input 12288 Jan 24 17:28 sys

Test


Eğer containere girip veritabanları, tablolar, kullanıcılar vs. yarattığınız zaman, bilgilerin hepsi ana sistemde görünebilir vaziyette olacaktır. Container'i silip tekrar yaratsanız bile bilgileriniz kaybolmayacaktır. Sonuçta kaybolan hiçbir şey olmayacak.