Hướng dẫn này giải thích phương pháp từng bước để thiết lập và sử dụng bộ chứa MySQL Docker với các ví dụ
Docker là một nền tảng điều phối vùng chứa cho phép chúng tôi chạy hình ảnh của bất kỳ ứng dụng nào [trong trường hợp này là máy chủ MySQL] trên hệ thống máy chủ [có thể hoạt động trong mọi hệ điều hành được cài đặt – ví dụ. Linux, Windows, MacOS, v.v.]
Sử dụng MySQL với docker sẽ giúp nhà phát triển hoặc bất kỳ ai muốn tìm hiểu hoặc thử nghiệm với MySQL mà không gặp rắc rối về bất kỳ cài đặt hoặc cấu hình nào
Chạy qua docker chỉ cần bạn cài đặt docker trong máy của mình, sau đó bạn có thể sử dụng các hình ảnh docker có sẵn của MySQL
=> Nhấp vào đây để xem toàn bộ loạt bài hướng dẫn về MySQL
Bạn sẽ học được gì
Hiểu về MySQL Docker
Chạy MySQL với bộ chứa Docker là một cơ chế được sử dụng rộng rãi, đặc biệt đối với kiến trúc vi dịch vụ, nơi thông thường mỗi vi dịch vụ hoạt động với cơ sở dữ liệu/bảng riêng và các thử nghiệm thành phần/tích hợp riêng biệt có thể được thực thi trên các phiên bản cơ sở dữ liệu được chứa trong bộ chứa
Khái niệm vùng chứa MySQL
Hãy nghĩ về bộ chứa docker như một máy ảo nhẹ có thể chạy độc lập với bất kỳ ứng dụng nào khác [và có thể sống trong ngữ cảnh của chính nó]. Bất kỳ ứng dụng nào – ví dụ: MySQL, trong trường hợp này, có thể được nhóm lại với nhau dưới dạng một bộ chứa và có thể được triển khai trên máy chủ cục bộ hoặc máy chủ từ xa
Giờ đây, vùng chứa này là một hệ sinh thái nhỏ và có tất cả các thành phần được kết hợp với nhau để MySQL thực thi đúng cách
Điều kiện tiên quyết. Cài đặt Docker
Để tạo MySQL làm bộ chứa docker, máy chủ phải cài đặt docker
>> Đề xuất đọc để cài đặt Docker=> Cài đặt và giới thiệu về Docker
Để xác thực cài đặt docker, chỉ cần chạy lệnh bên dưới
docker version
Nếu đầu ra hiển thị như bên dưới, điều này có nghĩa là quá trình cài đặt docker đã thành công
Các bước thiết lập MySQL với Docker
#1] Kéo hình ảnh docker mong muốn
Hình ảnh Docker cho MySQL có thể được lấy từ trung tâm docker. Chúng tôi sẽ lấy hình ảnh mới nhất của máy chủ mysql từ trung tâm docker trong ví dụ của chúng tôi. Docker container image được xuất bản thông qua các nguồn chính thức trên docker hub
>> Bấm vào đây để tìm tất cả các hình ảnh/phiên bản docker có sẵn của MySQL
Trừ khi một phiên bản cụ thể được yêu cầu, chúng tôi luôn có thể chỉ định thẻ là 'mới nhất', thẻ này sẽ lấy phiên bản MySQL mới nhất hiện có từ sổ đăng ký trung tâm docker thường được gọi là trung tâm docker
Cú pháp kéo hình ảnh docker
docker pull mysql:latest
Sau khi thực hiện, bạn sẽ thấy đầu ra như bên dưới
Khi hình ảnh vùng chứa được tải xuống đầy đủ trên máy chủ, bạn có thể xem tất cả các hình ảnh đã tải xuống bằng cách chạy lệnh bên dưới
docker image ls
#2] Bắt đầu vùng chứa với hình ảnh được kéo
Bây giờ, hãy bắt đầu một vùng chứa bằng hình ảnh docker đã tải xuống cho MySQL.
Theo mặc định, nếu không có mật khẩu gốc nào được chỉ định cùng với lệnh docker trong khi tạo vùng chứa, thì sẽ có một mật khẩu ngẫu nhiên được tạo cho người dùng gốc và để tìm nạp mật khẩu gốc, chúng ta cần phải .
a] Trước tiên hãy chạy vùng chứa với hình ảnh đã tải xuống
cú pháp
docker run --name {optional-name-for-the-container} -d {name of the image tag}
Trong cú pháp trên,
- –name là một trường tùy chọn và có thể được sử dụng để chỉ định một tên thân thiện mà vùng chứa có thể được gọi sau này. Nếu điều này không được chỉ định - Docker gán tên được tạo ngẫu nhiên cho vùng chứa
- -d đại diện cho tên của hình ảnh mà vùng chứa được tạo. Nếu hình ảnh đã được kéo trước đó, hình ảnh tương tự sẽ được sử dụng lại. Nếu hình ảnh không tồn tại trên hệ thống cục bộ, thì trước tiên, điều này sẽ kéo hình ảnh từ trung tâm docker và sau đó tạo vùng chứa
Ví dụ. Chúng ta sẽ tạo một thùng chứa có tên learn-mysql-docker từ thẻ hình ảnh đã sử dụng trước đó – mysql. muộn nhất
docker run --name learn-mysql-docker -d mysql:latest -e MYSQL_RANDOM_ROOT_PASSWORD=1
Lưu ý việc sử dụng cờ -e, không có gì khác ngoài việc chỉ định một biến môi trường. Ở đây chúng tôi đã chỉ định giá trị cho MYSQL_RANDOM_ROOT_PASSWORD=1
Điều này có nghĩa là trong khi khởi động máy chủ MySQL, mật khẩu gốc sẽ được đặt thành Chuỗi được tạo ngẫu nhiên [sau này chúng ta sẽ xem trong phần tiếp theo, cách chúng ta có thể truy xuất mật khẩu ngẫu nhiên được tạo động đó thông qua nhật ký bộ chứa Docker]
Ghi chú. Cũng có các tùy chọn khác cho cài đặt mặc định của mật khẩu gốc
Các tùy chọn có sẵn như sau
- Chỉ định mật khẩu tùy chỉnh. Sử dụng biến môi trường có tên MYSQL_ROOT_PASSWORD và đặt nó thành mật khẩu mong muốn cho người dùng root
- Nhận mật khẩu ngẫu nhiên được tạo. Sử dụng biến môi trường có tên MYSQL_RANDOM_ROOT_PASSWORD và đặt giá trị thành 1
- Đặt mật khẩu trống cho người dùng root. Sử dụng biến môi trường có tên MYSQL_ALLOW_EMPTY_PASSWORD và đặt giá trị này thành 1. Điều này sẽ đặt mật khẩu trống/null cho người dùng root
Có sẵn một biến môi trường khác, đó là MYSQL_ONETIME_PASSWORD. Điều này, khi được đặt thành true [1], sẽ làm hết hạn mật khẩu người dùng root và yêu cầu người dùng tạo mật khẩu mới sau lần đăng nhập đầu tiên. [Xin lưu ý rằng biến env này chỉ được áp dụng trong các phiên bản MySQL sau 5. 6]
đầu ra
Khi lệnh trên được thực thi, bạn sẽ thấy docker hiển thị ID của vùng chứa đã tạo
Ví dụ
Hãy xác thực xem vùng chứa đã được tạo thành công hay chưa bằng cách liệt kê các vùng chứa docker có sẵn trên máy chủ và lọc tên vùng chứa mà chúng tôi đã chỉ định
docker container ls -a | grep "learn-mysql-docker"
Bạn sẽ thấy kết quả như bên dưới [nếu vùng chứa được khởi động thành công]
b] Tìm nạp mật khẩu root. Để kết nối với người dùng root, chúng tôi cần nhập mật khẩu. Vì chúng tôi đã đề cập đến biến env để đặt/cho phép mật khẩu ngẫu nhiên, nên chúng tôi sẽ tìm nạp mật khẩu này từ nhật ký bộ chứa Docker
Thực hiện lệnh bên dưới để tìm nạp nhật ký và mật khẩu được tạo ngẫu nhiên
docker logs learn-mysql-docker | grep "GENERATED ROOT PASSWORD:"
đầu ra
Như được đánh dấu trong hình trên, bạn có thể thấy một mật khẩu ngẫu nhiên đã được tạo. Trong các phần tiếp theo, chúng tôi sẽ sử dụng mật khẩu này để đăng nhập với người dùng root
c] Làm cách nào để khởi động bộ chứa docker với mật khẩu mong muốn?
Nếu chúng tôi không muốn tạo mật khẩu ngẫu nhiên khi khởi động bộ chứa, chúng tôi có thể chỉ định một mật khẩu khác .
Trong trường hợp này, lệnh tạo vùng chứa như sau
docker run --name learn-mysql-docker -d mysql:latest -e MYSQL_ROOT_PASSWORD=`password123`
#3] Đăng nhập vào container đã tạo
Để làm như vậy, chúng tôi sẽ sử dụng tên vùng chứa [hoặc id] đã tạo và đăng nhập vào ứng dụng bash shell trong vùng chứa
________số 8Nếu container đã hoạt động và được tạo thành công, sau khi chạy lệnh trên, bạn sẽ thấy bash shell bên trong container
#4] Khởi động vỏ MySQL
Sau khi đăng nhập vào vùng chứa, chúng tôi sẽ khởi động trình bao MySQL với người dùng root và chỉ định mật khẩu được tạo ngẫu nhiên
#5] Thực thi các ví dụ về lệnh MySQL
Khi chúng tôi đã đăng nhập bằng người dùng root, bây giờ hãy thử thực hiện một số lệnh đơn giản để đảm bảo mọi thứ hoạt động tốt
a] HIỂN THỊ tất cả cơ sở dữ liệu. Thực hiện lệnh dưới đây
SHOW DATABASES;
b] Thay đổi mật khẩu của người dùng root thành 'Mật khẩu' - Thực hiện lệnh bên dưới và thử đăng nhập lại với người dùng root [đối với mật khẩu mới i. e. Mật khẩu, được đặt bởi lệnh này]
Kết nối với MySQL Docker từ máy chủ
Ở phần trên, chúng ta đã đăng nhập vào MySQL shell bên trong docker container. Chúng tôi cũng có thể hiển thị cổng từ bộ chứa MySQL trong docker sang cổng cục bộ và sử dụng cổng đó để phát triển cục bộ để kết nối với MySQL.
Hãy thử tìm hiểu các bước khác nhau có liên quan ở đây.
#1] Bắt đầu vùng chứa và ánh xạ tới một cổng cục bộ. Trong bước này, chúng tôi sẽ ánh xạ cổng từ bộ chứa docker sang một cổng trên localhost sẽ được sử dụng để kết nối với MySQL
a] Đầu tiên dừng/xóa vùng chứa mà chúng ta đã tạo trong các phần trước. Điều này là bắt buộc để tránh nhầm lẫn và nhận các lỗi liên quan đến địa chỉ cổng
Các lệnh cần thực hiện là
docker pull mysql:latest0
Khi vùng chứa bị dừng, chúng ta có thể xóa vùng chứa bằng lệnh bên dưới
docker pull mysql:latest1
b] Sau khi vùng chứa bị xóa, chúng ta có thể bắt đầu một vùng chứa mới có cùng hình ảnh MySQL và cũng ánh xạ cổng docker sang cổng máy chủ cục bộ
Điều này có thể được thực hiện bằng cách chạy lệnh dưới đây
docker pull mysql:latest2
Hãy cố gắng hiểu lệnh trên
- -p đại diện cho cổng và 13306. 3306 đại diện cho việc ánh xạ cổng 3306 từ bộ chứa docker sang 13306 trên máy chủ cục bộ [hoặc máy chủ nơi có bộ chứa]
- –name là tên thân thiện cho docker container mà chúng ta đang khởi tạo
- -e đại diện cho các biến Môi trường. Chúng tôi đang đặt MYSQL_ROOT_PASSWORD thành 'Mật khẩu', đây không phải là mật khẩu cho người dùng root
- -d đại diện cho tên của hình ảnh docker. Trong trường hợp này, mysql. mới nhất sẽ là hình ảnh sẽ được sử dụng để tạo vùng chứa
c] Đảm bảo rằng không có lỗi khi thực hiện lệnh trên. Nếu mọi thứ suôn sẻ, lệnh trên sẽ in ID vùng chứa được tạo
Tham khảo hình ảnh bên dưới
#2] Sau khi vùng chứa được khởi động thành công, hãy kết nối với MySQL từ localhost - sử dụng các công cụ dòng lệnh hoặc GUI như MySQL workbench
a] Hãy chạy/kết nối với cơ sở dữ liệu MySQL thông qua dòng lệnh [Điều kiện tiên quyết – vui lòng đảm bảo rằng máy chủ cục bộ cũng đã cài đặt các công cụ Dòng lệnh MySQL]
docker pull mysql:latest3
Khi lệnh được thực thi, bạn sẽ thấy rằng mình đã được kết nối với phiên bản MySQL dựa trên docker. Bạn có thể thử chạy bất kỳ lệnh nào như
SHOW DATABASES;
Và đảm bảo rằng thiết lập đang hoạt động tốt
b] Để kết nối qua bàn làm việc của MySQL, bạn chỉ cần chỉ định tên máy chủ là localhost và số cổng. như cổng được ánh xạ đã được sử dụng
Thiết lập kết nối mới với localhost và cổng là 13306
Lưu trữ mật khẩu trong móc khóa như trong hình bên dưới
Sau đó, kết nối với cơ sở dữ liệu
Thiết lập MySQL Docker bằng Docker Compose File
Docker soạn thảo là các chi tiết cần thiết để thiết lập hình ảnh/bộ chứa docker ở dạng mẫu, ở định dạng YAML. Điều này giúp dễ dàng chia sẻ và kiểm tra nó trong các hệ thống kiểm soát phiên bản như TFS hoặc GIT, nơi bất kỳ ai làm việc trong dự án có thể chỉ cần lấy tệp này và thực thi nó để thiết lập vùng chứa docker cần thiết với thông tin cần thiết
Có một số tiện ích và trang web cho phép bạn tạo các tệp docker-compose một cách dễ dàng
Chúng ta có thể sử dụng cái từ đây và chỉ cần dán lệnh docker mà chúng ta đã sử dụng để tạo vùng chứa
Tham khảo hình ảnh bên dưới
Chúng ta có thể sao chép nội dung của tệp đã tạo và lưu nội dung với tệp có tên docker-compose. yaml trong một thư mục trên máy tính để bàn/máy tính xách tay của bạn
Sau khi tệp được lưu, hãy điều hướng đến thư mục [nơi tệp được lưu] và chỉ cần chạy lệnh bên dưới
docker pull mysql:latest5
Nếu nội dung của tệp soạn thảo là chính xác và hình ảnh có sẵn, bộ chứa docker mới sẽ được bắt đầu [và có thể được sử dụng theo cách tương tự như đã giải thích trong các phần trước của bài viết này]
Các câu hỏi thường gặp
Q #1] Làm cách nào để tạo cơ sở dữ liệu trong MySQL Docker?
Câu trả lời. MySQL Docker trong một phiên bản vùng chứa có thể được kết nối thông qua dòng lệnh bằng cách đăng nhập vào vùng chứa. Khi kết nối được thiết lập, bất kỳ lệnh SQL nào cũng có thể được thực thi
Để kết nối với MySQL bên trong vùng chứa, đây là cú pháp
docker pull mysql:latest6
Khi lệnh trên được thực thi, bạn sẽ được nhắc nhập mật khẩu cơ sở dữ liệu. Và khi mật khẩu được xác minh, bạn có thể thực thi bất kỳ lệnh dựa trên SQL nào
Q #2] Làm cách nào để hiển thị một cổng cụ thể từ docker cho MySQL?
Câu trả lời. Ánh xạ cổng có thể được chỉ định trong khi vùng chứa docker đang được tạo. Ví dụ: nếu bạn muốn ánh xạ cổng docker tới một cổng cụ thể trên máy chủ cục bộ của mình, bạn có thể sử dụng lệnh như
docker pull mysql:latest2
Ở đây 13306 là cổng trong máy chủ và 3306 là cổng trong vùng chứa
Q #3] Làm cách nào để khởi động lại/dừng và xóa bộ chứa MySQL dựa trên docker?
Câu trả lời. Có một số lệnh tiện dụng và hữu ích cho docker container
- Khởi động lại. Lệnh này được sử dụng để khởi động lại một container đang chạy
docker pull mysql:latest8
- Dừng lại. Lệnh này sẽ tạm thời dừng vùng chứa đang chạy [và có thể được tiếp tục/khởi động lại sau]
docker pull mysql:latest9
- Gỡ bỏ. Thao tác này sẽ xóa vùng chứa docker và mọi tài nguyên được liên kết với vùng chứa đó
docker image ls0
Câu hỏi 4] Làm cách nào để kết nối với phiên bản MySQL được cập nhật từ máy chủ?
Câu trả lời. Khi cổng docker và cổng localhost được ánh xạ, chúng ta có thể kết nối với phiên bản MySQL nằm bên trong docker từ localhost thông qua dòng lệnh hoặc thông qua các công cụ giao diện người dùng như bàn làm việc của MySQL
Để bắt đầu thông qua dòng lệnh – Công cụ dòng lệnh MySQL cũng nên được cài đặt trên máy chủ
Lệnh dưới đây có thể được sử dụng để kết nối với phiên bản MySQL trong docker thông qua máy chủ
docker pull mysql:latest3
Q #5] Làm cách nào để chạy một phiên bản cụ thể của MySQL bằng Docker?
Câu trả lời. Trong khi chỉ định tùy chọn hình ảnh docker [sử dụng -d], trong khi tạo vùng chứa, chúng ta có thể chỉ định các hình ảnh/phiên bản có sẵn của vùng chứa
Nếu cái mới nhất được chỉ định, nó sẽ tìm nạp hình ảnh được xuất bản mới nhất của vùng chứa đã cho
Ví dụ: đối với MySQL, chúng tôi có thể chỉ định mysql. mới nhất để lấy phiên bản mới nhất và một cái gì đó như mysql. 8. 0. 22 chẳng hạn để lấy phiên bản 8. 0. 22
>> Tham khảo tài liệu Docker Hub dành cho MySQL để xem danh sách đầy đủ tất cả các phiên bản có sẵn
Phần kết luận
Trong hướng dẫn này, chúng ta đã tìm hiểu về cách thiết lập máy chủ MySQL bằng Docker thay vì máy chủ thực tế
Docker là một hệ thống điều phối vùng chứa mạnh mẽ, cho phép người dùng lưu trữ một số ứng dụng dưới dạng vùng chứa và cho phép chúng được sử dụng như một hệ thống biệt lập trong chính nó. Nó cũng yêu cầu thiết lập tối thiểu và cung cấp các phương tiện nhanh chóng để tránh mọi rắc rối khi thiết lập chỉ bằng một vài lệnh
Ngày nay, với kiến trúc vi dịch vụ trong đó các dịch vụ vi mô khác nhau dựa vào cơ sở dữ liệu của riêng chúng, việc triển khai các máy chủ MySQL dưới dạng bộ chứa Docker đã trở thành một thông lệ khá phổ biến.
Nó cũng được sử dụng rộng rãi cho bất kỳ thực thi cục bộ nào, tạo bằng chứng về các khái niệm hoặc thậm chí để chạy thử nghiệm tích hợp từ đầu đến cuối trong một môi trường biệt lập