Docker nodejs kết nối với mysql

Chúng tôi đang kết nối với cơ sở dữ liệu MYSQL có tên là kiểm tra và trong tuyến / GET, chúng tôi đang hiển thị tất cả nội dung được lưu trữ trong bảng Sinh viên

Bây giờ, chúng ta cần cập bến chương trình phụ trợ của mình.
Vì vậy, hãy tạo một Dockerfile (không có bất kỳ phần mở rộng nào) trong cùng một thư mục web.

FROM node:15-alpineWORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 5000 CMD ["npm", "start"]
  • Chúng tôi đang sử dụng nút. 15 làm hình ảnh cơ sở (núi cao vì nó có kích thước rất nhỏ)
  • Sau đó, chúng tôi tạo một thư mục làm việc/ứng dụng bên trong vùng chứa
  • Sau đó sao chép gói. json và khóa gói. json vào thư mục/ứng dụng
  • Chạy cài đặt npm để cài đặt các phụ thuộc (trong trường hợp của chúng tôi là express và mysql)
  • Sao chép các tệp còn lại (đảm bảo tạo. dockerignore và thêm node_modules để bỏ qua node_modues đang được sao chép)
  • Hiển thị cổng 5000 để chúng tôi có thể truy cập ứng dụng bên ngoài vùng chứa
  • Cuối cùng chạy npm start để bắt đầu phụ trợ (đảm bảo thêm npm start script trong gói. json)
Dockerizing MYSQL

Chúng ta đã tạo phụ trợ nodejs và Dockerfile.

Bây giờ hãy tạo hình ảnh docker MYSQL.
Đầu tiên vào thư mục gốc và trong thư mục gốc tạo một thư mục mới có tên là db và cd vào đó

mkdir db && cd db
touch testdump.sql
touch Dockerfile
  • Trong kết xuất thử nghiệm. sql, chúng tôi sẽ viết các truy vấn SQL bắt đầu sẽ chạy khi bộ chứa MYSQL khởi động.
    Chúng ta cần tạo một bảng Student và chèn một vài giá trị vào bên trong nó để chúng ta có thể truy vấn nó từ ứng dụng nodejs của mình.

Viết phần sau vào testdump. sql —

CREATE TABLE Student(
student_id INT PRIMARY KEY AUTO_INCREMENT,
student_name VARCHAR(60),
student_age INT
);
INSERT INTO Student(
student_name,
student_age)
VALUES(
"Shubham verma",
21
);
INSERT INTO Student(
student_name,
student_age)
VALUES(
"Utkarsh verma",
23
);
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;

Ở đây chúng tôi đã tạo một bảng Sinh viên và chèn 2 mục

Ngoài ra, bạn cần thay đổi quyền root của người dùng vì

docker run -dp 5000:5000 varsubham/sample_node
9 trong Nút (gói chúng tôi đã cài đặt với
docker run -dp 5000:5000 varsubham/sample_node
0 ) không hỗ trợ phương thức xác thực mặc định mới của MySQL 8
Đó là lý do tại sao chúng tôi cần .

Bây giờ hãy tạo Dockerfile cho hình ảnh MYSQL

FROM mysql EXPOSE 3306 COPY ./testdump.sql /docker-entrypoint-initdb.d/

Chúng tôi đã sử dụng MYSQL mới nhất làm hình ảnh gốc, hiển thị cổng mặc định (3306) và sao chép kết xuất thử nghiệm. sql sang docker-entrypoint-initdb. d (tất cả tập lệnh sql bên trong thư mục này sẽ thực thi khi vùng chứa khởi động)

Tạo tập tin docker-compose

Chúng ta đang gần hoàn tất. Chúng ta có thể xây dựng và chạy riêng cả hai docker container, nhưng cách hiệu quả là tạo một docker-compose. yaml (mô tả tất cả các cấu hình) để khởi động toàn bộ ứng dụng của chúng tôi bằng một lệnh duy nhất

