MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak wdrożyć serwer MariaDB w kontenerze Docker

Obecnie terminy takie jak Docker, Obrazy lub Kontenery są dość powszechne we wszystkich środowiskach baz danych, więc normalne jest, że serwer MariaDB działa na Dockerze zarówno w konfiguracjach produkcyjnych, jak i nieprodukcyjnych. Możliwe jest jednak, że chociaż słyszeliście te terminy, teraz możecie znać różnice między nimi. W tym blogu przedstawiamy omówienie tych warunków i sposobu, w jaki możemy je zastosować w praktyce, aby wdrożyć serwer MariaDB.

Co to jest Docker?

Docker to najpopularniejsze narzędzie do tworzenia, wdrażania i uruchamiania aplikacji przy użyciu kontenerów. Pozwala spakować aplikację ze wszystkimi potrzebnymi jej częściami (takimi jak biblioteki i inne zależności) i wysłać ją jako jeden pakiet, umożliwiając przenośne udostępnianie kontenerów na różnych komputerach.

Kontener a maszyna wirtualna

Co to jest obraz?

Powiązane zasoby ClusterControl i Docker MySQL na platformie Docker Blog Series MySQL na platformie Docker — jak konteneryzować bazę danych

Obraz jest jak szablon maszyny wirtualnej. Posiada wszystkie wymagane informacje do uruchomienia kontenera. Obejmuje to system operacyjny, pakiety oprogramowania, sterowniki, pliki konfiguracyjne i skrypty pomocnicze… wszystko spakowane w jeden pakiet.

Obraz Dockera może zbudować każdy, kto ma umiejętność pisania skryptu. Dlatego społeczność tworzy wiele podobnych obrazów, z których każdy ma niewielkie różnice... ale służy wspólnemu celowi.

Co to jest kontener Dockera?

Kontener Docker jest instancją obrazu Docker. Domyślnie działa całkowicie odizolowane od środowiska hosta, uzyskując dostęp do plików i portów hosta tylko wtedy, gdy jest to skonfigurowane.

Kontener można uznać za maszynę wirtualną, ale zamiast tworzyć cały wirtualny system operacyjny, umożliwia aplikacjom korzystanie z tego samego jądra Linuksa, co system, na którym działają. Wymaga jedynie dostarczenia aplikacji z częściami, które nie są jeszcze uruchomione na komputerze-hoście. Zapewnia to znaczny wzrost wydajności i zmniejsza rozmiar aplikacji.

Pamiętaj, że wszelkie zmiany wprowadzone w kontenerze są rejestrowane na osobnej warstwie, a nie w tym samym obrazie Docker. Oznacza to, że jeśli usuniesz kontener lub utworzysz nowy na podstawie tego samego obrazu Docker, zmiany tam nie będą. Aby zachować zmiany, musisz je zatwierdzić w nowym obrazie Docker lub utworzyć plik Docker.

Co to jest plik DockerFile?

DockerFile to skrypt używany do generowania obrazu Docker, w którym masz kroki, aby go wygenerować na podstawie wszelkich modyfikacji, które chcesz zastosować.

Komponenty Dockera

Zobaczmy przykład pliku 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

Teraz możemy zbudować nowy obraz Docker z tego pliku Docker:

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

Sprawdź nowo utworzony obraz:

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

A teraz możemy użyć nowego obrazu jako zwykłego obrazu Docker, jak zobaczymy w następnej sekcji.

Manynines DevOps Przewodnik po zarządzaniu bazami danychDowiedz się, co musisz wiedzieć, aby zautomatyzować i zarządzać bazami danych typu open sourcePobierz za darmo

Jak wdrożyć MariaDB na platformie Docker bez pliku Docker

Teraz, gdy wiemy więcej o świecie Dockera, zobaczmy, jak wykorzystać go do stworzenia serwera MariaDB. W tym celu zakładamy, że masz już zainstalowany Docker.

Możemy użyć obrazu utworzonego za pomocą pliku Dockerfile, ale pobierzemy oficjalny obraz dockera MariaDB.

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

