MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách triển khai máy chủ MariaDB vào vùng chứa Docker

Ngày nay, các thuật ngữ như Docker, Hình ảnh hoặc Vùng chứa khá phổ biến trong tất cả các môi trường cơ sở dữ liệu, vì vậy việc thấy máy chủ MariaDB chạy trên Docker trong cả thiết lập sản xuất và phi sản xuất là điều bình thường. Tuy nhiên, có thể bạn đã nghe các thuật ngữ này, nhưng bây giờ bạn có thể biết sự khác biệt giữa chúng. Trong blog này, chúng tôi cung cấp tổng quan về các điều khoản này và cách chúng tôi có thể áp dụng chúng vào thực tế để triển khai máy chủ MariaDB.

Docker là gì?

Docker là công cụ phổ biến nhất để tạo, triển khai và chạy các ứng dụng bằng cách sử dụng vùng chứa. Nó cho phép bạn đóng gói một ứng dụng với tất cả các phần nó cần (chẳng hạn như thư viện và các phần phụ thuộc khác) và gửi tất cả thành một gói, cho phép chia sẻ di động các vùng chứa trên các máy khác nhau.

Vùng chứa so với Máy ảo

Hình ảnh là gì?

Các tài nguyên liên quan ClusterControl &Docker MySQL trên Docker Blog Series MySQL trên Docker - Cách chứa cơ sở dữ liệu của bạn

An Image giống như một mẫu máy ảo. Nó có tất cả các thông tin cần thiết để chạy vùng chứa. Điều này bao gồm hệ điều hành, gói phần mềm, trình điều khiển, tệp cấu hình và tập lệnh trình trợ giúp… tất cả được đóng gói thành một gói.

Một hình ảnh Docker có thể được xây dựng bởi bất kỳ ai có khả năng viết kịch bản. Đó là lý do tại sao có rất nhiều hình ảnh giống nhau được cộng đồng xây dựng, mỗi hình ảnh có những điểm khác biệt nhỏ ... nhưng đều phục vụ một mục đích chung.

Vùng chứa Docker là gì?

Docker Container là một ví dụ của Docker Image. Theo mặc định, nó chạy hoàn toàn biệt lập với môi trường máy chủ, chỉ truy cập các tệp và cổng máy chủ nếu được định cấu hình để làm như vậy.

Một vùng chứa có thể được coi là một máy ảo, nhưng thay vì tạo ra toàn bộ hệ điều hành ảo, nó cho phép các ứng dụng sử dụng cùng một nhân Linux với hệ thống mà chúng đang chạy. Nó chỉ yêu cầu các ứng dụng được vận chuyển cùng với các bộ phận chưa chạy trên máy tính chủ. Điều này giúp bạn tăng hiệu suất đáng kể và giảm kích thước của ứng dụng.

Hãy nhớ rằng bất kỳ thay đổi nào được thực hiện đối với vùng chứa đều được ghi lại trên một lớp riêng biệt, không phải trong cùng một Hình ảnh Docker. Điều này có nghĩa là nếu bạn xóa vùng chứa hoặc nếu bạn tạo một vùng chứa mới dựa trên cùng một Hình ảnh Docker, các thay đổi sẽ không có ở đó. Để duy trì các thay đổi, bạn phải chuyển nó vào một Hình ảnh Docker mới hoặc tạo một Tệp Docker.

DockerFile là gì?

DockerFile là một tập lệnh được sử dụng để tạo Hình ảnh Docker trong đó bạn có các bước để tạo hình ảnh đó dựa trên bất kỳ sửa đổi nào mà bạn muốn áp dụng.

Thành phần Docker

Hãy xem ví dụ về Tệp 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

Bây giờ, chúng ta có thể tạo một Hình ảnh Docker mới từ Tệp Docker này:

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

Kiểm tra hình ảnh mới được tạo:

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

Và bây giờ, chúng ta có thể sử dụng hình ảnh mới làm Hình ảnh Docker thông thường như chúng ta sẽ thấy trong phần tiếp theo.

Somenines DevOps Guide to Management DatabaseTìm hiểu về những điều bạn cần biết để tự động hóa và quản lý cơ sở dữ liệu nguồn mở của mìnhTải xuống miễn phí

Cách triển khai MariaDB trên Docker mà không cần Dockerfile

Bây giờ chúng ta đã biết thêm về thế giới Docker, hãy xem cách sử dụng nó để tạo máy chủ MariaDB. Đối với điều này, chúng tôi sẽ giả sử bạn đã cài đặt Docker.

Chúng tôi có thể sử dụng hình ảnh được tạo bằng cách sử dụng Dockerfile, nhưng chúng tôi sẽ lấy Hình ảnh Docker MariaDB chính thức.

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

