Đọc tệp hình ảnh nodejs

Mục tiêu của ví dụ này là chỉ cho bạn cách lấy một Nút. js vào bộ chứa Docker. Hướng dẫn này nhằm mục đích phát triển chứ không phải để triển khai sản xuất. Hướng dẫn cũng giả định rằng bạn có cài đặt Docker đang hoạt động và hiểu biết cơ bản về cách một Node. ứng dụng js được cấu trúc

Trong phần đầu tiên của hướng dẫn này, chúng ta sẽ tạo một ứng dụng web đơn giản trong Node. js, sau đó chúng tôi sẽ xây dựng hình ảnh Docker cho ứng dụng đó và cuối cùng chúng tôi sẽ khởi tạo một vùng chứa từ hình ảnh đó

Docker cho phép bạn đóng gói một ứng dụng với môi trường của nó và tất cả các phần phụ thuộc của nó vào một "hộp", được gọi là thùng chứa. Thông thường, một vùng chứa bao gồm một ứng dụng chạy trong phiên bản cơ bản của hệ điều hành Linux. Một hình ảnh là bản thiết kế cho một vùng chứa, một vùng chứa là một phiên bản đang chạy của một hình ảnh

Tạo nút. ứng dụng js

Đầu tiên, tạo một thư mục mới chứa tất cả các tệp. Trong thư mục này, hãy tạo một tệp

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
9 mô tả ứng dụng của bạn và các phần phụ thuộc của nó

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

Với tệp

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
9 mới của bạn, hãy chạy
touch Dockerfile
1. Nếu bạn đang sử dụng
touch Dockerfile
2 phiên bản 5 trở lên, điều này sẽ tạo ra một tệp
touch Dockerfile
3 sẽ được sao chép vào hình ảnh Docker của bạn

Sau đó, tạo tệp

touch Dockerfile
4 xác định ứng dụng web bằng cách sử dụng Express. khung js

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});

Trong các bước tiếp theo, chúng ta sẽ xem xét cách bạn có thể chạy ứng dụng này bên trong bộ chứa Docker bằng hình ảnh Docker chính thức. Trước tiên, bạn sẽ cần xây dựng hình ảnh Docker cho ứng dụng của mình

Tạo một Dockerfile

Tạo một tệp trống có tên là

touch Dockerfile
5

touch Dockerfile

Mở

touch Dockerfile
5 trong trình soạn thảo văn bản yêu thích của bạn

Điều đầu tiên chúng ta cần làm là xác định hình ảnh mà chúng ta muốn xây dựng từ. Ở đây chúng tôi sẽ sử dụng phiên bản LTS (hỗ trợ dài hạn) mới nhất

touch Dockerfile
7 của
touch Dockerfile
8 có sẵn từ Docker Hub

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
3

Tiếp theo chúng ta tạo một thư mục để chứa mã ứng dụng bên trong image, đây sẽ là thư mục làm việc cho ứng dụng của bạn

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
4

Hình ảnh này đi kèm với Node. js và NPM đã được cài đặt, vì vậy điều tiếp theo chúng ta cần làm là cài đặt các phụ thuộc ứng dụng của bạn bằng cách sử dụng mã nhị phân

touch Dockerfile
2. Xin lưu ý rằng nếu bạn đang sử dụng
touch Dockerfile
2 phiên bản 4 hoặc cũ hơn thì tệp
touch Dockerfile
3 sẽ không được tạo

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
8

Lưu ý rằng, thay vì sao chép toàn bộ thư mục làm việc, chúng tôi chỉ sao chép tệp

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
9. Điều này cho phép chúng tôi tận dụng các lớp Docker được lưu trong bộ nhớ cache. bitJudo có một lời giải thích tốt về điều này ở đây. Hơn nữa, lệnh
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
33, được chỉ định trong các nhận xét, giúp cung cấp các bản dựng nhanh hơn, đáng tin cậy, có thể tái sản xuất cho môi trường sản xuất. Bạn có thể đọc thêm về điều này ở đây

Để gói mã nguồn của ứng dụng bên trong hình ảnh Docker, hãy sử dụng hướng dẫn

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
34

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
2

Ứng dụng của bạn liên kết với cổng

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
35, vì vậy bạn sẽ sử dụng hướng dẫn
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
36 để ánh xạ ứng dụng bởi trình nền
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
37

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
6

Cuối cùng nhưng không kém phần quan trọng, hãy xác định lệnh để chạy ứng dụng của bạn bằng cách sử dụng

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
38 xác định thời gian chạy của bạn. Ở đây chúng tôi sẽ sử dụng
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
39 để khởi động máy chủ của bạn

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
9

touch Dockerfile
5 của bạn bây giờ sẽ trông như thế này

touch Dockerfile
1

tập tin dockerignore

Tạo tệp

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
41 trong cùng thư mục với tệp
touch Dockerfile
5 của bạn với nội dung sau

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
0

Điều này sẽ ngăn các mô-đun cục bộ và nhật ký gỡ lỗi của bạn bị sao chép vào hình ảnh Docker của bạn và có thể ghi đè lên các mô-đun được cài đặt trong hình ảnh của bạn

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

Chuyển đến thư mục chứa

touch Dockerfile
5 của bạn và chạy lệnh sau để xây dựng hình ảnh Docker. Cờ
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
44 cho phép bạn gắn thẻ hình ảnh của mình để dễ dàng tìm thấy sau này bằng cách sử dụng lệnh
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
45

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
1

Hình ảnh của bạn bây giờ sẽ được liệt kê bởi Docker

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
2

Chạy hình ảnh

Chạy hình ảnh của bạn với

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
46 sẽ chạy vùng chứa ở chế độ tách rời, để vùng chứa chạy ở chế độ nền. Cờ
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
47 chuyển hướng cổng công cộng sang cổng riêng bên trong vùng chứa. Chạy hình ảnh bạn đã tạo trước đó

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
3

In đầu ra của ứng dụng của bạn

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
4

Nếu bạn cần vào bên trong container, bạn có thể sử dụng lệnh

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
48

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
5

Bài kiểm tra

Để kiểm tra ứng dụng của bạn, hãy lấy cổng của ứng dụng mà Docker đã ánh xạ

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
6

Trong ví dụ trên, Docker đã ánh xạ cổng

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
35 bên trong vùng chứa tới cổng
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
80 trên máy của bạn

Bây giờ bạn có thể gọi ứng dụng của mình bằng cách sử dụng

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
81 (cài đặt nếu cần qua.
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
82)

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});
7

Tắt hình ảnh

Để tắt ứng dụng chúng tôi đã bắt đầu, chúng tôi chạy lệnh

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
83. Điều này sử dụng ID của vùng chứa, trong ví dụ này là
{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <[email protected]>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}
84