Bez określania TAG, domyślnie pobierze najnowszą wersję obrazu, w tym przypadku MariaDB Server 10.3 na Ubuntu 18.04.

$ docker pull mariadb

Możemy sprawdzić pobrany obraz.

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

Następnie utworzymy dwa katalogi w naszym katalogu MariaDB Docker, jeden na datadir, a drugi na pliki konfiguracyjne MariaDB. Dodamy oba w naszym kontenerze docker MariaDB.

$ cd ~/Docker
$ mkdir datadir
$ mkdir config

Konfiguracja startowa jest określona w pliku /etc/mysql/my.cnf i zawiera wszystkie pliki znalezione w katalogu /etc/mysql/conf.d, które kończą się na .cnf.

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

Zawartość tych plików zastąpi każdy powtarzający się parametr skonfigurowany w /etc/mysql/my.cnf, więc możesz tutaj utworzyć alternatywną konfigurację.

Uruchommy nasz pierwszy kontener docker MariaDB:

$ 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

Następnie możemy sprawdzić, czy nasze kontenery działają:

$ 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

Dziennik kontenera:

$ 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

I zawartość naszej ścieżki datadir Docker (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

Możemy uzyskać dostęp do kontenera MariaDB, uruchamiając następujące polecenie i używając hasła określonego w zmiennej MYSQL_ROOT_PASSWORD:

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

Tutaj możemy zobaczyć nasz utworzony dbtest.

Polecenia dokowane

Na koniec zobaczmy kilka przydatnych poleceń do zarządzania Dockerem.

  • Wyszukiwanie grafiki
    $ docker search Image_Name
  • Pobieranie obrazu
    $ docker pull Image_Name
  • Wymień zainstalowane obrazy
    $ docker images
  • Wyświetl kontenery (dodając flagę -a widzimy również zatrzymane kontenery)
    $ docker ps -a
  • Usuń obraz Docker
    $ docker rmi Image_Name
  • Usuń kontener Dockera (kontener musi zostać zatrzymany)
    $ docker rm Container_Name
  • Uruchom kontener z obrazu Docker (dodając flagę -p możemy mapować port kontenera na localhost)
    $ docker run -d --name Container_Name -p Host_Port:Guest_Port Image_Name
  • Zatrzymaj kontener
    $ docker stop Container_Name
  • Uruchom kontener
    $ docker start Container_Name
  • Sprawdź dzienniki kontenera
    $ docker logs Container_Name
  • Sprawdź informacje o kontenerze
    $ docker inspect Container_Name
  • Utwórz połączony kontener
    $ docker run -d --name Container_Name --link Container_Name:Image_Name Image_Name
  • Połącz się z kontenerem z hosta lokalnego
    $ docker exec -it Container_Name bash
  • Utwórz kontener z dodanym woluminem
    $ docker run -d --name Container_Name --volume=/home/docker/Container_Name/conf.d:/etc/mysql/conf.d Image_Name
  • Zatwierdź zmiany w nowym obrazie
    $ docker commit Container_ID Image_Name:TAG

Wniosek

Docker to naprawdę przydatne narzędzie do łatwego udostępniania środowiska programistycznego za pomocą pliku Dockerfile lub publikowania obrazu Docker. Korzystając z niego, możesz mieć pewność, że wszyscy korzystają z tego samego środowiska. Jednocześnie przydatne jest również odtworzenie lub klonowanie istniejącego środowiska. Docker może udostępniać woluminy, korzystać z prywatnych sieci, mapować porty, a nawet więcej.

W tym blogu zobaczyliśmy, jak wdrożyć MariaDB Server na platformie Docker jako samodzielny serwer. Jeśli chcesz użyć bardziej złożonego środowiska, takiego jak Replication lub Galera Cluster, możesz użyć bitnami/mariadb, aby osiągnąć tę konfigurację.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uruchomić POKAŻ LOKALIZACJE w MariaDB

  2. Prosty sposób na wdrożenie klastra MySQL Galera w AWS

  3. Jak FIELD() działa w MariaDB

  4. MariaDB CURRENT_USER() Objaśnienie

  5. Najczęstsze problemy z MHA i sposoby ich rozwiązywania