Dalam posting pengantar Dockerfile saya memperkenalkan contoh Dockerfile Node.js sederhana:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
CATATAN:gunakan tanda kutip ganda di
CMD
garis. Kutipan tunggal akan menghasilkan kesalahan.
Mari gunakan Dockerfile ini untuk membuat image, lalu jalankan container.
Saya akan membuat file ini di dev/docker/examplenode
map. Saya membuat aplikasi Node.js sederhana di app.js
file, menggunakan Express:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Server ready'))
Sangat sederhana, tetapi kami memiliki satu ketergantungan. Saya perlu menambahkannya ke package.json
file, jadi saya menjalankan
npm init -y
npm install express
Sekarang Anda dapat menjalankan node app.js
dan pastikan berhasil:
Hentikan proses ini dan mari buat Gambar Docker dari ini.
Yang Anda butuhkan hanyalah app.js
, package.json
dan package-lock.json
file.
Dan file Docker. Buat Dockerfile
file di folder yang sama, tanpa ekstensi (bukan Dockerfile.txt).
Anda dapat dengan bebas menghapus node_modules
folder yang sekarang berisi perpustakaan Express dan dependensinya, tetapi Anda juga dapat membuat .dockerignore
file dan tambahkan node_modules
di dalamnya, untuk membuat Docker mengabaikan folder ini sepenuhnya.
Ini berfungsi seperti .gitignore
di Git.
Jalankan perintah
docker build -t examplenode .
Perlu beberapa saat untuk mengunduh gambar Node dan menjalankan npm install
, maka Anda akan mendapatkan pesan sukses.
Penting untuk dicatat bahwa setelah Anda pertama kali mengunduh gambar dasar seperti node
yang kami gunakan di sini, yang akan di-cache secara lokal, jadi Anda tidak perlu mengunduhnya lagi dan proses pembuatan gambar akan jauh lebih cepat.
Sekarang kita dapat menjalankan container dari gambar:
docker run -d -p 3000:3000 --name node-app examplenode
Sekarang Anda dapat melihat gambar berjalan di Docker Desktop:
Dan Anda dapat mengklik tombol “Buka di browser” untuk membuka aplikasi yang berjalan pada port 3000:
Sama seperti sebelumnya! Kecuali sekarang aplikasi berjalan dalam wadahnya sendiri, sepenuhnya terisolasi, dan kami dapat menjalankan versi Node apa pun yang kami inginkan dalam wadah, dengan semua manfaat yang diberikan Docker kepada kami.
Misalnya Anda dapat menghapus wadah dan menjalankannya di port 80 alih-alih 3000, dengan:
docker run -d -p 80:3000 --name node-app examplenode
Gambar tidak perlu diubah, yang Anda ubah hanyalah pemetaan port. Ini hasilnya: