Docker là một trong những nền tảng phổ biến hơn để phát triển và triển khai các ứng dụng được đóng gói. Bộ chứa là môi trường biệt lập chứa ứng dụng cùng với tất cả các gói phần mềm cần thiết. Với Docker, bạn có thể chạy hoặc mở rộng quy mô ứng dụng của mình trong mọi môi trường Show
MySQL là một trong những cơ sở dữ liệu quan hệ tương thích với SQL phổ biến nhất. Chạy MySQL bên trong bộ chứa Docker cho phép bạn tách cơ sở dữ liệu khỏi mã của mình. Bạn cũng có thể sử dụng bộ điều phối vùng chứa như Kubernetes để mở rộng quy mô MySQL độc lập với phiên bản máy chủ API của bạn Sử dụng vùng chứa mang lại cho bạn lợi ích về tính nhất quán. Sau khi xây dựng xong hệ thống của mình, bạn có thể triển khai các bộ chứa của mình lên đám mây mà không cần cài đặt và định cấu hình MySQL theo cách thủ công trên phần cứng kim loại thô Trong bài viết này, bạn sẽ tìm hiểu cách Dockerize cơ sở dữ liệu của mình, những điều bạn cần biết trước tiên và lý do bạn nên thử nó Lập kế hoạch triển khai của bạnMặc dù sử dụng Docker với MySQL giúp đơn giản hóa nhiều khía cạnh trong quá trình triển khai của bạn, chẳng hạn như cài đặt máy chủ và tạo cơ sở dữ liệu, nhưng nó có một số vấn đề kỹ thuật. Đáng kể nhất là lưu trữ dữ liệu. Docker được thiết kế chủ yếu xung quanh các thùng chứa không trạng thái, trong khi cơ sở dữ liệu MySQL vốn có trạng thái Bạn cần sử dụng Docker volume khi triển khai MySQL container. Các ổ đĩa cung cấp một cơ chế để duy trì các tệp sau khi vùng chứa dừng lại. Bạn sẽ mất cơ sở dữ liệu nếu khởi động lại bộ chứa MySQL không sử dụng ổ đĩa Khối lưu trữ dữ liệu bên ngoài bất kỳ vùng chứa nào. Sau khi bộ chứa MySQL của bạn dừng, các tệp được lưu trữ trong ổ đĩa được gắn của nó sẽ vẫn có thể truy cập được trên máy chủ của bạn. Bạn có thể gắn ổ đĩa trở lại vào vùng chứa mới, tránh mất dữ liệu sau khi bạn thay thế phiên bản MySQL của mình bằng phiên bản hình ảnh mới Các trường hợp sử dụng cho MySQL trong DockerDockerized MySQL hoạt động tốt trong các môi trường phát triển và dàn dựng nơi bạn muốn nhanh chóng hiển thị các phiên bản cơ sở dữ liệu bị cô lập. Việc khởi động cơ sở dữ liệu trong Docker nhanh hơn và dễ dàng hơn nhiều so với việc định cấu hình cài đặt MySQL thông thường trong một máy ảo đầy đủ Mặc dù bạn có thể chạy MySQL cục bộ trên máy chủ của mình, nhưng điều này trở nên hạn chế khi bạn đang làm việc trên nhiều ứng dụng cùng lúc. Việc sử dụng các thùng chứa cung cấp sự phân tách hoàn toàn dữ liệu của từng hệ thống và khả năng cung cấp cấu hình máy chủ MySQL duy nhất cho từng hệ thống Có một số trường hợp việc chọn Dockerize cơ sở dữ liệu của bạn có thể ít ảnh hưởng hơn. Yêu cầu môi trường sản xuất có thể tốt hơn với máy chủ MySQL chuyên dụng. Tổng chi phí hoạt động của Docker rất khiêm tốn nhưng có thể chồng chất lên nhau trong các khối lượng công việc nặng về I/O như khối lượng công việc của cơ sở dữ liệu nặng về ghi. Một máy chủ sản xuất kim loại trần cũng giúp những người có vai trò bảo trì cơ sở dữ liệu không quen thuộc với Docker có thể truy cập phiên bản của bạn Tuy nhiên, Docker hoàn toàn có khả năng hỗ trợ triển khai cơ sở dữ liệu MySQL, từ môi trường phát triển cục bộ cho đến sản xuất. Sử dụng nó cho toàn bộ chu kỳ của bạn đảm bảo tính nhất quán. Nếu phiên bản sản xuất của bạn sử dụng cùng một hình ảnh Docker khi phát triển, thì bạn có thể chắc chắn rằng hệ thống trực tiếp của mình sẽ hoạt động như dự đoán. Đây là cách để máy chủ MySQL chạy trong bộ chứa Docker Bắt đầu vùng chứa MySQL của bạnMySQL có hình ảnh Docker chính thức có sẵn trên Docker Hub. Trước tiên hãy xác định thẻ hình ảnh bạn nên sử dụng. Phiên bản MySQL 5. 6, 5. 7 và 8. 0 có sẵn Thẻ 3 trỏ đến bản phát hành mới nhất, hiện tại là 8. 0. Tránh sử dụng thẻ này, vì điều đó có nghĩa là bạn có thể vô tình nhận được bản nâng cấp phiên bản MySQL chính trong tương lai. Tham chiếu cụ thể phiên bản bạn muốn cho phép tiếp cận các bản cập nhật được kiểm soát nhiều hơnBắt đầu một bộ chứa MySQL lần đầu tiên sẽ tự động tạo một người dùng 4 ban đầu. Bạn cần cung cấp mật khẩu cho người dùng này hoặc yêu cầu MySQL tạo một mật khẩu. Đây là một ví dụ về việc chạy bộ chứa MySQL cơ bản với mật khẩu gốc được chỉ định Bắt đầu vùng chứa MySQL và kéo hình ảnh DockerLệnh này bắt đầu một vùng chứa với MySQL 8. Mật khẩu cho người dùng 4 được đặt thủ công. Cờ 6 có nghĩa là vùng chứa sẽ chạy ở chế độ nền cho đến khi dừng, độc lập với phiên cuối của bạn. Bạn có thể xem nhật ký khởi động của vùng chứa bằng 7. Khi “sẵn sàng kết nối” xuất hiện, cơ sở dữ liệu MySQL của bạn có thể truy cập đượcNhật ký khởi động MySQL sớmTham số 8 hướng dẫn Docker luôn khởi động lại container. Điều này có nghĩa là cơ sở dữ liệu MySQL của bạn sẽ chạy mà không cần can thiệp sau khi máy chủ khởi động lại hoặc cập nhật daemon Docker. Chính sách 9 được sử dụng ở đây sẽ không khởi động vùng chứa nếu bạn dừng thủ công vùng chứa bằng 0Cờ 1 của Docker cho phép chuyển tiếp cổng vào vùng chứa để bạn có thể truy cập cơ sở dữ liệu của mình trên 2. Đây là cổng MySQL mặc định; . Sử dụng ứng dụng khách MySQL yêu thích của bạn để kết nối qua cổng này với 4 và mật khẩu bạn đã chọn làm thông tin đăng nhập người dùngNếu không bật chuyển tiếp cổng, bạn chỉ có thể truy cập cơ sở dữ liệu của mình từ bên trong vùng chứa. Bạn có thể làm điều này bất cứ lúc nào bằng cách sử dụng 4 để lấy vỏ bên trong thùng chứa
Lệnh này chạy 5 bên trong vùng chứa 6. Cờ 7 có nghĩa là luồng đầu vào của thiết bị đầu cuối của bạn sẽ được chuyển tiếp đến vùng chứa dưới dạng TTY tương tácKhởi chạy trình bao MySQL bên trong bộ chứa DockerDữ liệu liên tục với khối lượngMặc dù vùng chứa được tạo ở trên là một máy chủ MySQL hoạt động đầy đủ, nhưng bạn cần thiết lập các ổ đĩa để dữ liệu của bạn không bị mất khi vùng chứa dừng lại. Hình ảnh Docker của MySQL được định cấu hình để lưu trữ tất cả dữ liệu của nó trong thư mục 8. Việc gắn một ổ đĩa vào thư mục này sẽ cho phép lưu trữ dữ liệu liên tục tồn tại lâu hơn bất kỳ phiên bản vùng chứa nàoDừng và xóa vùng chứa trước đó của bạn để tránh xung đột về tên ________số 8 Sau đó bắt đầu một vùng chứa mới với cấu hình đã sửa đổi 9Sử dụng lệnh này để khởi động bộ chứa MySQL của bạn sẽ tạo một khối Docker mới có tên là 6. Nó sẽ được gắn vào vùng chứa tại 8, nơi MySQL lưu trữ các tệp dữ liệu của nó. Mọi dữ liệu được ghi vào thư mục này giờ đây sẽ được lưu trữ trong suốt trong ổ đĩa do Docker quản lý trên máy chủ của bạnLặp lại các bước để dừng và xóa vùng chứa của bạn ________số 8 Dừng và xóa vùng chứa DockerLặp lại lệnh 91 với các đối số tương tự. Vì ổ đĩa có tên 6 đã tồn tại, vùng chứa mới sẽ giữ lại dữ liệu được tạo bởi vùng chứa cũ. Nếu bạn muốn hủy tập đĩa, hãy sử dụng 93Sử dụng mạng vùng chứaTrong các ví dụ trên, chuyển tiếp cổng được sử dụng để hiển thị máy chủ MySQL trên mạng máy chủ lưu trữ của bạn. Nếu bạn chỉ kết nối với MySQL từ bên trong một bộ chứa Docker khác, chẳng hạn như máy chủ API của bạn, thì cách tiếp cận tốt hơn là tạo một mạng Docker chuyên dụng. Điều này cải thiện bảo mật bằng cách hạn chế tiếp xúc với cơ sở dữ liệu của bạn Đầu tiên tạo một mạng Docker cho ứng dụng của bạn 6Chỉ định mạng này khi bắt đầu bộ chứa MySQL của bạn 7Kết nối một vùng chứa khác với cùng một mạng 8Bộ chứa API và MySQL của bạn hiện chia sẻ một mạng. Bạn có thể kết nối với MySQL từ bộ chứa API của mình bằng cách tham khảo tên máy chủ của bộ chứa MySQL. Tên này khớp với tên của vùng chứa theo mặc định. Tại đây, ứng dụng của bạn sẽ kết nối với cổng 3306 trên máy chủ 6Cấu hình MySQLHình ảnh MySQL chính thức hỗ trợ một số biến môi trường mà bạn có thể sử dụng để định cấu hình trạng thái ban đầu của bộ chứa. Bạn đã thấy một cái, 95. Sử dụng cờ 96 với 91 để đặt từng biến này. Chúng chỉ được tôn trọng khi vùng chứa khởi động lần đầu tiên, khi thư mục dữ liệu MySQL trống
Sử dụng các biến môi trường này có nghĩa là giá trị của chúng sẽ hiển thị với bất kỳ ai có thể 7 vùng chứa của bạn. Một cách tiếp cận an toàn hơn là sử dụng các bí mật hoặc khối lượng của Docker để thêm các giá trị dưới dạng tệpMySQL tạo mật khẩu gốc ngẫu nhiênHình ảnh MySQL hỗ trợ một biến thể bổ sung của từng biến trên. Hậu tố tên của một biến với 8 để giá trị của nó được hiểu là đường dẫn đến tệp chứa giá trị thực. Ví dụ này đặt mật khẩu của người dùng 4 một cách an toàn theo cách không thể kiểm tra được từ bên ngoài vùng chứa 5Mật khẩu được ghi vào một tệp được gắn vào vùng chứa bằng cách sử dụng ổ đĩa Docker. MySQL hướng dẫn rằng mật khẩu được lấy từ tệp được gắn kết đó bằng biến môi trường 60. Bất kỳ ai đang xem các biến môi trường của vùng chứa sẽ thấy đường dẫn tệp thay vì mật khẩu văn bản thuần túyTạo một hình ảnh tùy chỉnhCó thể hữu ích khi tạo hình ảnh Docker của riêng bạn nếu ứng dụng của bạn yêu cầu cấu hình MySQL tùy chỉnh. Thêm các lớp bổ sung trên hình ảnh cơ sở chính thức của MySQL sẽ cung cấp cho bạn một hình ảnh sẵn sàng sử dụng, nơi bạn có thể bỏ qua việc tiêm tệp cấu hình MySQL theo cách thủ công Đây là một ví dụ 61 thay đổi một số cài đặt MySQL 8Hình ảnh MySQL tải các tệp cấu hình được lưu trữ trong thư mục 62. Các tệp sẽ chỉ được đọc khi máy chủ MySQL khởi động, đó là khi bạn khởi động bộ chứa Docker của mình. Để đưa cấu hình của bạn vào vùng chứa của bạn, hãy sử dụng một ổ đĩa Docker khác để liên kết gắn tệp của bạn hoặc sử dụng Dockerfile để đưa các thay đổi của bạn vào một hình ảnh mới 0Xây dựng hình ảnh của bạn 1Xây dựng hình ảnh MySQL Docker tùy chỉnhBây giờ bạn có thể chạy hình ảnh của mình để bắt đầu phiên bản MySQL tự động sử dụng tệp cấu hình của bạn 2Vì hình ảnh tùy chỉnh của bạn dựa trên phiên bản Docker Hub chính thức, nên bạn có thể sử dụng tất cả các biến môi trường hiện có được mô tả ở trên Phần kết luậnChạy MySQL trong bộ chứa Docker cung cấp tính nhất quán và cách ly giữa các môi trường cho việc triển khai cơ sở dữ liệu của bạn. Bạn có thể sử dụng hình ảnh MySQL chính thức hoặc tạo hình ảnh tùy chỉnh Khi bạn đã sẵn sàng chuyển sang sản xuất, bạn có thể sử dụng lại quy trình phát triển của mình để đưa cơ sở dữ liệu của bạn vào hoạt động. Tự động hóa quy trình bằng cách khởi chạy các bộ chứa trong quy trình CI/CD của bạn, nơi các công cụ như Earthly có thể cung cấp các bản dựng lặp lại và thông tin chi tiết về bất kỳ lỗi nào. Earthly cung cấp daemon Docker theo yêu cầu và khả năng tái tạo cao để giúp bạn tự động hóa các bản dựng của mình nhanh hơn Trong khi bạn ở đây Earthly là khung CI/CD dễ dàng. James Walker James Walker là người sáng lập Heron Web, một studio phát triển phần mềm có trụ sở tại Vương quốc Anh cung cấp các giải pháp riêng biệt cho các doanh nghiệp vừa và nhỏ. Anh ấy có kinh nghiệm trong việc cung cấp phần mềm tùy chỉnh bằng quy trình công việc kỹ thuật được xây dựng dựa trên các phương pháp DevOps hiện đại. James cũng là một nhà văn kỹ thuật tự do và đã viết nhiều về vòng đời phát triển phần mềm, xu hướng hiện tại của ngành cũng như các khái niệm và công nghệ DevOps Cách cài đặt MySQL 5. 7 trong bộ chứa Docker?Cài đặt Bộ chứa Docker MySQL . Bước 1. Kéo hình ảnh Docker của MySQL. Bắt đầu bằng cách lấy hình ảnh Docker thích hợp cho MySQL. . Bước 2. Triển khai Bộ chứa MySQL. . Bước 3. Kết nối với MySQL Docker Container Làm cách nào để chạy MySQL trên bộ chứa docker?Bước 1. Kéo hình ảnh Docker cho MySQL. Bắt đầu bằng cách lấy Docker Image thích hợp cho MySQL. . Bước 2. Triển khai và khởi động MySQL Container. . Bước 3. Kết nối với Docker MySQL Container Làm cách nào để tạo cơ sở dữ liệu MySQL trong Docker?Tìm hiểu cách thiết lập và chạy bộ chứa Docker cho cơ sở dữ liệu . Tạo Docker Soạn tệp YAML cho bộ chứa MySQL Docker Kết nối với cơ sở dữ liệu MySQL, chạy trên vùng chứa, sử dụng nhiều phương thức khác nhau Tạo và chạy nhiều phiên bản MySQL trong bộ chứa Docker Làm cách nào để chạy các lệnh MySQL trong Dockerfile?Chúng tôi sẽ chỉ hiển thị quy trình cơ bản ở đây cho tùy chọn thứ hai ở trên. . Tạo một thư mục dữ liệu trên một ổ đĩa phù hợp trên hệ thống máy chủ của bạn, e. g. /của tôi/của riêng/datadir Bắt đầu vùng chứa mysql của bạn như thế này. $ docker run --name some-mysql -v /my/own/datadir. /var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql. nhãn |