Hướng dẫn deploy mysql in docker - triển khai mysql trong docker

Trước tiên, nếu máy bạn chưa có Docker, hãy cài đặt theo hướng dẫn tại: https://docs.docker.com/install/

Nội dung chính ShowShow

  • 2. Tải xuống MySQL Docker Image
  • 3. Khởi chạy MySQL Container
  • 4. Kiểm tra trạng thái vùng chứa MySQL
  • 5. Kết nối với cơ sở dữ liệu MySQL
  • 6. Tải dữ liệu mẫu
  • 7. Thiết lập MySQL Container bằng Docker-Compose
  • 8. Kết nối với Cơ sở dữ liệu MySQL bằng MySQL Workbench
  • 8.1. Cài đặt MySQL Workbench trong Linux
  • 8.2. Kết nối với Cơ sở dữ liệu MySQL
  • 9. Kết luận

Các bước cài đặt:

  • Tạo Docker network
  • Khởi tạo Docker container từ Docker image của MySQL
  • Khởi tạo Docker container từ Docker image của phpMyAdmin

1. Tạo Docker network

Việc tạo Docker network giúp cho các Docker container trong cùng 1 network có thể giao tiếp với nhau thông qua container name

Chạy lệnh sau:

docker network create mysql

Lệnh trên sẽ tạo một Docker network có tên là mysql. Chúng ta sẽ đặt 2 Docker container chạy MySQL và phpMyAdmin bên trong network mysql này

2. Khởi tạo Docker container từ Docker image của MySQL

Trước tiên, hãy tạo một thư mục dùng để lưu dữ liệu của Docker container, ví dụ: /home/moe/mysql_data

Sau đó, chạy lệnh:

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

trong đó:

  • --name learn_mysql: tên của container. Tên này sẽ được sử dụng ở bước sau, khi chúng ta khới tạo container chạy phpMyAdmin
  • --network mysql: đặt container này trong network mysql vừa được tạo ở bước 1
  • -v /home/moe/mysql_data:/var/lib/mysql : Volume dữ liệu từ container ra bên ngoài thư mục mysql_data mà chúng ta vừa tạo
  • -e MYSQL_ROOT_PASSWORD=123: đặt password cho user root. Mỗi một MySQL server khi được khởi tạo đều sẽ có một user root ban đầu.

3. Khởi tạo Docker container từ Docker image của phpMyAdmin

Chạy lệnh sau:

docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin

trong đó:

  • --name learn_mysql: tên của container. Tên này sẽ được sử dụng ở bước sau, khi chúng ta khới tạo container chạy phpMyAdmin
  • --network mysql: đặt container này trong network mysql vừa được tạo ở bước 1
  • -v /home/moe/mysql_data:/var/lib/mysql : Volume dữ liệu từ container ra bên ngoài thư mục mysql_data mà chúng ta vừa tạo
  • -e MYSQL_ROOT_PASSWORD=123: đặt password cho user root. Mỗi một MySQL server khi được khởi tạo đều sẽ có một user root ban đầu.

3. Khởi tạo Docker container từ Docker image của phpMyAdmin

Hướng dẫn deploy mysql in docker - triển khai mysql trong docker

--name myadmin: tên container

--network mysql: đặt container này vào trong network mysql. Lúc này 2 container chạy phpMyAdmin và MySQL đều ở trong cùng 1 network

-e PMA_HOST=learn_mysql: địa chỉ IP của MySQL server. Vì chúng ta đã đặt 2 container chạy phpMyAdmin và MySQL trong cùng 1 network (mysql) nên chúng ta có thể dùng tên container chạy MySQL (learn_mysql) cho biến môi trường nàyroot, mật khẩu chính là mật khẩu bạn đã đặt cho biến môi trường MYSQL_ROOT_PASSWORD khi khởi tạo MySQL container, như trong bài viết này thì mật khẩu tôi đặt là 123

-p 8081:80: mapping cổng 80 của container với cổng 8081 của máy host

Sau khi hoàn thành cả 3 bước trên, chúng ta truy cập vào địa chỉ: http://localhost:8081/, xuất hiện màn hình:

--name myadmin: tên container

--network mysql: đặt container này vào trong network mysql. Lúc này 2 container chạy phpMyAdmin và MySQL đều ở trong cùng 1 network

