Docker คือ ตอนที่ 3 : Docker อิมเมจ (Images)

  1. Docker Image คืออะไร
  2. สร้างอิมเมจ Docker แรกของคุณโดยใช้ Dockerfile
  3. การสร้างและเรียกใช้อิมเมจ Docker
  4. การพุช (Pushing) Docker Image ไปยัง Registry

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

1. Docker Image คืออะไร

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

อิมเมจ (Images) ประกอบด้วยชุดของเลเยอร์แบบอ่านอย่างเดียวที่ซ้อนทับกัน แต่ละเลเยอร์แสดงคำสั่งใน Dockerfile ของ Images ดังนั้น Dockerfile จึงเป็นพิมพ์เขียวสำหรับสร้างอิมเมจ ประกอบด้วยชุดคำแนะนำที่แจ้งให้ Docker ทราบว่า Images ควรมีลักษณะอย่างไรและแอปพลิเคชันจะทำงาน

สถาปัตยกรรมแบบเลเยอร์ของอิมเมจ Docker ช่วยให้สร้างและแชร์อิมเมจได้อย่างมีประสิทธิภาพ เนื่องจากแต่ละเลเยอร์จะถูกแคชไว้ และสามารถใช้ซ้ำได้ในหลายอิมเมจ เมื่อมีการอัปเดตหรือแก้ไข Images จำเป็นต้องอัปเดตเฉพาะเลเยอร์ที่เปลี่ยนแปลงเท่านั้น ซึ่งจะช่วยประหยัดพื้นที่จัดเก็บและเวลาในการอัปโหลด/ดาวน์โหลดเมื่อแบ่งปัน Images

2. สร้างอิมเมจ Docker แรกของคุณโดยใช้ Dockerfile

ในการสร้างอิมเมจ Docker เราใช้ไฟล์ Docker Dockerfile มีชุดคำสั่งที่ใช้โดย Docker daemon เพื่อสร้างอิมเมจ มาทำแอพ Node.js และ Dockerize กัน

ขั้นแรก สร้างไดเร็กทอรีสำหรับโครงการของคุณ:

mkdir my_node_app && cd my_node_app

ตอนนี้ เริ่มต้นแอปพลิเคชัน Node.js ของคุณ:

npm init -y

สิ่งนี้จะสร้างไฟล์ package.json ในไดเร็กทอรีของคุณ ตอนนี้มาติดตั้ง Express:

npm install express --save

จากนั้น สร้างไฟล์ใหม่ที่ชื่อว่า app.js และเพิ่มเนื้อหาต่อไปนี้:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello Docker!');
});

app.listen(port, () => {
  console.log(`App running on http://localhost:${port}`);
});

แอปพลิเคชันง่ายๆ ของคุณพร้อมแล้ว มาสร้าง Dockerfile ที่จะอนุญาตให้แอปพลิเคชันนี้ทำงานภายในคอนเทนเนอร์ Docker สร้างไฟล์ชื่อ Dockerfile ที่มีเนื้อหาต่อไปนี้:

# Use the official Node.js 14 image as a parent image
FROM node:14

# Set the working directory in the Docker image
WORKDIR /usr/src/app

# Copy the package.json and package-lock.json files to the new working directory
COPY package*.json ./

# Install the application dependencies inside the Docker image
RUN npm install

# Copy the rest of the application code to the working directory
COPY . .

# Expose port 3000 to have it mapped by Docker daemon
EXPOSE 3000

# Define the command to run the application
CMD [ "node", "app.js" ]

Dockerfile นี้สั่งให้ Docker ทำสิ่งต่อไปนี้:

  • เริ่มอิมเมจ Docker FROM ที่มีอยู่ก่อน node:14 นี่เป็นอิมเมจอย่างเป็นทางการ สร้างขึ้นโดยมูลนิธิ Node.js และจะติดตั้ง Node.js และ NPM ไว้ล่วงหน้า
  • ตั้งค่า WORKDIR เป็น /usr/src/app สิ่งนี้จะสร้างไดเร็กทอรีภายในอิมเมจ Docker สำหรับเก็บแอปพลิเคชันของเราและตั้งค่าเป็นไดเร็กทอรีการทำงาน
  • COPY และไฟล์ไปยังไดเร็กทอรีการทำงาน package.jsonใ หม่package-lock.json
  • RUN คำสั่ง npm install สิ่งนี้จะติดตั้งการพึ่งพาแอปพลิเคชันของเราในอิมเมจ
  • COPY แอปพลิเคชันที่เหลือของเราไปยังอิมเมจ Docker
  • EXPOSE พอร์ต3000 เพื่ออนุญาตการสื่อสารไปยังและจากคอนเทนเนอร์ Docker
  • ตั้งค่า CMD ให้เรียกใช้แอปพลิเคชันของเราโดยใช้ node app.js