Chúng tôi sẽ khởi tạo cơ sở dữ liệu thử nghiệm của mình bằng một lược đồ mẫu. Tải xuống kết xuất thử nghiệm. sql và đặt nó trong thư mục mysql-microservice cùng với Dockerfile

  • Tạo một thư mục dữ liệu nơi mysql sẽ lưu trữ nội dung của nó

    docker run -dp 5000:5000 varsubham/sample_node
    0. Chúng tôi sẽ chỉ định thư mục này trong khi chạy bộ chứa mysql của chúng tôi. Trên thư mục lưu trữ mặc định của Linux là
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    0 nhưng trong hướng dẫn này, chúng tôi sẽ sử dụng thư mục lưu trữ tùy chỉnh

  • Xây dựng hình ảnh với Dockerfile

    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    1 Lưu ý rằng chúng ta đang ở trong thư mục mysql-microservice.
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    2 sẽ là tên của hình ảnh của chúng tôi

  • Bạn có thể kiểm tra hình ảnh mới được tạo của mình bằng cách sử dụng

    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    3
    Docker nodejs kết nối với mysql

  • Chạy hình ảnh docker mới được tạo dưới dạng vùng chứa

    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    

  • Với lệnh trên, chúng tôi đã khởi động vùng chứa của mình ở chế độ tách rời

    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    4 và cổng máy chủ (máy của bạn) được ánh xạ 6603 với cổng vùng chứa 3306 (máy chủ mysql)
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    5. Chúng tôi cũng đang sử dụng thư mục lưu trữ dữ liệu tùy chỉnh của mình bằng cách chỉ định dung lượng đường dẫn máy chủ
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    6. Thay thế đường dẫn
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    7 thành đường dẫn tuyệt đối của thư mục dữ liệu mà bạn đã tạo trên hệ thống của mình. Chúng tôi cũng đang đặt tên vùng chứa của mình là test-mysql-microservice
    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    8

  • Kiểm tra nhật ký để xem mọi thứ có suôn sẻ không

    docker run  -d \
    --publish 6603:3306 \
    --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
    --name=test-mysql-microservice test-mysql
    
    9

  • Kiểm tra trạng thái vùng chứa của bạn

    mkdir db && cd db
    touch testdump.sql
    touch Dockerfile
    80
    Docker nodejs kết nối với mysql

  • Chúng tôi đã khởi chạy thành công vùng chứa mysql

  • Kết nối với bộ chứa mysql mới được khởi chạy từ máy chủ (tùy chọn)

    Để xác minh rằng bộ chứa test-mysql-microservice của chúng tôi đã hoạt động, chúng tôi sẽ kết nối với nó. Thực hiện theo các bước bên dưới nếu bạn đã cài đặt mysql (mysql-client) trên hệ thống của mình

    1. Kiểm tra ip của hệ thống của bạn. Trên Linux sử dụng

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      81. Hãy nói rằng ip là 192. 168. 43. 147

    2. Kết nối với bộ chứa test-mysql-microservice với các thông số sau- user-root, host=192. 168. 43. 147, cổng=6603, cơ sở dữ liệu=kiểm tra và mật khẩu=mật khẩu. Hãy nhớ rằng chúng tôi đã chỉ định tên người dùng và mật khẩu gốc trong Dockerfile. Ngoài ra, vùng chứa của chúng tôi được khởi tạo với test-dump. sql (một lược đồ với tên cơ sở dữ liệu kiểm tra)

    3. mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      82 Sử dụng mật khẩu=mật khẩu khi được nhắc và nhấn enter

    4. Nếu kết nối thành công bạn có thể xem mẫu bảng học sinh

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      83
      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      84 khi thực hiện xong.
      Docker nodejs kết nối với mysql

    Khởi chạy ứng dụng nodejs trong vùng chứa

    1. Ngay bây giờ chúng tôi đang ở thư mục mysql-microservice. Chúng tôi đi đến thư mục gốc của dự án

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      85

    2. tạo thư mục cho nút microservice

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      86

    3. Di chuyển đến thư mục này

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      87

    4. Tạo một Dockerfile với nội dung sau (tên của tệp sẽ là

      docker run -dp 5000:5000 varsubham/sample_node
      1)

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      8

    5. Chúng tôi cần một gói. json cho ứng dụng nút-microservice cũng như mã nguồn của chúng tôi. Đối với hướng dẫn này, tôi đã tạo một. Tải xuống gói. json cũng như chỉ mục. js và đặt nó vào trong thư mục nodejs-microservice cùng với Dockerfile

    6. Xây dựng hình ảnh với Dockerfile

      mkdir db && cd db
      touch testdump.sql
      touch Dockerfile
      89 Lưu ý rằng chúng tôi đang ở trong thư mục nodejs-microservice.
      CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      80 sẽ là tên của hình ảnh của chúng tôi

    7. Bạn có thể kiểm tra hình ảnh mới được tạo của mình bằng cách sử dụng

      docker run  -d \
      --publish 6603:3306 \
      --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
      --name=test-mysql-microservice test-mysql
      
      3
      Docker nodejs kết nối với mysql

    8. Chạy hình ảnh docker mới được tạo dưới dạng vùng chứa

      CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      8

    Docker nodejs kết nối với mysql

    1. Giải thích về lệnh trên-
    • docker run  -d \
      --publish 6603:3306 \
      --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
      --name=test-mysql-microservice test-mysql
      
      4 chạy ở chế độ tách rời
    • CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      83 ánh xạ cổng máy chủ 4000 tới cổng container 4000
    • CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      84 chuyển các biến môi trường cho ứng dụng nodejs cần thiết để tạo kết nối mysql (kiểm tra chỉ mục. tập tin js)
    • CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      85 liên kết đến vùng chứa có tên test-mysql-microservice và gọi nó là db
    • docker run  -d \
      --publish 6603:3306 \
      --volume=/home/varunkumar/getting-started-docker-mysql-nodejs/mysql-microservice/data:/var/lib/mysql \
      --name=test-mysql-microservice test-mysql
      
      8 đặt tên vùng chứa của chúng tôi là test-nodejs-microservice
    1. Cách biết MYSQL_HOST của bạn- Lưu ý rằng tôi đang sử dụng địa chỉ ip
      CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      87 làm MYSQL_HOST. Đây là Địa chỉ IP của bộ chứa test-mysql-microservice của chúng tôi. Bạn phải thay thế giá trị này thành ipAddress vùng chứa của bạn. Sử dụng
      CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      88

    Thử nghiệm ứng dụng hoàn chỉnh của chúng tôi

    Nếu mọi thứ vẫn ổn thì xin chúc mừng😄Bạn có một ứng dụng hoàn chỉnh chạy với hai vi dịch vụ. Để kiểm tra điều này, bạn có thể sử dụng lệnh CURL từ máy chủ của mình

    1. Nhận trang chủ của ứng dụng của bạn

      CREATE TABLE Student(
      student_id INT PRIMARY KEY AUTO_INCREMENT,
      student_name VARCHAR(60),
      student_age INT
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Shubham verma",
      21
      );
      INSERT INTO Student(
      student_name,
      student_age)
      VALUES(
      "Utkarsh verma",
      23
      );
      ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'; flush privileges;
      89

    2. Lấy danh sách tất cả học sinh từ cơ sở dữ liệu kiểm tra

      docker run -dp 5000:5000 varsubham/sample_node
      20 Tại đây 192. 168. 43. 147 là Địa chỉ IP máy chủ của tôi ________ 421