-e PMA_HOST=learn_mysql: địa chỉ IP của MySQL server. Vì chúng ta đã đặt 2 container chạy phpMyAdmin và MySQL trong cùng 1 network (mysql) nên chúng ta có thể dùng tên container chạy MySQL (learn_mysql) cho biến môi trường này

-p 8081:80: mapping cổng 80 của container với cổng 8081 của máy host

  • Sau khi hoàn thành cả 3 bước trên, chúng ta truy cập vào địa chỉ: http://localhost:8081/, xuất hiện màn hình:
  • 2. Tải xuống MySQL Docker Image
  • 3. Khởi chạy MySQL Container
  • 4. Kiểm tra trạng thái vùng chứa MySQL
  • 5. Kết nối với cơ sở dữ liệu MySQL
  • 6. Tải dữ liệu mẫu
  • 7. Thiết lập MySQL Container bằng Docker-Compose
  • 8. Kết nối với Cơ sở dữ liệu MySQL bằng MySQL Workbench
    • 8.1. Cài đặt MySQL Workbench trong Linux
    • 8.2. Kết nối với Cơ sở dữ liệu MySQL
  • 9. Kết luận

Các bước cài đặt:

Tạo Docker network

Khởi tạo Docker container từ Docker image của MySQL

$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown

2. Tải xuống MySQL Docker Image

Khởi tạo Docker container từ Docker image của phpMyAdminDocker Hub để có được Hình ảnh docker MySQL. Điều quan trọng là bạn phải quyết định phiên bản MySQL bạn sẽ chạy.

1. Tạo Docker network

$ docker pull mysql:latest

Việc tạo Docker network giúp cho các Docker container trong cùng 1 network có thể giao tiếp với nhau thông qua container name: Không cần thiết phải sử dụng thẻ “latest“, Theo mặc định, nó sẽ kéo hình ảnh mới nhất.

Chạy lệnh sau:

$ docker images mysql

Lệnh trên sẽ tạo một Docker network có tên là mysql. Chúng ta sẽ đặt 2 Docker container chạy MySQL và phpMyAdmin bên trong network mysql này

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    b05128b000dd   12 days ago   516MB

2. Khởi tạo Docker container từ Docker image của MySQLdocker run”Như được hiển thị trong phần tiếp theo sẽ kéo hình ảnh nếu không có sẵn cục bộ.

3. Khởi chạy MySQL Container

Trước tiên, hãy tạo một thư mục dùng để lưu dữ liệu của Docker container, ví dụ: /home/moe/mysql_data

$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
Khởi chạy MySQL Container

Hãy chia nhỏ lệnh trên và xem mỗi lá cờ làm gì.

–name → Đặt tên cho vùng chứa của bạn. Nếu bạn không chỉ định cờ này, docker sẽ chỉ định một số tên được tạo ngẫu nhiên. → Đặt tên cho vùng chứa của bạn. Nếu bạn không chỉ định cờ này, docker sẽ chỉ định một số tên được tạo ngẫu nhiên.

-p → Bản đồ cổng. MySQL sẽ lắng nghe tại cổng 3306 vì vậy chúng tôi đang lập bản đồ các cổng (3306 → 3306) từ máy chủ của bạn đến bộ chứa docker. Cổng máy chủ không cần thiết phải 3306nó có thể là bất cứ thứ gì có sẵn để sử dụng. → Bản đồ cổng. MySQL sẽ lắng nghe tại cổng 3306 vì vậy chúng tôi đang lập bản đồ các cổng (33063306) từ máy chủ của bạn đến bộ chứa docker. Cổng máy chủ không cần thiết phải 3306nó có thể là bất cứ thứ gì có sẵn để sử dụng.

Chạy phần sau netstat trong máy cục bộ của bạn để kiểm tra xem cổng được ánh xạ có đang lắng nghe hay không khi vùng chứa được khởi chạy.netstat trong máy cục bộ của bạn để kiểm tra xem cổng được ánh xạ có đang lắng nghe hay không khi vùng chứa được khởi chạy.

$ netstat -tlnup | grep -i 3306

Đầu ra mẫu:

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
0

-v → Đính kèm một khối lượng vào hộp chứa. Hành vi mặc định của docker là nó sẽ không tồn tại dữ liệu sau khi vùng chứa bị xóa, vì vậy bạn sẽ mất tất cả dữ liệu của mình. → Đính kèm một khối lượng vào hộp chứa. Hành vi mặc định của docker là nó sẽ không tồn tại dữ liệu sau khi vùng chứa bị xóa, vì vậy bạn sẽ mất tất cả dữ liệu của mình.