3. การสร้างและเรียกใช้อิมเมจ Docker

ตอนนี้คุณสามารถสร้างอิมเมจ Docker โดยใช้คำสั่งต่อไปนี้:

docker build -t my_node_app .

คำสั่งนี้บอกให้ Docker สร้างอิมเมจโดยใช้ Dockerfile ในไดเร็กทอรีปัจจุบัน ( .) และแท็ก ( ) -t ด้วยชื่อ my_node_app Docker จะอ่านไฟล์ Docker ดำเนินการตามคำสั่ง และหากทุกอย่างเป็นไปด้วยดี คุณก็จะมีอิมเมจ Docker ที่พร้อมจะกลายเป็นคอนเทนเนอร์ที่กำลังทำงานอยู่

หากต้องการดูภาพที่คุณเพิ่งสร้างขึ้น ให้ใช้:

docker images

สุดท้าย เรียกใช้แอปพลิเคชันของคุณเป็นคอนเทนเนอร์ Docker:

docker run -p 3000:3000 -d my_node_app

ซึ่งจะบอกให้ Docker เรียกใช้คอนเทนเนอร์ตามmy_node_app อิมเมจ แมปพอร์ตที่เปิดเผย 3000 ของคอนเทนเนอร์กับพอร์ต 3000 ของเครื่องของคุณ และเรียกใช้คอนเทนเนอร์ในโหมดเดี่ยว ( -d)

ตอนนี้คุณสามารถเข้าถึงใบสมัครของคุณได้ที่ http://localhost:3000 คุณควรเห็น “Hello Docker!” แสดง

4. การพุช (Pushing) Docker Image ไปยัง Registry

หลังจากสร้างอิมเมจ Docker แล้ว คุณสามารถแชร์อิมเมจกับผู้อื่นได้โดยส่งไปยังรีจิสตรี Docker เช่น Docker Hub อันดับแรก แท็กอิมเมจด้วยชื่อผู้ใช้ Docker Hub ของคุณ:

docker tag my_node_app:latest yourusername/my_node_app:latest

จากนั้น พุชอิมเมจไปที่ Docker Hub:

docker push yourusername/my_node_app:latest

อย่าลืมแทนที่yourusernameด้วยชื่อผู้ใช้ Docker Hub ของคุณ ตอนนี้ใครก็ตามที่ติดตั้ง Docker สามารถดาวน์โหลดและเรียกใช้แอปพลิเคชันของคุณโดยใช้คำสั่งเดียว


อิมเมจ Docker เป็นวิธีที่มีประสิทธิภาพในการจัดแพ็คเกจแอปพลิเคชันด้วยการพึ่งพาและการกำหนดค่า คู่มือนี้ให้ข้อมูลเบื้องต้นเกี่ยวกับอิมเมจ Docker และแสดงวิธีทำแอพ Dockerized ด้วยแอปพลิเคชัน Dockerized ของคุณ คุณสามารถมั่นใจได้ว่าแอปพลิเคชันจะทำงานเหมือนกัน โดยไม่คำนึงว่าแอปพลิเคชันนั้นถูกปรับใช้ในสภาพแวดล้อมใด ดังนั้นจึงช่วยขจัดปัญหาที่น่าอับอาย “แต่ใช้งานได้กับเครื่องของฉัน”

เมื่อคุณทำงานกับ Docker ต่อไป คุณจะประทับใจกับความสะดวกสบายที่มีให้ Docker ไม่เพียงปรับปรุงการปรับใช้แอปพลิเคชันเท่านั้น แต่ยังเปิดประตูสู่แนวทางปฏิบัติต่างๆ เช่น การปรับขนาดด้วย Docker Compose การประสานกับ Kubernetes และอื่นๆ อีกมากมายในการทำแอพ


Docker คืออะไร

Docker คือ ตอนที่ 2 : ข้อมูลเบื้องต้น (Docker Basics)
Docker คือ ตอนที่ 4 : Docker (คอนเทนเนอร์) Containers