MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Cara Menyebarkan Server MariaDB ke Wadah Docker

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 Virtual

Apa itu Gambar?

Referensi terkait ClusterControl &Docker MySQL di Seri Blog Docker MySQL di Docker - Cara Menampung Database Anda

Gambar 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 Docker

Mari 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 Gratis

Cara 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TAMPILKAN TABEL di MariaDB

  2. Cara Mengatur Replikasi Asinkron Antara Cluster MariaDB Galera

  3. Menjalankan ProxySQL sebagai Wadah Pembantu di Kubernetes

  4. MariaDB CURRENT_TIMESTAMP() Dijelaskan

  5. MariaDB MaxScale Load Balancing di Docker:Deployment:Bagian Satu