Để tạo bộ nhớ liên tục, tôi đã tạo ổ đĩa có tên “mysql_volume“. MySQL lưu trữ dữ liệu trong /var/lib/mysql/ bên trong vùng chứa và ở đây nó được ánh xạ tới thư mục localhost /var/lib/docker/volumes/mysql_volume1/_datavì vậy dữ liệu của bạn sẽ được duy trì.mysql_volume“. MySQL lưu trữ dữ liệu trong /var/lib/mysql/ bên trong vùng chứa và ở đây nó được ánh xạ tới thư mục localhost /var/lib/docker/volumes/mysql_volume1/_datavì vậy dữ liệu của bạn sẽ được duy trì.

Nếu bạn muốn biết thêm về khối lượng docker, hãy xem chi tiết của chúng tôi bài báo trên cùng một.bài báo trên cùng một.

-d → Sẽ khởi động và chạy vùng chứa ở chế độ tách rời. Nếu bạn bỏ qua -dsau đó bạn sẽ thấy nhật ký khởi động vùng chứa trong thiết bị đầu cuối và bạn phải mở một phiên thiết bị đầu cuối mới để kết nối với vùng chứa. → Sẽ khởi động và chạy vùng chứa ở chế độ tách rời. Nếu bạn bỏ qua -dsau đó bạn sẽ thấy nhật ký khởi động vùng chứa trong thiết bị đầu cuối và bạn phải mở một phiên thiết bị đầu cuối mới để kết nối với vùng chứa.

-e → Các biến môi trường. Bạn phải thiết lập mật khẩu người dùng gốc mysql sử dụng bất kỳ một trong các tham số dưới đây. → Các biến môi trường. Bạn phải thiết lập mật khẩu người dùng gốc mysql sử dụng bất kỳ một trong các tham số dưới đây.

  • MYSQL_ROOT_PASSWORD → Thiết lập mật khẩu của riêng bạn bằng cách sử dụng biến môi trường này. → Thiết lập mật khẩu của riêng bạn bằng cách sử dụng biến môi trường này.
  • MYSQL_ALLOW_EMPTY_PASSWORD → Mật khẩu trống hoặc Null sẽ được thiết lập. Bạn phải thiết lập MYSQL_ALLOW_EMPTY_PASSWORD=1. → Mật khẩu trống hoặc Null sẽ được thiết lập. Bạn phải thiết lập MYSQL_ALLOW_EMPTY_PASSWORD=1.
  • MYSQL_RANDOM_ROOT_PASSWORD → mật khẩu ngẫu nhiên sẽ được tạo khi vùng chứa được khởi động. Bạn phải thiết lập MYSQL_RANDOM_ROOT_PASSWORD=1 để tạo mật khẩu ngẫu nhiên. → mật khẩu ngẫu nhiên sẽ được tạo khi vùng chứa được khởi động. Bạn phải thiết lập MYSQL_RANDOM_ROOT_PASSWORD=1 để tạo mật khẩu ngẫu nhiên.

Nếu bạn bỏ qua bước này, thì một lỗi sẽ được hiển thị như hình dưới đây.

Lỗi biến môi trường

4. Kiểm tra trạng thái vùng chứa MySQL

Bạn có thể kiểm tra trạng thái vùng chứa đã khởi chạy bằng lệnh sau:

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
1

Đầu ra mẫu:

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
2

-v → Đính kèm một khối lượng vào hộp chứa. Hành vi mặc định của docker là nó sẽ không tồn tại dữ liệu sau khi vùng chứa bị xóa, vì vậy bạn sẽ mất tất cả dữ liệu của mình.

Để tạo bộ nhớ liên tục, tôi đã tạo ổ đĩa có tên “mysql_volume“. MySQL lưu trữ dữ liệu trong /var/lib/mysql/ bên trong vùng chứa và ở đây nó được ánh xạ tới thư mục localhost /var/lib/docker/volumes/mysql_volume1/_datavì vậy dữ liệu của bạn sẽ được duy trì.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
3

Nếu bạn muốn biết thêm về khối lượng docker, hãy xem chi tiết của chúng tôi bài báo trên cùng một.root bằng cách chạy lệnh sau. Trong trường hợp của tôi, tôi đã thiết lập mật khẩu của riêng mình thông qua MYSQL_ROOT_PASSWORD.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
4

