Cum să dockerizezi o aplicație Django pe Linux


În acest tutorial, vă voi arăta cum să configurați un mediu Docker pentru proiectul vostru Django atunci când sunteți încă în faza de dezvoltare. Deși folosesc Ubuntu 18.04, pașii rămân aceiași pentru orice distribuție Linux pe care o folosiți, cu excepția instalării Docker și docker-compose.

În orice proiect tipic de dezvoltare software, de obicei avem un proces de dezvoltare care începe de la premisa dezvoltatorului până la VCS și ulterior la producție. Vom încerca să respectăm regulile astfel încât să înțelegeți unde intervine fiecare instrument DevOps.

DevOps se concentrează pe eliminarea expresiei vechi: „Dar funcționează pe laptopul meu!”. Containerizarea cu Docker creează mediul de producție pentru aplicația ta astfel încât să poată fi implementată oriunde, dezvolți o dată, implementezi oriunde!

1) Instalează Docker Engine

Ai nevoie de un motor de rulare Docker instalat pe serverul sau pe calculatorul tău. Ghidurile noastre de instalare Docker ar trebui să fie de mare ajutor.

Cum să instalezi Docker pe CentOS/Debian/Ubuntu

2) Configurarea mediului

Am creat un repository GitHub pentru acest proiect numit django-docker-dev-app. Simțiți-vă liber să îl dați fork sau să îl clonați/descarcați.

Mai întâi, creează folderul pentru proiectul tău. Workspace-ul meu se numește django-docker-dev-app. Intra în folder, apoi deschide-l în IDE-ul tău.

Fișier Docker

Într-un mediu containerizat, toate aplicațiile trăiesc într-un container. Containerele în sine sunt alcătuite din mai multe imagini. Poți să-ți creezi propria imagine sau să folosești alte imagini de pe Docker Hub. Un Dockerfile este un document text Docker pe care Docker îl citește pentru a crea/construi automat o imagine. Dockerfile-ul nostru va lista toate dependențele necesare proiectului nostru.

Creează un fișier numit Dockerfile.

nano Dockerfile

În fișier tastați următoarele:

#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

Creează fișierul requirements.txt și adaugă cerințele proiectului tău.

Django
djangorestframework

Creează folderul app care va conține codul sursă. Acum suntem gata să construim imaginea noastră!

mkdir app

Deschide un terminal în proiectul tău și tastează următoarea comandă pentru a construi imaginea noastră:

 docker build .

La sfârșit, spune Docker să verifice dacă există un Dockerfile în același director; dacă ai fi avut fișierul într-o locație diferită, am fi scris calea către acel fișier. Apoi, Docker va apela imaginile necesare de pe Docker Hub pentru a crea imaginea ta.

Utilizarea Docker Compose

Din documentația Docker: Compose este un instrument pentru definirea și rularea aplicațiilor Docker cu mai multe containere. Cu Compose, folosești un fișier YAML pentru a configura serviciile aplicației tale. Apoi, cu o singură comandă, creezi și pornești toate serviciile din configurația ta.

  • Instalează Docker Compose pe Linux

Deoarece proiectul nostru va necesita o mulțime de servicii în viitor, este mai bine să creăm un mediu cu mai multe containere pentru acesta. De exemplu, s-ar putea să avem nevoie de un container pentru a găzdui interfața noastră, altul pentru a găzdui o bază de date și încă unul pentru a găzdui backend-ul atunci când trecem la o arhitectură de tip microservicii. Vom crea un fișier docker-compose care va defini diferitele servicii și containere de care proiectul nostru va avea nevoie.

Creează un fișier numit 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"

Rețineți formatul fișierului YAML!!! Avem un serviciu numit ddda (Aplicație Django Docker pentru Dezvoltare).

Suntem acum pregătiți să construim serviciul nostru:

docker-compose build

După o construcție reușită vezi: Etichetat cu succes djangodockerdevapp_ddda:latest

Aceasta înseamnă că imaginea noastră se numește djangodockerdevapp_ddda:latest și serviciul nostru se numește ddda

Acum rețineți că încă nu am creat proiectul nostru Django! Dacă ați urmat cu succes procedura de mai sus, atunci felicitări, ați configurat mediul Docker pentru proiectul dumneavoastră! În continuare, începeți dezvoltarea urmând pașii următori:

Creează proiectul Django:

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

Pentru a rula containerul dumneavoastră:

docker-compose up

Apoi vizitează http://localhost:8000/

Efectuează migrații

$ docker-compose exec ddda python manage.py migrate

De acum înainte vei rula comenzile Django ca și comanda de mai sus, adăugând comanda ta după numele serviciului ddda.

Gata pentru moment. Știu că este simplu și că sunt multe funcții pe care nu le-am acoperit, cum ar fi o bază de date, dar acesta este doar un început!

Proiectul este disponibil pe GitHub aici.

Mai multe despre Docker:

  • Export și Import imagini/containere Docker
  • Instalați Harbor Docker Image Registry pe CentOS/Debian/Ubuntu
  • Cum să rulezi clustere Kubernetes locale în Docker