sql >> Databáze >  >> RDS >> MariaDB

Jak nasadit server MariaDB do kontejneru Docker

V dnešní době jsou pojmy jako Docker, Obrázky nebo Kontejnery docela běžné ve všech databázových prostředích, takže je normální vidět server MariaDB běžící na Dockeru v produkčním i neprodukčním nastavení. Je však možné, že i když jste tyto pojmy slyšeli, nyní možná znáte rozdíly mezi nimi. V tomto blogu poskytujeme přehled těchto podmínek a jak je můžeme použít v praxi při nasazení serveru MariaDB.

Co je Docker?

Docker je nejběžnější nástroj pro vytváření, nasazování a spouštění aplikací pomocí kontejnerů. Umožňuje vám zabalit aplikaci se všemi částmi, které potřebuje (jako jsou knihovny a další závislosti) a odeslat vše jako jeden balíček, což umožňuje přenosné sdílení kontejnerů mezi různými počítači.

Kontejner vs virtuální počítač

Co je to obrázek?

Související zdroje ClusterControl &Docker MySQL na blogu Docker Series MySQL na Dockeru – Jak vytvořit kontejner pro vaši databázi

Obrázek je jako šablona virtuálního stroje. Obsahuje všechny potřebné informace pro spuštění kontejneru. To zahrnuje operační systém, softwarové balíčky, ovladače, konfigurační soubory a pomocné skripty… vše zabaleno do jednoho balíčku.

Obraz Dockeru může vytvořit kdokoli, kdo má schopnost psát skript. To je důvod, proč komunita vytváří mnoho podobných obrázků, z nichž každý má drobné rozdíly... ale slouží společnému účelu.

Co je to Docker Container?

Kontejner Dockeru je instancí obrazu Dockeru. Ve výchozím nastavení běží zcela izolovaně od hostitelského prostředí a přistupuje pouze k hostitelským souborům a portům, pokud je k tomu nakonfigurován.

Kontejner lze považovat za virtuální stroj, ale místo vytvoření celého virtuálního operačního systému umožňuje aplikacím používat stejné linuxové jádro jako systém, na kterém běží. Vyžaduje pouze, aby byly aplikace dodávány se součástmi, které ještě nejsou spuštěny na hostitelském počítači. To vám poskytne výrazné zvýšení výkonu a sníží velikost aplikace.

Mějte na paměti, že veškeré změny provedené v kontejneru jsou zaznamenány v samostatné vrstvě, nikoli ve stejném Docker Image. To znamená, že pokud kontejner smažete nebo pokud vytvoříte nový založený na stejném Docker Image, změny tam nebudou. Chcete-li zachovat změny, musíte je odeslat do nového obrazu Dockeru nebo vytvořit soubor Docker.

Co je to DockerFile?

DockerFile je skript používaný ke generování obrázku Docker, kde máte kroky k jeho vygenerování na základě jakýchkoli úprav, které chcete použít.

Komponenty dockeru

Podívejme se na příklad souboru 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

Nyní můžeme vytvořit nový Docker Image z tohoto souboru Docker:

$ docker build --rm=true -t severalnines/mariadb-ssh .

Zkontrolujte nově vytvořený obrázek:

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
severalnines/mariadb-ssh                   latest              a8022951f195        17 seconds ago      485MB

A nyní můžeme nový obrázek použít jako společný obrázek Dockeru, jak uvidíme v další sekci.

Několik nines DevOps Průvodce správou databázíZjistěte, co potřebujete vědět k automatizaci a správě vašich databází s otevřeným zdrojovým kódemStáhněte si zdarma

Jak nasadit MariaDB na Docker bez Dockerfile

Nyní, když víme více o světě Docker, pojďme se podívat, jak jej použít k vytvoření serveru MariaDB. Za tímto účelem budeme předpokládat, že již máte nainstalovaný Docker.

Můžeme použít obrázek vytvořený pomocí souboru Dockerfile, ale stáhneme oficiální obrázek MariaDB Docker.

$ docker search mariadb
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   2804                [OK]

Bez zadání TAG se ve výchozím nastavení stáhne nejnovější verze obrázku, v tomto případě MariaDB Server 10.3 na Ubuntu 18.04.

