Saat ini, istilah seperti Docker, Gambar, atau Kontainer cukup umum di semua lingkungan basis data, jadi wajar saja jika server MariaDB berjalan di Docker baik dalam penyiapan produksi maupun non-produksi. Namun, mungkin saja Anda pernah mendengar istilah-istilah tersebut, sekarang Anda mungkin mengetahui perbedaan di antara mereka. Di blog ini, kami memberikan ikhtisar tentang persyaratan ini dan bagaimana kami dapat menerapkannya dalam praktik untuk menerapkan server MariaDB.
Apa itu Docker?
Docker adalah alat paling umum untuk membuat, menyebarkan, dan menjalankan aplikasi dengan menggunakan wadah. Ini memungkinkan Anda untuk mengemas aplikasi dengan semua bagian yang dibutuhkannya (seperti perpustakaan dan dependensi lainnya) dan mengirimkan semuanya sebagai satu paket, memungkinkan berbagi kontainer portabel di berbagai mesin.
Kontainer vs Mesin VirtualApa itu Gambar?
Referensi terkait ClusterControl &Docker MySQL di Seri Blog Docker MySQL di Docker - Cara Menampung Database AndaGambar seperti template mesin virtual. Ia memiliki semua informasi yang diperlukan untuk menjalankan container. Ini termasuk sistem operasi, paket perangkat lunak, driver, file konfigurasi, dan skrip pembantu… semuanya dikemas menjadi satu bundel.
Gambar Docker dapat dibangun oleh siapa saja yang memiliki kemampuan untuk menulis skrip. Itulah sebabnya ada banyak citra serupa yang dibangun oleh komunitas, masing-masing dengan perbedaan kecil...tetapi memiliki tujuan yang sama.
Apa itu Kontainer Docker?
Wadah Docker adalah turunan dari Gambar Docker. Ini berjalan sepenuhnya terisolasi dari lingkungan host secara default, hanya mengakses file dan port host jika dikonfigurasi untuk melakukannya.
Wadah dapat dianggap sebagai mesin virtual, tetapi alih-alih membuat keseluruhan sistem operasi virtual, wadah ini memungkinkan aplikasi untuk menggunakan kernel Linux yang sama dengan sistem yang mereka jalankan. Ini hanya membutuhkan aplikasi untuk dikirimkan dengan bagian yang belum berjalan di komputer host. Ini memberi Anda peningkatan kinerja yang signifikan dan mengurangi ukuran aplikasi.
Ingatlah bahwa setiap perubahan yang dilakukan pada penampung dicatat pada lapisan terpisah, bukan pada Gambar Docker yang sama. Ini berarti jika Anda menghapus penampung, atau jika Anda membuat penampung baru berdasarkan Gambar Docker yang sama, perubahan tidak akan ada. Untuk mempertahankan perubahan, Anda harus memasukkannya ke dalam Gambar Docker baru atau membuat File Docker.
Apa itu DockerFile?
DockerFile adalah skrip yang digunakan untuk menghasilkan Gambar Docker di mana Anda memiliki langkah-langkah untuk membuatnya berdasarkan modifikasi apa pun yang ingin Anda terapkan.
Komponen DockerMari kita lihat contoh File Docker.
$ vi Dockerfile
# MariaDB 10.3 with SSH
# Pull the mariadb latest image
FROM mariadb:latest
# List all the packages that we want to install
ENV PACKAGES openssh-server openssh-client
# Install Packages
RUN apt-get update && apt-get install -y $PACKAGES
# Allow SSH Root Login
RUN sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
# Configure root password
RUN echo "root:root123" | chpasswd
Sekarang, kita dapat membuat Gambar Docker baru dari File Docker ini:
$ docker build --rm=true -t severalnines/mariadb-ssh .
Periksa gambar baru yang dibuat:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
severalnines/mariadb-ssh latest a8022951f195 17 seconds ago 485MB
Dan sekarang, kita dapat menggunakan gambar baru sebagai Gambar Docker umum seperti yang akan kita lihat di bagian selanjutnya.
Panduan Manynines DevOps untuk Manajemen DatabasePelajari tentang apa yang perlu Anda ketahui untuk mengotomatisasi dan mengelola database open source AndaUnduh GratisCara Menyebarkan MariaDB di Docker Tanpa Dockerfile
Sekarang setelah kita mengetahui lebih banyak tentang dunia Docker, mari kita lihat cara menggunakannya untuk membuat server MariaDB. Untuk ini, kami akan menganggap Anda sudah menginstal Docker.
Kami dapat menggunakan gambar yang dibuat dengan menggunakan Dockerfile, tetapi kami akan menarik Gambar Docker MariaDB resmi.
$ docker search mariadb
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mariadb MariaDB is a community-developed fork of MyS… 2804 [OK]
Tanpa menentukan TAG, secara default, itu akan menarik versi gambar terbaru, dalam hal ini, MariaDB Server 10.3 di Ubuntu 18.04.
$ docker pull mariadb
Kami dapat memeriksa gambar yang diunduh.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb latest e07bb20373d8 2 weeks ago 349MB
Kemudian, kami akan membuat dua direktori di bawah direktori MariaDB Docker kami, satu untuk datadir dan satu lagi untuk file konfigurasi MariaDB. Kami akan menambahkan keduanya di MariaDB Docker Container kami.
$ cd ~/Docker
$ mkdir datadir
$ mkdir config
Konfigurasi startup ditentukan dalam file /etc/mysql/my.cnf, dan ini mencakup semua file yang ditemukan di direktori /etc/mysql/conf.d yang diakhiri dengan .cnf.
$ tail -1 /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/
Isi file ini akan menimpa parameter berulang yang dikonfigurasi di /etc/mysql/my.cnf, sehingga Anda dapat membuat konfigurasi alternatif di sini.
Mari kita jalankan MariaDB Docker Container pertama kita:
$ docker run -d --name mariadb1 \
-p 33061:3306 \
-v ~/Docker/mariadb1/config:/etc/mysql/conf.d \
-v ~/Docker/mariadb1/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=dbtest \
mariadb
Setelah ini, kita dapat memeriksa container kita berjalan:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12805cc2d7b5 mariadb "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:33061->3306/tcp mariadb1
Log penampung:
$ docker logs mariadb1
MySQL init process done. Ready for start up.
2019-06-03 23:18:01 0 [Note] mysqld (mysqld 10.3.15-MariaDB-1:10.3.15+maria~bionic) starting as process 1 ...
2019-06-03 23:18:01 0 [Note] InnoDB: Using Linux native AIO
2019-06-03 23:18:01 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-06-03 23:18:01 0 [Note] InnoDB: Uses event mutexes
2019-06-03 23:18:01 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-06-03 23:18:01 0 [Note] InnoDB: Number of pools: 1
2019-06-03 23:18:01 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-06-03 23:18:01 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
2019-06-03 23:18:01 0 [Note] InnoDB: Completed initialization of buffer pool
2019-06-03 23:18:01 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2019-06-03 23:18:01 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-06-03 23:18:01 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-06-03 23:18:01 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2019-06-03 23:18:02 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2019-06-03 23:18:02 0 [Note] InnoDB: Waiting for purge to start
2019-06-03 23:18:02 0 [Note] InnoDB: 10.3.15 started; log sequence number 1630824; transaction id 21
2019-06-03 23:18:02 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-06-03 23:18:02 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-06-03 23:18:02 0 [Note] Server socket created on IP: '::'.
2019-06-03 23:18:02 0 [Note] InnoDB: Buffer pool(s) load completed at 190603 23:18:02
2019-06-03 23:18:02 0 [Note] Reading of all Master_info entries succeded
2019-06-03 23:18:02 0 [Note] Added new Master_info '' to hash table
2019-06-03 23:18:02 0 [Note] mysqld: ready for connections.
Version: '10.3.15-MariaDB-1:10.3.15+maria~bionic' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution
Dan isi dari jalur datadir Docker kami (host):
$ ls -l ~/Docker/mariadb1/datadir/
total 249664
-rw-rw---- 1 sinsausti staff 16384 Jun 3 20:18 aria_log.00000001
-rw-rw---- 1 sinsausti staff 52 Jun 3 20:18 aria_log_control
drwx------ 3 sinsausti staff 96 Jun 3 20:18 dbtest
-rw-rw---- 1 sinsausti staff 976 Jun 3 20:18 ib_buffer_pool
-rw-rw---- 1 sinsausti staff 50331648 Jun 3 20:18 ib_logfile0
-rw-rw---- 1 sinsausti staff 50331648 Jun 3 20:17 ib_logfile1
-rw-rw---- 1 sinsausti staff 12582912 Jun 3 20:18 ibdata1
-rw-rw---- 1 sinsausti staff 12582912 Jun 3 20:18 ibtmp1
-rw-rw---- 1 sinsausti staff 0 Jun 3 20:17 multi-master.info
drwx------ 92 sinsausti staff 2944 Jun 3 20:18 mysql
drwx------ 3 sinsausti staff 96 Jun 3 20:17 performance_schema
-rw-rw---- 1 sinsausti staff 24576 Jun 3 20:18 tc.log
Kita dapat mengakses wadah MariaDB dengan menjalankan perintah berikut dan menggunakan kata sandi yang ditentukan dalam variabel MYSQL_ROOT_PASSWORD:
$ docker exec -it mariadb1 bash
[email protected]:/# mysql -p -e "SHOW DATABASES;"
Enter password:
+--------------------+
| Database |
+--------------------+
| dbtest |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
Di sini kita dapat melihat dbtest kita dibuat.
Perintah Docker
Terakhir, mari kita lihat beberapa perintah yang berguna untuk mengelola Docker.
- Pencarian gambar
$ docker search Image_Name
- Unduhan gambar
$ docker pull Image_Name
- Daftar gambar yang dipasang
$ docker images
- Mendaftar container (menambahkan flag -a kita juga dapat melihat container yang dihentikan)
$ docker ps -a
- Menghapus Gambar Docker
$ docker rmi Image_Name
- Menghapus Kontainer Docker (kontainer harus dihentikan)
$ docker rm Container_Name
- Jalankan container dari Docker Image (dengan menambahkan flag -p kita dapat memetakan port container ke localhost)
$ docker run -d --name Container_Name -p Host_Port:Guest_Port Image_Name
- Stop container
$ docker stop Container_Name
- Mulai container
$ docker start Container_Name
- Periksa log penampung
$ docker logs Container_Name
- Periksa informasi container
$ docker inspect Container_Name
- Buat wadah yang ditautkan
$ docker run -d --name Container_Name --link Container_Name:Image_Name Image_Name
- Hubungkan ke wadah dari localhost
$ docker exec -it Container_Name bash
- Buat wadah dengan volume yang ditambahkan
$ docker run -d --name Container_Name --volume=/home/docker/Container_Name/conf.d:/etc/mysql/conf.d Image_Name
- Melakukan perubahan pada gambar baru
$ docker commit Container_ID Image_Name:TAG
Kesimpulan
Docker adalah alat yang sangat berguna untuk berbagi lingkungan pengembangan dengan mudah menggunakan Dockerfile atau menerbitkan Gambar Docker. Dengan menggunakannya, Anda dapat memastikan bahwa semua orang menggunakan lingkungan yang sama. Pada saat yang sama juga berguna untuk membuat ulang atau mengkloning lingkungan yang ada. Docker dapat berbagi volume, menggunakan jaringan pribadi, port peta, dan banyak lagi.
Di blog ini, kami melihat cara menggunakan Server MariaDB di Docker sebagai server mandiri. Jika Anda ingin menggunakan lingkungan yang lebih kompleks seperti Replication atau Galera Cluster, Anda dapat menggunakan bitnami/mariadb untuk mencapai konfigurasi ini.