ค้นหาเว็บไซต์

วิธีการทำ Dockerize แอปพลิเคชัน Django บน Linux


ในบทช่วยสอนนี้ ผมจะแสดงวิธีการตั้งค่าสภาพแวดล้อม Docker สำหรับโปรเจกต์ Django ของคุณในช่วงที่ยังอยู่ในขั้นตอนการพัฒนา แม้ว่าผมจะใช้ Ubuntu 18.04 ขั้นตอนต่าง ๆ ก็ยังคงเหมือนเดิมสำหรับการใช้ Linux distro ใด ๆ ยกเว้นขั้นตอนการติดตั้ง Docker และ docker-compose

ในโครงการพัฒนาซอฟต์แวร์ทั่วไป เรามักจะมีขั้นตอนการพัฒนาที่เริ่มจากข้อกำหนดของผู้พัฒนา ไปยังระบบควบคุมเวอร์ชัน (VCS) จนถึงการใช้งานจริง เราจะพยายามยึดตามกฎเพื่อให้คุณเข้าใจว่าเครื่องมือ DevOps แต่ละตัวเข้ามาในขั้นตอนไหน

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

1) ติดตั้ง Docker Engine

คุณจำเป็นต้องติดตั้ง Docker runtime engine บนเซิร์ฟเวอร์หรือเดสก์ท็อปของคุณ คู่มือการติดตั้ง Docker ของเราน่าจะช่วยได้มาก

วิธีติดตั้ง Docker บน CentOS/Debian/Ubuntu

2) การตั้งค่าสภาพแวดล้อม

ฉันได้สร้างรีโป GitHub สำหรับโปรเจกต์นี้ชื่อว่า django-docker-dev-app คุณสามารถ fork หรือโคลน/ดาวน์โหลดมันได้ตามสบาย

ก่อนอื่น สร้างโฟลเดอร์เพื่อเก็บโปรเจกต์ของคุณ โฟลเดอร์เวิร์กสเปซของฉันชื่อว่า django-docker-dev-app เข้าไปในโฟลเดอร์นั้นแล้วเปิดมันใน IDE ของคุณ

ไฟล์ Docker

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

สร้างไฟล์ชื่อ Dockerfile.

nano Dockerfile

ในไฟล์ให้พิมพ์สิ่งต่อไปนี้:

#base image
FROM python:3.9-alpine

#maintainer
LABEL Author="CodeGenes"

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1

#copy requirements file to image 
COPY ./requirements.txt /requirements.txt

#let pip install required packages
RUN pip install -r requirements.txt

#directory to store app source code
RUN mkdir /app

#switch to /app directory so that everything runs from here
WORKDIR /app

#copy the app code to image working directory
COPY ./app /app

#create user to run the app(it is not recommended to use root)
#we create user called user with -D -> meaning no need for home directory
RUN adduser -D user

#switch from root to user to run our app
USER user

สร้างไฟล์ requirements.txt และเพิ่มความต้องการของโปรเจกต์ของคุณ

Django
djangorestframework

สร้างโฟลเดอร์ app ที่จะเก็บซอร์สโค้ด ตอนนี้เราพร้อมที่จะสร้างอิมเมจของเราแล้ว!

mkdir app

เปิดเทอร์มินัลในโปรเจกต์ของคุณแล้วพิมพ์คำสั่งต่อไปนี้เพื่อสร้างอิมเมจของเรา:

 docker build .

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

การใช้ Docker Compose

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

  • ติดตั้ง Docker Compose บนลินุกซ์

เนื่องจากโครงการของเราจะต้องใช้บริการหลายอย่างในอนาคต จึงควรสร้างสภาพแวดล้อมแบบหลายคอนเทนเนอร์สำหรับโครงการนี้ ตัวอย่างเช่น เราอาจต้องใช้คอนเทนเนอร์หนึ่งสำหรับโฮสต์ส่วนหน้า อีกคอนเทนเนอร์สำหรับโฮสต์ฐานข้อมูล และอีกคอนเทนเนอร์สำหรับโฮสต์แบ็กเอนด์เมื่อเราสลับไปใช้สถาปัตยกรรมไมโครเซอร์วิส เราจะสร้างไฟล์ docker-compose ที่จะกำหนดบริการและคอนเทนเนอร์ต่าง ๆ ที่โครงการของเราต้องการ

สร้างไฟล์ชื่อ docker-compose.yml

version: "3"
services:
  ddda:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"

โปรดสังเกตฟอร์แมตไฟล์ YAML!!! เรามีบริการหนึ่งชื่อ ddda (Django Docker Dev App)

ตอนนี้เราพร้อมที่จะสร้างบริการของเราแล้ว:

docker-compose build

หลังจากการสร้างสำเร็จ คุณจะเห็นว่า: ติดแท็ก djangodockerdevapp_ddda:latest สำเร็จ

มันหมายความว่าภาพของเราถูกเรียกว่า djangodockerdevapp_ddda:latest และบริการของเราถูกเรียกว่า ddda

ขอให้สังเกตว่า ตอนนี้เรายังไม่ได้สร้างโปรเจกต์ Django ของเรานะ! หากคุณทำตามขั้นตอนด้านบนสำเร็จ แสดงว่า ยินดีด้วย คุณได้ตั้งค่าสภาพแวดล้อม Docker สำหรับโปรเจกต์ของคุณเรียบร้อยแล้ว ต่อไป ให้เริ่มพัฒนาของคุณโดยทำตามขั้นตอนดังนี้:

สร้างโปรเจกต์ Django:

 docker-compose run ddda sh -c “django-admin.py startproject app .”

เพื่อรันคอนเทนเนอร์ของคุณ:

docker-compose up

จากนั้นเยี่ยมชม http://localhost:8000/

สร้างการโยกย้าย

$ docker-compose exec ddda python manage.py migrate

ตั้งแต่นี้ไปคุณจะรันคำสั่ง Django เหมือนกับคำสั่งข้างต้น โดยเพิ่มคำสั่งของคุณหลังชื่อบริการ ddda

นั่นแหละสำหรับตอนนี้ ฉันรู้ว่ามันง่ายและยังมีฟีเจอร์อีกมากที่เรายังไม่ได้พูดถึง เช่น ฐานข้อมูล แต่นี่ก็ถือเป็นการเริ่มต้น!

โครงการนี้สามารถดูได้บน GitHub ที่นี่

เพิ่มเติมเกี่ยวกับ Docker:

  • ส่งออกและนำเข้าภาพ/คอนเทนเนอร์ Docker
  • ติดตั้ง Harbor Docker Image Registry บน CentOS/Debian/Ubuntu
  • วิธีการรันคลัสเตอร์ Kubernetes แบบโลคอลใน Docker