🐳 Как Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Docker ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Django Π² Ubuntu / Debian / CentOS

by itisgood

Π’ этом руководствС я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срСду Docker для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Django, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΅Ρ‰Π΅ находится Π½Π° стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π₯отя я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ubuntu 18.04, шаги ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ для любого дистрибутива Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ установки Docker ΠΈ docker-compose.

Π’ любом Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Ρƒ нас ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΡ‚ прСдпосылки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄ΠΎ VCS ΠΊ производству.

ΠœΡ‹ постараСмся ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΊΡƒΠ΄Π° приходят всС инструмСнты DevOps.

DevOps ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„Ρ€Π°Π·Ρƒ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Π»Π΅Ρ‚; «Но это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΌΠΎΠ΅ΠΌ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅!Β». ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Docker создаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ срСду для вашСго прилоТСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ!

УстановитС Docker Engine

Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π΄Π²ΠΈΠΆΠΎΠΊ Docker, установлСнный Π½Π° вашСм сСрвСрС / Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС.

Наши руководства ΠΏΠΎ установкС Docker Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Π½Π° CentOS / Debian / Ubuntu:

Настройка окруТаСния

Π― настроил Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ django-docker-dev-app.

НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Ρ„ΠΎΡ€ΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ / ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС ΠΏΠ°ΠΏΠΊΡƒ для хранСния вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
Моя рабочая ΠΏΠ°ΠΏΠΊΠ° называСтся django-docker-dev-app.
ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² вашСй IDE.

Dockerfile

Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдС всС прилоТСния находятся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π‘Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ состоят ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный ΠΎΠ±Ρ€Π°Π· ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub.

Dockerfile – это тСкстовый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Docker Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ для автоматичСского создания / построСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Наш Dockerfile пСрСчислит всС зависимости, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ нашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

$ nano Dockerfile
Π’ Ρ„Π°ΠΉΠ»Π΅ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
#base image
FROM python:3.7-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>=2.1.3,<2.2.0
djangorestframework>=3.9.0,<3.10.0
Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ исходный ΠΊΠΎΠ΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π·!
$ mkdir app
ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π·:
 $ docker build .
Π’ΠΎΡ‡ΠΊΠ° Π² ΠΊΠΎΠ½Ρ†Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Docker провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Dockerfile Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» Ρ„Π°ΠΉΠ» Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, ΠΌΡ‹ Π±Ρ‹ написали ΠΏΡƒΡ‚ΡŒ ΠΊ этому Ρ„Π°ΠΉΠ»Ρƒ.
Π—Π°Ρ‚Π΅ΠΌ Docker Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub для создания вашСго ΠΎΠ±Ρ€Π°Π·Π°.

ИспользованиС Docker Compose

Compose – это инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Docker.

Π‘ Compose Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» YAML для настройки слуТб вашСго прилоТСния.

Π—Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ создаСтС ΠΈ запускаСтС всС слуТбы ΠΈΠ· вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ потрСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ слуТб, для Π½Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΡƒΡŽ срСду.

НапримСр, Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для размСщСния нашСго внСшнСго интСрфСйса, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для размСщСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ для размСщСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ интСрфСйса ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ.

ΠœΡ‹ создадим Ρ„Π°ΠΉΠ» 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

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ сборки Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅: Successfully tagged 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.

Π’ΠΎΡ‚ ΠΈ всС ΠΏΠΎΠΊΠ°. Π― знаю это просто, ΠΈ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ рассмотрСли, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎ!

 

Loading

You may also like

Leave a Comment