Kết nối bộ chứa docker với cơ sở dữ liệu mysql cục bộ

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

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ạn

Mặ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 Docker

Dockerized 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ạn

MySQL 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ẻ

docker exec -it mysql mysql -p
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ơn

Bắt đầu một bộ chứa MySQL lần đầu tiên sẽ tự động tạo một người dùng

docker exec -it mysql mysql -p
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

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8

Bắt đầu vùng chứa MySQL và kéo hình ảnh Docker

Lệ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

docker exec -it mysql mysql -p
4 được đặt thủ công. Cờ
docker exec -it mysql mysql -p
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
docker exec -it mysql mysql -p
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 được

Nhật ký khởi động MySQL sớm

Tham số

docker exec -it mysql mysql -p
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
docker exec -it mysql mysql -p
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
docker stop mysql
docker rm mysql
0

Cờ

docker stop mysql
docker rm mysql
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
docker stop mysql
docker rm mysql
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
docker exec -it mysql mysql -p
4 và mật khẩu bạn đã chọn làm thông tin đăng nhập người dùng

Nế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

docker stop mysql
docker rm mysql
4 để lấy vỏ bên trong thùng chứa

docker exec -it mysql mysql -p

Lệnh này chạy

docker stop mysql
docker rm mysql
5 bên trong vùng chứa
docker stop mysql
docker rm mysql
6. Cờ
docker stop mysql
docker rm mysql
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ác

Khởi chạy trình bao MySQL bên trong bộ chứa Docker

Dữ liệu liên tục với khối lượng

Mặ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

docker stop mysql
docker rm mysql
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ào

Dừ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

docker exec -it mysql mysql -p
9

Sử 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à

docker stop mysql
docker rm mysql
6. Nó sẽ được gắn vào vùng chứa tại
docker stop mysql
docker rm mysql
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ạn

Lặ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 Docker

Lặp lại lệnh

docker exec -it mysql mysql -p
91 với các đối số tương tự. Vì ổ đĩa có tên
docker stop mysql
docker rm mysql
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
docker exec -it mysql mysql -p
93

Sử dụng mạng vùng chứa

Trong 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

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
6

Chỉ định mạng này khi bắt đầu bộ chứa MySQL của bạn

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
7

Kết nối một vùng chứa khác với cùng một mạng

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
8

Bộ 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ủ

docker stop mysql
docker rm mysql
6

Cấu hình MySQL

Hì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,

docker exec -it mysql mysql -p
95. Sử dụng cờ
docker exec -it mysql mysql -p
96 với
docker exec -it mysql mysql -p
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

  • docker exec -it mysql mysql -p
    98 - Tên của lược đồ cơ sở dữ liệu sẽ được tạo khi vùng chứa khởi động
  • docker exec -it mysql mysql -p
    99 và
    docker stop mysql
    docker rm mysql
    0 - ​​Tạo người dùng thông thường mới khi vùng chứa bắt đầu
  • docker stop mysql
    docker rm mysql
    1 - Đặt cái này thay vì
    docker exec -it mysql mysql -p
    95 nếu bạn muốn MySQL tạo mật khẩu
    docker exec -it mysql mysql -p
    4 an toàn cho bạn. Nếu bạn bật cài đặt này, mật khẩu sẽ được gửi vào nhật ký của bộ chứa [có thể truy cập qua lệnh
    docker stop mysql
    docker rm mysql
    4] trong lần khởi động đầu tiên. Sẽ không thể lấy lại mật khẩu sau đó
  • docker stop mysql
    docker rm mysql
    5 - Cài đặt này sẽ tạo người dùng
    docker exec -it mysql mysql -p
    4 với mật khẩu trống. Chỉ sử dụng tùy chọn này cho các phiên bản cơ sở dữ liệu tạm thời. Nó không an toàn và sẽ cho phép bất kỳ ai kết nối với MySQL với các đặc quyền siêu người dù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ể

docker stop mysql
docker rm mysql
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ệp

MySQL tạo mật khẩu gốc ngẫu nhiên

Hì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

docker stop mysql
docker rm mysql
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
docker exec -it mysql mysql -p
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

docker exec -it mysql mysql -p
5

Mậ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

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
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úy

Tạo một hình ảnh tùy chỉnh

Có 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ụ

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
61 thay đổi một số cài đặt MySQL

docker exec -it mysql mysql -p
8

Hình ảnh MySQL tải các tệp cấu hình được lưu trữ trong thư mục

docker run --name mysql -d \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=change-me \
    --restart unless-stopped \
    mysql:8
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

docker exec -it mysql mysql -p
0

Xây dựng hình ảnh của bạn

docker exec -it mysql mysql -p
1

Xây dựng hình ảnh MySQL Docker tùy chỉnh

Bâ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

docker exec -it mysql mysql -p
2

Vì 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

Sự kết luận

Chạ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.
Phát triển đường dẫn CI/CD cục bộ và chạy chúng ở mọi nơi.

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

Docker container kết nối với cơ sở dữ liệu cục bộ như thế nào?

Làm cách nào để kết nối cơ sở dữ liệu Postgres cục bộ với bộ chứa docker? .
Lấy địa chỉ IP cục bộ, tương tự như 192. 168. 1. 111 [sử dụng ipconfig trong hệ thống dựa trên linux]
Get inside the docker using docker exec -it .
Hãy thử Lệnh Ping Ping 192. 168
Hãy thử Lệnh Telnet telnet 192. 168

Tôi có thể sử dụng MySQL với Docker không?

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.

Không thể kết nối với máy chủ MySQL trên Docker?

thông thường có nghĩa là không có máy chủ MySQL nào đang chạy trên hệ thống hoặc bạn đang sử dụng tên tệp ổ cắm Unix hoặc số cổng TCP/IP không chính xác khi cố gắng kết nối với máy chủ . Bạn cũng nên kiểm tra xem cổng TCP/IP bạn đang sử dụng có bị chặn bởi tường lửa hoặc dịch vụ chặn cổng không. . You should also check that the TCP/IP port you are using has not been blocked by a firewall or port blocking service.

Chủ Đề