Theo mặc định, nếu không chỉ định TAG, nó sẽ kéo phiên bản hình ảnh mới nhất, trong trường hợp này là MariaDB Server 10.3 trên Ubuntu 18.04.

$ docker pull mariadb

Chúng tôi có thể kiểm tra hình ảnh đã tải xuống.

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

Sau đó, chúng tôi sẽ tạo hai thư mục trong thư mục MariaDB Docker, một cho datadir và một cho các tệp cấu hình MariaDB. Chúng tôi sẽ thêm cả hai vào Vùng chứa MariaDB Docker của mình.

$ cd ~/Docker
$ mkdir datadir
$ mkdir config

Cấu hình khởi động được chỉ định trong tệp /etc/mysql/my.cnf và nó bao gồm bất kỳ tệp nào được tìm thấy trong thư mục /etc/mysql/conf.d kết thúc bằng .cnf.

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

Nội dung của các tệp này sẽ ghi đè bất kỳ thông số lặp lại nào được định cấu hình trong /etc/mysql/my.cnf, vì vậy bạn có thể tạo cấu hình thay thế tại đây.

Hãy chạy Vùng chứa MariaDB Docker đầu tiên của chúng ta:

$ 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

Sau đó, chúng tôi có thể kiểm tra các vùng chứa của mình đang chạy:

$ 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

Nhật ký vùng chứa:

$ 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

Và nội dung của đường dẫn dữ liệu Docker của chúng tôi (máy chủ):

$ 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

Chúng tôi có thể truy cập vùng chứa MariaDB bằng cách chạy lệnh sau và sử dụng mật khẩu được chỉ định trong biến MYSQL_ROOT_PASSWORD:

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

Tại đây, chúng ta có thể thấy dbtest đã được tạo.

Lệnh Docker

Cuối cùng, hãy xem một số lệnh hữu ích để quản lý Docker.

  • Tìm kiếm hình ảnh
    $ docker search Image_Name
  • Tải xuống hình ảnh
    $ docker pull Image_Name
  • Liệt kê các hình ảnh được cài đặt
    $ docker images
  • Liệt kê các vùng chứa (thêm cờ -a, chúng tôi cũng có thể thấy các vùng chứa đã dừng)
    $ docker ps -a
  • Xóa Hình ảnh Docker
    $ docker rmi Image_Name
  • Xóa vùng chứa Docker (vùng chứa phải được dừng lại)
    $ docker rm Container_Name
  • Chạy vùng chứa từ Hình ảnh Docker (thêm cờ -p, chúng tôi có thể ánh xạ một cổng vùng chứa tới localhost)
    $ docker run -d --name Container_Name -p Host_Port:Guest_Port Image_Name
  • Dừng vùng chứa
    $ docker stop Container_Name
  • Bắt đầu vùng chứa
    $ docker start Container_Name
  • Kiểm tra nhật ký vùng chứa
    $ docker logs Container_Name
  • Kiểm tra thông tin vùng chứa
    $ docker inspect Container_Name
  • Tạo một vùng chứa được liên kết
    $ docker run -d --name Container_Name --link Container_Name:Image_Name Image_Name
  • Kết nối với vùng chứa từ localhost
    $ docker exec -it Container_Name bash
  • Tạo vùng chứa có thêm khối lượng
    $ docker run -d --name Container_Name --volume=/home/docker/Container_Name/conf.d:/etc/mysql/conf.d Image_Name
  • Cam kết các thay đổi đối với một hình ảnh mới
    $ docker commit Container_ID Image_Name:TAG

Kết luận

Docker là một công cụ thực sự hữu ích để chia sẻ môi trường phát triển một cách dễ dàng bằng cách sử dụng Dockerfile hoặc xuất bản Docker Image. Bằng cách sử dụng nó, bạn có thể đảm bảo rằng mọi người đang sử dụng cùng một môi trường. Đồng thời, nó cũng hữu ích để tạo lại hoặc sao chép môi trường hiện có. Docker có thể chia sẻ khối lượng, sử dụng mạng riêng, cổng bản đồ, v.v.

Trong blog này, chúng tôi đã xem cách triển khai Máy chủ MariaDB trên Docker như một máy chủ độc lập. Nếu bạn muốn sử dụng một môi trường phức tạp hơn như Replication hoặc Galera Cluster, bạn có thể sử dụng bitnami / mariadb để đạt được cấu hình này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng mycli và Học MariaDB / MySQL một cách thoải mái trong một thiết bị đầu cuối!

  2. Cách ASIN () hoạt động trong MariaDB

  3. Cách cài đặt MariaDB trên Rocky Linux và AlmaLinux

  4. Mở khóa các lợi ích của Chương trình liên kết được chứng nhận của MariaDB

  5. MariaDB JSON_DEPTH () Giải thích