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.