Skip to main content
0
Back-End DeveloperDevInit

การใช้งาน Docker ในการ Deploy Application

Docker คือ Engine ที่ใช้สำหรับการจำลอง Environment แยกออกมาเป็น Container เพื่อให้เราสามารถที่จะจำลองแค่ส่วนที่จำเป็นในการรัน Service หรือ Application บน Container ที่แยกออกมาได้

สามาราถอ่านเพิ่มเติมได้ที่ https://www.borntodev.com/2020/02/26/docker-แบบสั้นๆ-ใน5นาที/

ประโยชน์/ข้อดี ของการ Deploy Application ด้วย Docker

สามารถจำลอง Environment ได้อย่างรวดเร็ว ช่วยให้สามารถแยกสภาพแวดล้อมการทำงานของแต่ละแอปพลิเคชันได้ และสามารถเปลี่ยน Version ใหม่ได้ง่าย

การติดตั้ง Docker Desktop

Docker Desktop ที่สามารถลงได้ทั้ง Windows / Mac / Linux

เข้าไปโหลดกันได้ที่ https://www.docker.com/products/docker-desktop/

เมื่อติดตั้งเรียบร้อยแล้วให้เปิด Terminal แล้ว Test Command Docker ดูว่าออกมาหรือไม่ ด้วยคำสั่ง

$ docker -v

ถ้าสามารถแสดง Version ของ Docker ได้ก็ถือว่าติดตั้งสำเร็จ (ไม่จำเป็นต้องเป็นเลข Version เดียวกัน)

มาลองสร้างเว็ปง่ายๆ และ Deploy บน Docker กัน

สำหรับคนที่ยังไม่มี Node.js สามารถติดตั้งได้ที่ https://nodejs.org/en

เริ่มต้นด้วยการสร้าง Folder สำหรับโปรเจคทดสอบขึ้นมา เช่น docker_test เปิด Terminal ขึ้นใน Folder นั้นแลพพิมพ์คำสั่งต่อไปนี้

$ npm init -y
$ npm install express

สร้างไฟล์ index.js

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.end("Hello, World");
});

const PORT = 8080;

app.listen(PORT, () => {
  console.log("Listening on port 8080");
});

ลองรันด้วยคำสั่ง

$ node index.js

และเข้าไปที่ http://localhost:8080/

หากไม่มีข้อผิดพลาดเกิดขึ้น จะพบกับหน้านี้

เมื่อทดลองว่าสามารถรันหน้าเว็ปผ่าน Node.js ได้แล้ว ให้หยุดด้วยการ กด Ctrl+C บน Terminal และหลังจากนี้เราจะเปลี่ยนมาใช้ Docker แทน

สร้างไฟล์สำหรับ Docker

Dockerfile ใช้สำหรับสร้าง Docker Image ซึ่งเป็นรูปแบบของคำสั่งที่กำหนดวิธีการสร้างและกำหนดความต้องการของแต่ละ Container

โดยการ New File แล้วใส่ชื่อว่า Dockerfile แล้วนำคำสั่งต่อไปนี้เขียนลงไปใน Dockerfile

FROM node:lts
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . ./
ENV PORT=8080
CMD [ "node", "index.js" ]
  • FROM คือ Images ต้นแบบที่เราจะใช้ (ซึ่งหากไม่มีใน Local ก็จะไปดึงจาก Docker Hub โดยอัติโนมัติ)
  • WORKDIR คือโฟลเดอร์ที่เรากำลังจะ Operation เหมือนกับการ cd เข้าไปยังโฟลเดอร์หนึ่ง
  • COPY คือการ COPY ไฟล์จากเครื่องเราไปใส่ไว้ใน Images
  • RUN รันคำสั่ง
  • ENV คือการกำหนดค่า Enviroment Variable
  • CMD คือการรันคำสั่ง รูปแบบ exec

หากเรา Build ตอนนี้การ COPY จะทำการคัดลอกไฟล์ทั้งหมดมา ซึ่งเราไม่ต้องการโฟลเดอร์ node_modules มาด้วย เราจึงต้องสร้างไฟล์ .dockerignore มาเพื่อกำหนดไฟล์ที่ไม่ต้องการคัดลอกได้

.dockerignore ใช้สำหรับกำหนดว่า Docker จะไม่ควรรวมไฟล์หรือโฟลเดอร์ใดในการสร้าง Docker Image ของเรา ซึ่งใช้เพื่อลดขนาดของ Docker Image และลดเวลาที่ใช้ในการสร้าง Image ด้วยการละเว้นไฟล์หรือโฟลเดอร์ที่ไม่จำเป็นตามความเหมาะสม

โดยการ New File แล้วใส่ชื่อว่า .dockerignore แล้วนำคำสั่งต่อไปนี้เขียนลงไปใน .dockerignore เพื่อระบุว่าจะไม่นำโฟรเดอร์ node_modules มารวมในการสร้าง Docker Image

node_modules

Build Docker Image

เปิด Docker Desktop ให้เรียบร้อย และกลับมาที่ Terminal

ใช้คำสั่งต่อไปนี้เพื่อให้ Docker สร้าง Images ตามไฟล์ Dockerfile ที่อยู่ในโฟลเดอร์ปัจจุบัน

$ docker build -t docker-test .

Run Docker Container

ใช้คำสั่งต่อไปนี้เพื่อ Run Docker Container ตาม Image ที่ระบุไว้

$ docker run --rm -p 8080:8080 docker-test

กลับไปที่ http://localhost:8080/

จะพบว่าสามารถรันหน้าเว็ปขึ้นด้วย Docker ได้สำเร็จ

สามารถหยุดการทำงานของ Container ได้โดยการใช้คำสั่ง เพื่อดู CONTAINER ID ของ IMAGE

$ docker ps -a

ใช้คำสั่งเพื่อหยุดการทำของ Container

$ docker stop [CONTAINER ID]

สามาราถอ่านเพิ่มเติมได้ที่ https://docs.docker.com/get-started/overview/

แหล่งอ้างอิง

https://littleboycoding.github.io/article/docker

https://medium.com/@limjoonae/dockerfile-and-dockercompose-greeting-f910290eeb3a

Chanarat Thongin

Author Chanarat Thongin

More posts by Chanarat Thongin

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า