$ docker pull mariadb

Můžeme zkontrolovat stažený obrázek.

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
mariadb                                    latest              e07bb20373d8        2 weeks ago         349MB

Poté vytvoříme dva adresáře v našem adresáři MariaDB Docker, jeden pro datadir a druhý pro konfigurační soubory MariaDB. Obojí přidáme do našeho MariaDB Docker Container.

$ cd ~/Docker
$ mkdir datadir
$ mkdir config

Spouštěcí konfigurace je specifikována v souboru /etc/mysql/my.cnf a zahrnuje všechny soubory nalezené v adresáři /etc/mysql/conf.d, které končí příponou .cnf.

$ tail -1 /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/

Obsah těchto souborů přepíše jakýkoli opakovaný parametr nakonfigurovaný v /etc/mysql/my.cnf, takže zde můžete vytvořit alternativní konfiguraci.

Pojďme spustit náš první MariaDB Docker Container:

$ 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

Poté můžeme zkontrolovat běh našich kontejnerů:

$ 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

Protokol kontejneru:

$ 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

A obsah naší cesty k datovému adresáři Docker (hostitel):

$ 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

Ke kontejneru MariaDB můžeme přistupovat pomocí následujícího příkazu a pomocí hesla zadaného v proměnné MYSQL_ROOT_PASSWORD:

$ docker exec -it mariadb1 bash
[email protected]:/# mysql -p -e "SHOW DATABASES;"
Enter password:
+--------------------+
| Database           |
+--------------------+
| dbtest             |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

Zde můžeme vidět vytvořený náš dbtest.

Příkazy Docker

Nakonec se podívejme na některé užitečné příkazy pro správu Dockeru.

  • Vyhledávání obrázků
    $ docker search Image_Name
  • Stažení obrázku
    $ docker pull Image_Name
  • Seznam nainstalovaných obrázků
    $ docker images
  • Vypsat kontejnery (přidáním příznaku -a můžeme vidět i zastavené kontejnery)
    $ docker ps -a
  • Smazat obrázek Docker
    $ docker rmi Image_Name
  • Smazat kontejner Docker (kontejner musí být zastaven)
    $ docker rm Container_Name
  • Spusťte kontejner z obrázku Docker (přidáním příznaku -p můžeme namapovat port kontejneru na localhost)
    $ docker run -d --name Container_Name -p Host_Port:Guest_Port Image_Name
  • Zastavit kontejner
    $ docker stop Container_Name
  • Spustit kontejner
    $ docker start Container_Name
  • Zkontrolujte protokoly kontejneru
    $ docker logs Container_Name
  • Zkontrolujte informace o kontejneru
    $ docker inspect Container_Name
  • Vytvořte propojený kontejner
    $ docker run -d --name Container_Name --link Container_Name:Image_Name Image_Name
  • Připojte se ke kontejneru z localhost
    $ docker exec -it Container_Name bash
  • Vytvořte kontejner s přidaným svazkem
    $ docker run -d --name Container_Name --volume=/home/docker/Container_Name/conf.d:/etc/mysql/conf.d Image_Name
  • Potvrdit změny nového obrázku
    $ docker commit Container_ID Image_Name:TAG

Závěr

Docker je opravdu užitečný nástroj pro snadné sdílení vývojového prostředí pomocí souboru Dockerfile nebo publikování obrázku Docker. Jeho používáním se můžete ujistit, že všichni používají stejné prostředí. Zároveň je také užitečné znovu vytvořit nebo naklonovat existující prostředí. Docker může sdílet svazky, používat privátní sítě, mapovat porty a ještě více.

V tomto blogu jsme viděli, jak nasadit MariaDB Server na Docker jako samostatný server. Pokud chcete používat složitější prostředí, jako je Replication nebo Galera Cluster, můžete k dosažení této konfigurace použít bitnami/mariadb.


  1. Jsou v databázi přijatelné kruhové odkazy?

  2. Jak získat aktuální čas v SQLite

  3. Nepoužívá se při použití NULL v PostgreSQL stále bitmapa NULL v záhlaví?

  4. Vyberte poslední řádek v MySQL