วิธีการทำ 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


