DevOps

มาลองสร้าง Docker Image ไว้ใช้งานเองกันดีกว่า

ใช้ Docker Image มาเยอะแล้ว มาลองสร้าง Docker Image ไว้ใช้เองกันบ้าง

28 กรกฎาคม 20232 นาที
0
มาลองสร้าง Docker Image ไว้ใช้งานเองกันดีกว่า
Table of Contents

โดยส่วนตัวเวลาอยากใช้ image อะไรใน Docker ก็จะ pull มาจาก Docker hub ไม่ค่อยจะได้สร้างเองสักเท่าไหร่

ซึ่งในบทความนี้เราจะมาสร้าง Docker Image โดย Image ที่เราจะสร้างก็จะเป็น Web App ง่ายๆ ด้วย Express.js ซึ่งการทำงานก็ไม่มีอะไรมาก แค่แสดงข้อความ Hello World! 👋

🗂️ Folder Structure

เริ่มจาก เราสร้าง folder สำหรับโปรเจคกันก่อน จากนั้นสร้าง folder ชื่อ src และสร้างไฟล์ server.js ใน folder นั้น โดย structure ของโปรเจคจะเป็นแบบนี้

Folder Structure

📁 package.json

สร้างไฟล์ package.json ใน root folder ของโปรเจค โดยในไฟล์จะมีโค้ดประมาณนี้

{ "name": "docker-node", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "express": "^4.18.2" } }

จริงๆ ก็สามารถใช้ npm init -y สร้างไฟล์นี้ได้เหมือนกัน แล้วค่อยติดตั้ง express ด้วยคำสั่ง npm install express --save แต่มันก็จะให้ node_modules มาด้วยด้วย ซึ่งเราไม่ต้องการ

📡 server.js

ใน file server.js ก็เขียนโค้ดไว้ประมาณนี้ ใครที่เคยเขียน Express.js มาก่อน คงจะคุ้นเคยกันดี

JavaScript Logo
const express = require("express"); const app = express(); app.get("/", (req, res) => { res.send("Hello World! 👋"); }); app.listen(3000, () => { console.log("App listening on port 3000!"); });

🐳 Dockerfile

จากนั้นสร้างไฟล์ Dockerfile ใน root folder ของโปรเจค

FROM node:20-alpine3.17 COPY package.json /app/ COPY src /app/ WORKDIR /app RUN npm install CMD ["node","server.js"]

อธิบาย Dockerfile นี้

  • FROM node:20-alpine3.17 คือ เราจะใช้ image ของ node ซึ่งเป็น alpine 3.17 ในการสร้าง image ของเรา
  • COPY package.json /app/ คือ เราจะ copy file package.json ไปไว้ใน folder /app/ ใน image ของเรา
  • COPY src /app/ คือ เราจะ copy folder src ไปไว้ใน folder /app/ ใน image ของเรา
  • WORKDIR /app คือ เราจะเปลี่ยน working directory ใน image ของเราเป็น /app ง่ายๆ ก็คือ ให้ cd เข้าไปใน folder /app ใน image ของเรานั่นเอง
  • RUN npm install คือ เราจะ run command npm install ใน image ของเรา
  • CMD ["node","server.js"] คือ เราจะ run command node server.js ใน image ของเรา

💿 Docker Image

Bash Logo
docker build -t node-app:1.0.0 .
  • -t คือ tag ของ image ที่เราจะสร้าง
  • node-app:1.0.0 คือชื่อพร้อม tag ของ image ที่เราจะสร้าง
  • . คือ path ของ Dockerfile ที่เราจะใช้สร้าง image

🏃‍♂️ Run

Bash Logo
docker run -d -p 8000:3000 --name hello-node node-app:1.0.0
  • -d คือ ให้ container ทำงานใน background
  • -p 8000:3000 คือ ให้เรา map port 8000 ของเครื่องเราไปที่ port 3000 ของ container
  • --name hello-node คือ ให้เราตั้งชื่อ container เป็น hello-node
  • node-app:1.0.0 คือ ชื่อ image ที่เราได้สร้างไปก่อนหน้า

เสร็จแล้วลองใช้คำสั่ง docker-ps เพื่อดูว่า container ที่เราสร้างมานั้นทำงานอยู่หรือไม่

docker ps

👍 Result

ลองเปิด Browser แล้วเข้าไปที่ http://localhost:8000

Open on Browser at localhost:8000

เพียงเท่านี้เราก็จะได้ Image ไว้ใช้งานเองแล้ว ลองนำไปประยุกต์ใช้กับ App ที่คุณกำลังพัฒนากันดูนะครับ 😉

คลิกเพื่อแสดงความคิดเห็น