-d → Sẽ khởi động và chạy vùng chứa ở chế độ tách rời. Nếu bạn bỏ qua -dsau đó bạn sẽ thấy nhật ký khởi động vùng chứa trong thiết bị đầu cuối và bạn phải mở một phiên thiết bị đầu cuối mới để kết nối với vùng chứa.

-e → Các biến môi trường. Bạn phải thiết lập mật khẩu người dùng gốc mysql sử dụng bất kỳ một trong các tham số dưới đây.MYSQL_RANDOM_ROOT_PASSWORD=1 khi khởi chạy vùng chứa, bạn có thể lấy mật khẩu được tạo tự động từ nhật ký.

MYSQL_ROOT_PASSWORD → Thiết lập mật khẩu của riêng bạn bằng cách sử dụng biến môi trường này.

MYSQL_ALLOW_EMPTY_PASSWORD → Mật khẩu trống hoặc Null sẽ được thiết lập. Bạn phải thiết lập MYSQL_ALLOW_EMPTY_PASSWORD=1.

MYSQL_RANDOM_ROOT_PASSWORD → mật khẩu ngẫu nhiên sẽ được tạo khi vùng chứa được khởi động. Bạn phải thiết lập MYSQL_RANDOM_ROOT_PASSWORD=1 để tạo mật khẩu ngẫu nhiên.

Nếu bạn bỏ qua bước này, thì một lỗi sẽ được hiển thị như hình dưới đây.

Lỗi biến môi trường

4. Kiểm tra trạng thái vùng chứa MySQL

Bạn có thể kiểm tra trạng thái vùng chứa đã khởi chạy bằng lệnh sau:load_data.sql”Với các truy vấn sau trong đó.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
8

5. Kết nối với cơ sở dữ liệu MySQLdocker cp” yêu cầu.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
9
docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
3
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
1

Chạy lệnh sau để kết nối với vùng chứa MySQL.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
4
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
3

Kết nối với cơ sở dữ liệu MySQL dưới dạng root bằng cách chạy lệnh sau. Trong trường hợp của tôi, tôi đã thiết lập mật khẩu của riêng mình thông qua MYSQL_ROOT_PASSWORD.

docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
4

Kết nối với cơ sở dữ liệu

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
4
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
6
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
7
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
8
docker run --name myadmin -d --network mysql -p 8081:80 -e PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
9

Nếu bạn đã sử dụng MYSQL_RANDOM_ROOT_PASSWORD=1 khi khởi chạy vùng chứa, bạn có thể lấy mật khẩu được tạo tự động từ nhật ký.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
5
docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
6 .sql khi chạy docker exec.

$ docker --version
Docker version 20.10.11, build dea9396
0

Mật khẩu gốc đã tạo

Mật khẩu gốc được tạo tự động sẽ dài và nó không phải là thứ cần được ghi nhớ. Bạn có thể đặt lại mật khẩu gốc bằng cách chạy truy vấn sau.docker runbạn có thể dùng docker-soạn để quay nhanh thùng chứa. Docker-compos phù hợp nhất khi bạn có nhiều vùng chứa được tạo.

docker run --name learn_mysql --network mysql -v /home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
7docker-compose.yml hoặc docker-compose.yaml. Sao chép và dán mã yaml sau đây. Điều này cũng giống như những gì tôi đã chạy thủ công trong các phần trước.

$ docker --version
Docker version 20.10.11, build dea9396
1

Thay thế mật khẩu ‘mysqlpassword’ bằng mật khẩu của riêng bạn. Bạn cũng có thể tạo người dùng của riêng mình và cấp cho anh ta các đặc quyền theo yêu cầu.

$ docker --version
Docker version 20.10.11, build dea9396
2

6. Tải dữ liệu mẫu

Mục tiêu chính của việc thiết lập mysql là tải một số dữ liệu và chạy các truy vấn đối với nó. Có một số cách bạn có thể tải dữ liệu. Tôi có một tệp mẫu tên là “load_data.sql”Với các truy vấn sau trong đó.

$ docker --version
Docker version 20.10.11, build dea9396
3

Đầu ra mẫu:

$ docker --version
Docker version 20.10.11, build dea9396
4

-v → Đính kèm một khối lượng vào hộp chứa. Hành vi mặc định của docker là nó sẽ không tồn tại dữ liệu sau khi vùng chứa bị xóa, vì vậy bạn sẽ mất tất cả dữ liệu của mình.

Để tạo bộ nhớ liên tục, tôi đã tạo ổ đĩa có tên “mysql_volume“. MySQL lưu trữ dữ liệu trong /var/lib/mysql/ bên trong vùng chứa và ở đây nó được ánh xạ tới thư mục localhost /var/lib/docker/volumes/mysql_volume1/_datavì vậy dữ liệu của bạn sẽ được duy trì.

Nếu bạn muốn biết thêm về khối lượng docker, hãy xem chi tiết của chúng tôi bài báo trên cùng một.

Trong trường hợp của tôi, tôi đã lập bản đồ localhost (3306) -> thùng đựng hàng (3306). Vì vậy, nếu tôi phải thiết lập kết nối với cơ sở dữ liệu, tôi phải kết nối với localhost:3306 hoặc 127.0.01:3306.localhost (3306) -> thùng đựng hàng (3306). Vì vậy, nếu tôi phải thiết lập kết nối với cơ sở dữ liệu, tôi phải kết nối với localhost:3306 hoặc 127.0.01:3306.

Tôi đang sử dụng MySQL Workbench làm ứng dụng khách GUI của mình. Nếu bạn chưa cài đặt MySQL workbench trong máy của mình, thì bạn có thể sử dụng hướng dẫn bên dưới để cài đặt tương tự.

8.1. Cài đặt MySQL Workbench trong Linux

Điều hướng đến trang web chính thức để tải xuống tệp gói. Bạn phải chọn hệ điều hành của mình để tải xuống .deb hoặc .rpm.trang web chính thức để tải xuống tệp gói. Bạn phải chọn hệ điều hành của mình để tải xuống .deb hoặc .rpm.

Chọn hệ điều hành cho MySQL Workbench

Trong bước tiếp theo, nó sẽ yêu cầu bạn Đăng nhập hoặc Đăng ký. Bạn có thể bỏ qua đăng nhập hoặc đăng ký bằng cách nhấp vào tùy chọn “Không, cảm ơn, Chỉ cần bắt đầu tải xuống của tôi”.

Bỏ qua tùy chọn đăng nhập hoặc đăng ký

Trên các hệ thống dựa trên Debian, hãy cài đặt MySQL Workbench như bên dưới:

$ docker --version
Docker version 20.10.11, build dea9396
5
$ docker --version
Docker version 20.10.11, build dea9396
6

Trên các hệ thống dựa trên RHEL, hãy cài đặt MySQL Workbench như sau:

$ docker --version
Docker version 20.10.11, build dea9396
7
$ docker --version
Docker version 20.10.11, build dea9396
8

Sau khi cài đặt xong, bạn có thể khởi chạy bàn làm việc mysql từ menu hoặc dấu gạch ngang.

Khởi chạy MySQL Workbench

8.2. Kết nối với Cơ sở dữ liệu MySQL

Kết nối với cơ sở dữ liệu đang chạy bên trong bộ chứa docker. Bạn nên cố gắng kết nối với localhost:3306 hoặc localhost: tùy thuộc vào cách thiết lập vùng chứa của bạn.localhost:3306 hoặc localhost: tùy thuộc vào cách thiết lập vùng chứa của bạn.

Quản lý kết nối MySQL

Trước khi kết nối với cơ sở dữ liệu, bạn có thể nhấn “Kiểm tra kết nối”Để kiểm tra MySQL workbench có thể kết nối thành công với phiên bản cơ sở dữ liệu hay không.Kiểm tra kết nối”Để kiểm tra MySQL workbench có thể kết nối thành công với phiên bản cơ sở dữ liệu hay không.

Kiểm tra kết nối MySQL

Bây giờ bạn có thể bắt đầu chạy các truy vấn của mình đối với các bảng bạn đã tạo.

Chạy truy vấn mẫu trong MySQL Workbench

9. Kết luận

Trong bài viết này, chúng ta đã giới thiệu sơ qua về cách khởi chạy vùng chứa MySQL trong docker bằng cách sử dụng docker run và docker-compose các phương pháp. Nếu bạn muốn thiết lập MySQL cho mục đích thử nghiệm hoặc học tập, Docker là quá đủ.docker rundocker-compose các phương pháp. Nếu bạn muốn thiết lập MySQL cho mục đích thử nghiệm hoặc học tập, Docker là quá đủ.

Hi vọng điêu nay co ich.