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, với những khác biệt nhỏ nhưng thực sự phục vụ một mục đích chung. Một hình ảnh vùng chứa tốt (và phổ biến) phải có tài liệu được viết tốt với các giải thích rõ ràng, một kho lưu trữ được duy trì tích cực và có các bản cập nhật thường xuyên. Hãy xem bài đăng trên blog này nếu bạn muốn tìm hiểu cách xây dựng và xuất bản hình ảnh Docker của riêng mình cho MySQL hoặc bài đăng trên blog này nếu bạn chỉ muốn tìm hiểu những điều cơ bản về cách chạy MySQL trên Docker.
Trong bài đăng trên blog này, chúng ta sẽ xem xét một số hình ảnh Docker phổ biến nhất để chạy máy chủ MySQL hoặc MariaDB của chúng tôi. Hình ảnh chúng tôi đã chọn là hình ảnh công cộng có mục đích chung, ít nhất có thể chạy dịch vụ MySQL. Một số trong số chúng bao gồm các ứng dụng không thiết yếu liên quan đến MySQL, trong khi những ứng dụng khác chỉ đóng vai trò là một phiên bản mysqld đơn giản. Danh sách ở đây dựa trên kết quả của Docker Hub, thư viện và cộng đồng lớn nhất thế giới về hình ảnh vùng chứa.
TLDR
Bảng sau đây tóm tắt các tùy chọn khác nhau:
Khía cạnh | MySQL (Docker) | MariaDB (Docker) | Percona (Docker) | MySQL (Oracle) | MySQL / MariaDB (CentOS) | MariaDB (Bitnami) |
---|---|---|---|---|---|---|
Tải xuống | 10 triệu + | 10 triệu + | 10 triệu + | 10 triệu + | 10 triệu + | 10 triệu + |
Trung tâm Docker | mysql | mariadb | percona | mysql / mysql-server | mysql-80-centos7 mysql-57-centos7 mysql-56-centos7 mysql-55-centos7 mariadb-102-centos7 mariadb-101-centos7 | bitnami / mariadb |
Trang dự án | mysql | mariadb | percona-docker | mysql-docker | mysql-container | bitnami-docker-mariadb |
Hình ảnh cơ sở | Debian 9 | Ubuntu 18.04 (bionic) Ubuntu 14.04 (trusty) | CentOS 7 | Oracle Linux 7 | RHEL 7 CentOS 7 | Debian 9 (minideb) Oracle Linux 7 |
Các phiên bản cơ sở dữ liệu được hỗ trợ | 5,5 5,6 5,7 8,0 | 5.5 10.0 10.1 10.2 10.3 10.4 | 5,6 5,7 8,0 | 5,5 5,6 5,7 8,0 | 5.5 5.6 5.7 8.0 10.1 10.2 | 10.1 10.2 10.3 |
Nền tảng được hỗ trợ | x86_64 | x86 x86_64 arm64v8 ppc64le | x86 x86_64 | x86_64 | x86_64 | x86_64 |
Kích thước hình ảnh (thẻ:mới nhất) | 129 MB | 120 MB | 193 MB | 99 MB | 178 MB | 87 MB |
Cam kết đầu tiên | Ngày 18 tháng 5 năm 2014 | Ngày 16 tháng 11 năm 2014 | Ngày 3 tháng 1 năm 2016 | Ngày 18 tháng 5 năm 2014 | Ngày 15 tháng 2 năm 2015 | Ngày 17 tháng 5 năm 2015 |
Người đóng góp | 18 | 9 | 15 | 14 | 30 | 20 |
Github Star | 1267 | 292 | 113 | 320 | 89 | 152 |
Github Fork | 1291 | 245 | 121 | 1291 ** | 146 | 71 |
Lấy từ trang Docker Hub.
Được phân tách từ dự án MySQL docker.
mysql (Docker)
Các hình ảnh được xây dựng và duy trì bởi cộng đồng Docker với sự trợ giúp của nhóm MySQL. Nó có thể được coi là hình ảnh máy chủ MySQL công khai phổ biến nhất được lưu trữ trên Docker Hub và là một trong những hình ảnh sớm nhất trên thị trường (lần cam kết đầu tiên là ngày 18 tháng 5 năm 2014). Nó đã được fork ~ 1300 lần với 18 người đóng góp tích cực. Nó hỗ trợ phiên bản Docker xuống 1.6 trên cơ sở nỗ lực hết sức. Tại thời điểm viết bài này, tất cả các phiên bản chính của MySQL đều được hỗ trợ - 5.5, 5.6, 5.7 và 8.0 chỉ trên kiến trúc x86_64.
Hầu hết các hình ảnh MySQL được xây dựng bởi những người khác được lấy cảm hứng từ cách hình ảnh này được xây dựng. Hình ảnh MariaDB, Percona và MySQL Server (Oracle) tuân theo một biến môi trường tương tự, cấu trúc tệp cấu hình và luồng quy trình khởi tạo vùng chứa.
Các biến môi trường sau đây có sẵn trên hầu hết các hình ảnh vùng chứa MySQL trên Docker Hub:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_ONETIME_PASSWORD
Kích thước hình ảnh (thẻ:mới nhất) trung bình nhỏ (129MB), dễ sử dụng, được bảo trì tốt và cập nhật thường xuyên. Nếu ứng dụng của bạn yêu cầu vùng chứa cơ sở dữ liệu MySQL mới nhất, thì đây là hình ảnh công khai được đề xuất nhiều nhất mà bạn có thể sử dụng.
mariadb (Docker)
Các hình ảnh được duy trì bởi cộng đồng Docker với sự giúp đỡ của nhóm MariaDB. Nó sử dụng cùng một kiểu cấu trúc xây dựng như hình ảnh mysql (Docker), nhưng nó đi kèm với hỗ trợ nhiều kiến trúc:
- Linux x86-64 (amd64)
- ARMv8 64-bit (arm64v8)
- x86 / i686 (i386)
- IBM POWER8 (ppc64le)
Tại thời điểm viết bài này, hình ảnh hỗ trợ MariaDB phiên bản 5.5 cho đến 10.4, trong đó hình ảnh có kích thước thẻ "mới nhất" là khoảng 120MB. Hình ảnh này phục vụ như một hình ảnh có mục đích chung và tuân theo các hướng dẫn, biến môi trường và cấu trúc tệp cấu hình dưới dạng mysql (Docker). Hầu hết các ứng dụng yêu cầu MySQL làm chương trình phụ trợ cơ sở dữ liệu thường tương thích với MariaDB, vì cả hai đều sử dụng cùng một giao thức.
Máy chủ MariaDB từng là một nhánh của MySQL nhưng bây giờ nó đã được chuyển hướng khỏi nó. Về thiết kế kiến trúc cơ sở dữ liệu, một số phiên bản MariaDB không tương thích 100% và không còn là bản thay thế thả xuống với các phiên bản MySQL tương ứng của chúng. Kiểm tra trang này để biết chi tiết. Tuy nhiên, có nhiều cách để di chuyển giữa nhau bằng cách sử dụng sao lưu hợp lý. Nói một cách đơn giản, rằng một khi bạn đã ở trong hệ sinh thái MariaDB, bạn có thể phải gắn bó với nó. Kết hợp hoặc chuyển đổi giữa MariaDB và MySQL trong một cụm không được khuyến nghị.
Nếu bạn muốn thiết lập thiết lập MariaDB nâng cao hơn (sao chép, Galera, sharding), có những hình ảnh khác được xây dựng để đạt được mục tiêu đó dễ dàng hơn nhiều, ví dụ:bitnami / mariadb như được giải thích thêm.
percona (Docker)
Percona Server là một nhánh của MySQL do Percona tạo ra. Đây là những hình ảnh Percona Server Docker chính thức duy nhất, được tạo và duy trì bởi nhóm Percona. Nó hỗ trợ cả kiến trúc x86 và x86_64 và hình ảnh dựa trên CentOS 7. Percona chỉ duy trì 3 phiên bản MySQL chính mới nhất cho hình ảnh vùng chứa - 5.6, 5.7 và 8.0.
Kho lưu trữ mã chỉ ra rằng cam kết đầu tiên là ngày 3 tháng 1 năm 2016 với 15 cộng tác viên tích cực, chủ yếu là từ nhóm phát triển Percona. Máy chủ Percona cho MySQL đi kèm với công cụ lưu trữ XtraDB (bản thay thế cho InnoDB) và tuân theo rất chặt chẽ các bản phát hành Oracle MySQL ngược dòng (bao gồm tất cả các bản sửa lỗi trong đó) với một số tính năng bổ sung như công cụ lưu trữ MyRocks, TokuDB cũng như của Percona sửa lỗi riêng. Theo một cách nào đó, bạn có thể coi nó như một phiên bản cải tiến của Oracle’s MySQL. Bạn có thể dễ dàng chuyển đổi giữa các hình ảnh Máy chủ MySQL và Percona, miễn là bạn đang chạy trên phiên bản tương thích.
Hình ảnh nhận ra hai biến môi trường bổ sung cho TokuDB và RocksDB cho MySQL (khả dụng kể từ v5.6):
- INIT_TOKUDB - Đặt thành 1 để cho phép khởi động vùng chứa với công cụ lưu trữ TOKUDB được bật.
- INIT_ROCKSDB - Đặt thành 1 để cho phép khởi động vùng chứa với công cụ lưu trữ ROCKSDB được kích hoạt.
mysql-server (Oracle)
Kho lưu trữ được phân nhánh từ nhóm Docker từ mysql. Các hình ảnh được tạo, duy trì và hỗ trợ bởi nhóm MySQL tại Oracle được xây dựng dựa trên hình ảnh cơ sở của Oracle Linux 7. Hình ảnh MySQL 8.0 đi kèm với Máy chủ cộng đồng MySQL (tối thiểu) và MySQL Shell và máy chủ được định cấu hình để hiển thị giao thức X trên cổng 33060 từ kho lưu trữ tối thiểu. Gói tối thiểu được thiết kế để sử dụng bởi các hình ảnh Docker chính thức cho MySQL. Nó cắt bỏ một số phần không cần thiết của MySQL như innochecksum, myisampack, mysql_plugin, nhưng nếu không thì nó là cùng một sản phẩm. Do đó, nó có một dấu vết hình ảnh rất nhỏ, khoảng 99 MB.
Một điểm quan trọng cần lưu ý là các hình ảnh có tập lệnh kiểm tra sức khỏe được tích hợp sẵn, rất tiện dụng cho một số người đang cần logic tính khả dụng chính xác. Nếu không, mọi người phải viết lệnh HEALTHCHECK của Docker tùy chỉnh (hoặc tập lệnh) để kiểm tra tình trạng của vùng chứa.
mysql-xx-centos7 &mariadb-xx-centos7 (CentOS)
Các hình ảnh vùng chứa được xây dựng và duy trì bởi nhóm CentOS, bao gồm máy chủ cơ sở dữ liệu MySQL cho OpenShift và sử dụng chung. Đối với hình ảnh dựa trên RHEL, bạn có thể lấy chúng từ Danh mục vùng chứa của Red Hat trong khi hình ảnh dựa trên CentOS được lưu trữ công khai tại Docker Hub trên các trang khác nhau cho mọi phiên bản chính (chỉ liệt kê những hình ảnh có hơn 10 triệu lượt tải xuống):
- MySQL 8.0:https://hub.docker.com/r/centos/mysql-80-centos7
- MySQL 5.7:https://hub.docker.com/r/centos/mysql-57-centos7
- MySQL 5.6:https://hub.docker.com/r/centos/mysql-56-centos7
- MySQL 5.5:https://hub.docker.com/r/centos/mysql-55-centos7
- MariaDB 10.2:https://hub.docker.com/r/centos/mariadb-102-centos7
- MariaDB 10.1:https://hub.docker.com/r/centos/mariadb-101-centos7
Cấu trúc hình ảnh có một chút khác biệt và nó không sử dụng thẻ hình ảnh như những người khác, do đó tên hình ảnh dài hơn một chút. Đã nói rằng, bạn phải truy cập đúng trang Docker Hub để tải phiên bản chính mà bạn muốn lấy.
Theo trang kho lưu trữ mã, 30 cộng tác viên đã cộng tác trong dự án kể từ ngày 15 tháng 2 năm 2015. Nó hỗ trợ MySQL 5.5 cho đến 8.0 và MariaDB 5.5 cho đến 10.2 chỉ cho kiến trúc x86_64. Nếu bạn dựa nhiều vào cơ sở hạ tầng chứa Red Hat như OpenShift, đây có lẽ là những hình ảnh phổ biến nhất hoặc được duy trì tốt cho MySQL và MariaDB.
Các biến môi trường sau đây ảnh hưởng đến tệp cấu hình MySQL / MariaDB và chúng đều là tùy chọn:
- MYSQL_LOWER_CASE_TABLE_NAMES (mặc định:0)
- MYSQL_MAX_CONNECTIONS (mặc định:151)
- MYSQL_MAX_ALLOWED_PACKET (mặc định:200 triệu)
- MYSQL_FT_MIN_WORD_LEN (mặc định:4)
- MYSQL_FT_MAX_WORD_LEN (mặc định:20)
- MYSQL_AIO (mặc định:1)
- MYSQL_TABLE_OPEN_CACHE (mặc định:400)
- MYSQL_KEY_BUFFER_SIZE (mặc định:32 triệu hoặc 10% bộ nhớ khả dụng)
- MYSQL_SORT_BUFFER_SIZE (mặc định:256K)
- MYSQL_READ_BUFFER_SIZE (mặc định:8 triệu hoặc 5% bộ nhớ khả dụng)
- MYSQL_INNODB_BUFFER_POOL_SIZE (mặc định:32 triệu hoặc 50% bộ nhớ khả dụng)
- MYSQL_INNODB_LOG_FILE_SIZE (mặc định:8 triệu hoặc 15% bộ nhớ khả dụng)
- MYSQL_INNODB_LOG_BUFFER_SIZE (mặc định:8 triệu hoặc 15% bộ nhớ khả dụng)
- MYSQL_DEFAULTS_FILE (mặc định:/etc/my.cnf)
- MYSQL_BINLOG_FORMAT (mặc định:câu lệnh)
- MYSQL_LOG_QUERIES_ENABLED (mặc định:0)
Hình ảnh hỗ trợ tự động điều chỉnh MySQL khi hình ảnh MySQL đang chạy với bộ tham số --memory và nếu bạn không chỉ định giá trị cho các tham số sau, giá trị của chúng sẽ được tự động tính toán dựa trên bộ nhớ khả dụng:
- MYSQL_KEY_BUFFER_SIZE (mặc định:10%)
- MYSQL_READ_BUFFER_SIZE (mặc định:5%)
- MYSQL_INNODB_BUFFER_POOL_SIZE (mặc định:50%)
- MYSQL_INNODB_LOG_FILE_SIZE (mặc định:15%)
- MYSQL_INNODB_LOG_BUFFER_SIZE (mặc định:15%)
bitnami / mariadb
Các hình ảnh được xây dựng và duy trì bởi Bitnami, các chuyên gia đóng gói phần mềm trong triển khai ảo hoặc đám mây. Hình ảnh được phát hành hàng ngày với các gói phân phối mới nhất có sẵn và sử dụng hình ảnh dựa trên Debian tối giản được gọi là minideb. Do đó, kích thước hình ảnh cho thẻ mới nhất là nhỏ nhất trong số tất cả là khoảng 87MB. Dự án có 20 cộng tác viên với cam kết đầu tiên xảy ra vào ngày 17 tháng 5 năm 2015. Tại thời điểm viết bài này, nó chỉ hỗ trợ MariaDB 10.1 cho đến 10.3.
Một tính năng nổi bật của hình ảnh này là khả năng triển khai thiết lập MariaDB có tính khả dụng cao thông qua các biến môi trường Docker. Có thể dễ dàng thiết lập cụm sao chép chủ-nô lệ MariaDB thời gian chết bằng hình ảnh Bitnami MariaDB Docker bằng cách sử dụng các biến môi trường sau:
- MARIADB_REPLICATION_MODE:Chế độ sao chép. Giá trị có thể có master / slave. Không có giá trị mặc định.
- MARIADB_REPLICATION_USER:Người dùng sao chép được tạo trên bản chính trong lần chạy đầu tiên. Không có giá trị mặc định.
- MARIADB_REPLICATION_PASSWORD:Mật khẩu của người dùng sao chép. Không có giá trị mặc định.
- MARIADB_MASTER_HOST:Tên máy chủ / IP của bản sao chính (tham số phụ). Không có giá trị mặc định.
- MARIADB_MASTER_PORT_NUMBER:Cổng máy chủ của bản sao chính (tham số phụ). Mặc định là 3306.
- MARIADB_MASTER_ROOT_USER:Người dùng trên bản sao chính có quyền truy cập vào MARIADB_DATABASE (tham số phụ). Mặc định là root
- MARIADB_MASTER_ROOT_PASSWORD:Mật khẩu của người dùng trên bản sao chính có quyền truy cập
- MARIADB_DATABASE (tham số phụ). Không có giá trị mặc định.
Trong một cụm sao chép, bạn có thể có một chủ và không có hoặc nhiều nô lệ. Khi kích hoạt sao chép, nút chính ở chế độ đọc-ghi, trong khi các nút ở chế độ chỉ đọc. Để có hiệu suất tốt nhất, bạn nên giới hạn việc đọc cho các nô lệ.
Ngoài ra, những hình ảnh này cũng hỗ trợ triển khai trên Kubernetes dưới dạng Biểu đồ Helm. Bạn có thể đọc thêm về các bước cài đặt trong kho lưu trữ Bitnami MariaDB Chart GitHub.
Kết luận
Có rất nhiều hình ảnh máy chủ MySQL đã được cộng đồng đóng góp và chúng tôi không thể trình bày hết ở đây. Hãy nhớ rằng những hình ảnh này phổ biến vì chúng được xây dựng cho mục đích chung. Một số hình ảnh ít phổ biến hơn có thể thực hiện nhiều nội dung nâng cao hơn, như điều phối vùng chứa cơ sở dữ liệu, khởi động tự động và chia tỷ lệ tự động. Các hình ảnh khác nhau cung cấp các cách tiếp cận khác nhau có thể được sử dụng để giải quyết các vấn đề khác.