Cara Dockerize API REST Node.js
Table of content:
Proses penggelaran dan menjalankan aplikasi di lingkungan yang berbeda dapat merepotkan karena ada beberapa faktor yang perlu dipertimbangkan seperti menyiapkan variabel lingkungan untuk mengonfigurasi dependensi yang diperlukan dan versi khusus dari paket perangkat lunak yang berbeda.
Namun, dengan memanfaatkan teknologi containerisasi Docker, Anda dapat menerapkan aplikasi di lingkungan yang berbeda dengan sedikit usaha dengan semua ketergantungan yang diperlukan dalam citra buruh pelabuhan. Artinya, Anda tidak perlu khawatir membuat konfigurasi apa pun. Hal ini membuat proses penggelaran dan menjalankan aplikasi di lingkungan yang berbeda menjadi mudah.
Apa itu Docker?
Buruh pelabuhan adalah platform pengembangan yang menyediakan alat dan lingkungan untuk mengemas aplikasi sebagai gambar portabel yang dapat dijalankan sebagai komponen mandiri yang dapat dieksekusi dalam wadah.
Kontainer ini merupakan kode aplikasi dan dependensi yang diperlukan agar aplikasi dapat berjalan dengan sukses di lingkungan runtime yang berbeda tanpa masalah.
Sebelum memulai, instal Docker di mesin lokal Anda. Periksa prasyarat khusus platform dan instruksi pemasangan dari dokumentasi resmi.
Buat REST API Node.js
Untuk memulai, buat server web Node.js.
Selanjutnya, instal paket yang diperlukan untuk proyek ini.
npm install morgan pg knex
Itu hal paket digunakan untuk membuat koneksi dengan database PostgreSQL. lututsebaliknya, menyediakan API sederhana untuk berinteraksi dengan PostgreSQL — Anda akan menggunakannya untuk menulis kueri SQL.
Terakhir, Anda akan menggunakan morgansebuah middleware yang mencatat permintaan dan respons HTTP di konsol, untuk men-debug dan memantau aplikasi Anda yang berjalan di container Docker.
Akhirnya, buka index.js file, dan tambahkan kode di bawah yang mengimplementasikan REST API sederhana dengan tiga rute.
const express = require("express")
const morgan = require("morgan")
const app = express()
const db = require('./db')
const PORT = process.env.PORT || 5000app.use(morgan('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get("https://www.makeuseof.com/", (req, res) => res.send('Hello World!' ))
app.get('/users', async (req, res) => {
const users = await db.select().from('users')
res.json(users)
})
app.post('/users', async (req, res) => {
const user = await db('users').insert({ name: req.body.name }).returning('*')
res.json(user)
})
app.listen(PORT, () => console.log(`Server up at PORT:${PORT}`))
Konfigurasi Koneksi Database
REST API akan berinteraksi dengan instance PostgreSQL Docker, namun, Anda harus terlebih dahulu mengonfigurasi koneksi database di aplikasi Anda. Di direktori root folder proyek Anda, buat a db.js file dan tambahkan kode di bawah ini.
const knex = require('knex')
module.exports = knex({
client: 'postgres',
connection: {
host: 'db',
user: 'testUser',
password: 'mypassword123',
database: 'testUser',
},
})
Siapkan File migrasi.js dan seed.js
Kedua file ini akan memungkinkan untuk membuat tabel di database dan mengisinya dengan data pengujian melalui API. Buat map baru, skripdi direktori root proyek Anda dan tambahkan dua file: migrasi.js Dan seed.js.
Dalam migrasi.js file, tambahkan kode di bawah ini:
const db = require('../db');
(async () => {
try {
await db.schema.dropTableIfExists('users')
await db.schema.withSchema('public').createTable('users', (table) => {
table.increments()
table.string('name')
})
console.log('Created users table!')
process.exit(0)
} catch (err) {
console.log(err)
process.exit(1)
}
})()
Kode ini akan membuat pengguna tabel dengan kolom id penambahan otomatis dan a nama kolom dalam database.
Selanjutnya, di seed.js file, tambahkan kode di bawah ini:
const db = require('../db');
(async () => {
try {
await db('users').insert({ name: 'Test User1' })
await db('users').insert({ name: 'Test User2' })
console.log('Added dummy users!')
process.exit(0)
} catch (err) {
console.log(err)
process.exit(1)
}
})()
Kode ini mengimplementasikan fungsi asinkron yang akan memasukkan dua pengguna ke dalam database PostgreSQL.
Terakhir, tambahkan perintah ini ke file Anda package.json mengajukan.
"scripts": {
"start": "node index.js",
"migrate": "node scripts/migrate.js",
"seed": "node scripts/seed.js" },
Karena Anda belum mengonfigurasi klien, untuk menguji API, Anda perlu menjalankan kedua file sebagai skrip di samping npm dijalankan memerintah.
Siapkan Dockerfile
Dockerfile menentukan instruksi yang diperlukan oleh mesin Docker untuk membuat image Docker. Di direktori root proyek Anda, buat file baru dan beri nama, Dockerfile. Kemudian, tambahkan instruksi berikut untuk membuat image Docker untuk aplikasi Node.js.
FROM node:16.3.0-alpine3.13
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8000
CMD [ "node", "index.js" ]
Mari kita uraikan:
- DARI – Instruksi ini menetapkan gambar dasar untuk aplikasi, yaitu gambar Alpine Node.js, versi ringan dari gambar Node.js yang dapat ditemukan di registri Docker.
- WORKDIR – set /aplikasi direktori sebagai direktori kerja.
- MENYALIN paket*.json./ – menginstruksikan Docker untuk menyalin semua file dengan format nama file tersebut dari direktori saat ini ke direktori /aplikasi map.
- BERLARI – mengeksekusi dan membangun gambar.
- MENYALIN . . – menyalin file sumber ke dalam /aplikasi map.
- MEMBUKA – ini menginstruksikan Docker untuk mengekspos port di dalam container ke lingkungan eksternal, dalam hal ini, mesin host.
- CMD – menentukan perintah yang akan dijalankan saat wadah Docker dibuat dari gambar.
Buat File Tulis Docker
Agar aplikasi Node.js dapat berinteraksi dengan instance PostgreSQL Docker, kedua aplikasi tersebut perlu dijalankan dalam wadah Docker dalam lingkungan jaringan yang sama.
Untuk alasan ini, Anda perlu mendefinisikan dan mem-build image aplikasi dan instance PostgreSQL menggunakan Docker Compose — alat yang memungkinkan Anda membuat dan mengelola beberapa container Docker.
Sederhananya, menggunakan Docker Compose, Anda dapat menentukan layanan yang membentuk aplikasi Anda sebagai satu kesatuan, dalam hal ini, REST API Node.js dan database PostgreSQL.
Buat berkas baru, docker-compose.ymldi direktori root dan tambahkan kode di bawah ini:
version: '3.9'services:
server:
build: .
ports:
- '5000:5000'
depends_on:
- db
db:
image: 'postgres'
ports:
- '4321:5432'
environment:
POSTGRES_PASSWORD: 'mypassword123'
POSTGRES_USER: 'testUser'
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
Kode ini akan membuat dan menjalankan dua wadah Docker. Wadah pertama, serverDocker Compose menggunakan Dockerfile untuk membuat image untuk container ini.
Ini juga menentukan bahwa wadah server tergantung pada db wadah. Artinya, server wadah harus dimulai setelah db wadah untuk terhubung dengannya.
Wadah kedua adalah wadah database PostgreSQL. Anda tidak perlu menentukan Dockerfile untuk container ini karena akan dibuat dari image PostgreSQL di registry image Docker.
Bangun Gambar Docker
Gunakan perintah Docker Compose untuk membuat image dan memulai kedua container.
docker-compose up -d
Anda akan melihat respons serupa setelah proses berhasil diselesaikan.
Uji REST API
Jalankan perintah di bawah ini untuk menguji REST API yang berjalan di wadah Docker. Itu harus membuat tabel di database PostgreSQL.
docker exec docker_node-server-1 npm run migrate
Anda akan melihat respons yang serupa.
Berbagi Gambar Docker
Langkah terakhir adalah mendorong image Docker untuk aplikasi Node.js Anda ke Docker Hub. Ini mirip dengan mendorong proyek Anda ke GitHub.
- Pergilah ke Docker Hub dan daftar akun dan masuk ke dasbor pengguna.
- Selanjutnya, klik Buat Repositori. Berikan nama repositori Anda dan setel visibilitasnya ke keduanya Publik atau Pribadi lalu klik Membuat.
- Untuk mendorong gambar Docker aplikasi Anda ke Docker Hub, pertama-tama Anda harus masuk ke akun Anda melalui terminal dan kemudian memberikan nama pengguna dan kata sandi Anda.
docker login
- Selanjutnya, perbarui nama gambar Docker Anda agar sesuai dengan format ini:
/ . Jalankan perintah di bawah ini untuk melakukan perubahan ini:
docker tag <image> <your docker username>/<repo name>
- Terakhir, dorong gambar Docker Anda.
docker push <image>/< repo name>
Menggunakan Docker dalam Pengembangan
Panduan ini hanya menyentuh sebagian kecil dari potensi yang ditawarkan Docker. Namun, Anda sekarang dapat menggunakan teknologi containerisasi Docker untuk mengemas aplikasi apa pun dan semua dependensinya sebagai image yang dapat diterapkan dalam pengembangan yang berbeda, serta lingkungan produksi seperti cloud tanpa gangguan apa pun.