Docker je projekt s otevřeným zdrojovým kódem, který poskytuje otevřenou platformu pro vývojáře a správce systému pro vytváření, balení a spouštění aplikací kdekoli jako lehký kontejner. Docker automatizuje nasazení aplikací uvnitř softwarových kontejnerů.
Django je framework webových aplikací napsaný v pythonu, který sleduje architekturu MVC (Model-View-Controller). Je k dispozici zdarma a vydán pod licencí open source. Je rychlý a navržený tak, aby pomohl vývojářům dostat jejich aplikaci online co nejrychleji.
V tomto tutoriálu vám krok za krokem ukážu, jak vytvořit docker image pro existující projekt aplikace Django v Ubuntu 16.04. Dozvíme se o ukotvení aplikace python Django a poté aplikaci nasadíme jako kontejner do prostředí dockeru pomocí skriptu docker-compose.
Abychom mohli nasadit naši aplikaci python Django, potřebujeme další obrázky dockeru. Potřebujeme obrázek dockeru nginx pro webový server a obrázek PostgreSQL pro databázi.
Co uděláme?
- Nainstalujte Docker-ce
- Nainstalujte Docker-compose
- Konfigurace prostředí projektu
- Stavět a spustit
- Testování
Krok 1 – Instalace Docker-ce
V tomto tutoriálu nainstalujeme edici komunity docker-ce z úložiště docker. Nainstalujeme edici komunity docker-ce a docker-compose, které podporují soubor pro psaní verze 3.
Před instalací docker-ce nainstalujte potřebné závislosti dockeru pomocí příkazu apt.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Nyní přidejte klíč dockeru a úložiště spuštěním příkazů níže.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Aktualizujte úložiště a nainstalujte docker-ce.
sudo apt update
sudo apt install -y docker-ce
Po dokončení instalace spusťte službu docker a povolte její spuštění při každém spuštění systému.
systemctl start docker
systemctl enable docker
Dále přidáme nového uživatele s názvem 'omar' a přidáme ho do skupiny dockerů.
useradd -m -s /bin/bash omar
usermod -a -G docker omar
Přihlaste se jako uživatel omar a spusťte příkaz docker, jak je znázorněno níže.
su - omar
docker run hello-world
Ujistěte se, že dostanete zprávu hello-world od Docker.
Instalace Docker-ce byla dokončena.
Krok 2 – Instalace Docker-compose
V tomto tutoriálu budeme používat nejnovější podporu docker-compose pro soubor pro psaní verze 3. Docker-compose nainstalujeme ručně.
Stáhněte si nejnovější verzi docker-compose pomocí příkazu curl do adresáře '/usr/local/bin' a udělejte ji spustitelnou pomocí chmod.
Spusťte níže uvedené příkazy.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Nyní zkontrolujte verzi docker-compose.
docker-compose version
A ujistěte se, že máte nejnovější verzi docker-compose 1.21.
Byla nainstalována nejnovější verze docker-compose, která podporuje soubor pro psaní, verze 3.
Krok 3 – Konfigurace prostředí projektu
V tomto kroku nakonfigurujeme prostředí projektu python Django. Vytvoříme nový adresář 'guide01' a uděláme z něj hlavní adresář pro soubory našich projektů, jako je Dockerfile, projekt Django, konfigurační soubor nginx atd.
Přihlaste se k uživateli 'omar'.
su - omar
Vytvořte nový adresář 'guide01' a přejděte do adresáře.
mkdir -p guide01
cd guide01/
Nyní v adresáři 'guide01' vytvořte nové adresáře 'project' a 'config'.
mkdir project/ config/
Poznámka:
- Adresář 'project':Všechny naše soubory projektu python Django budou umístěny do tohoto adresáře.
- Adresář 'config':Adresář pro konfigurační soubory projektu, včetně konfiguračního souboru nginx, souboru požadavků python pip atd.
Vytvořit nový soubor requirements.txt
Dále vytvořte nový soubor 'requirements.txt' v adresáři 'config' pomocí příkazu vim.
vim config/requirements.txt
Vložte konfiguraci níže.
Django==2.0.4
gunicorn==19.7.0
psycopg2==2.7.4
Uložte a ukončete.
Vytvořte soubor virtuálního hostitele Nginx django.conf
V adresáři config vytvořte konfigurační adresář 'nginx' a přidejte konfigurační soubor virtuálního hostitele django.conf.
mkdir -p config/nginx/
vim config/nginx/django.conf
Zde vložte následující konfiguraci.
upstream web {
ip_hash;
server web:8000;
}
# portal
server {
location / {
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
location /static {
autoindex on;
alias /src/static/;
}
}
Uložte a ukončete.
Vytvořte soubor Dockerfile
Vytvořte nový 'Dockerfile' v adresáři 'guide01'.
Spusťte níže uvedený příkaz.
vim Dockerfile
Nyní vložte skript Dockerfile níže.
FROM python:3.5-alpine
ENV PYTHONUNBUFFERED 1
RUN apk update && \
apk add --virtual build-deps gcc python-dev musl-dev && \
apk add postgresql-dev bash
RUN mkdir /config
ADD /config/requirements.txt /config/
RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src
Uložte a ukončete.
Poznámka:
Chceme vytvořit obrazy Docker pro náš projekt Django založený na Alpine Linuxu, nejmenší velikosti Linuxu. Náš projekt Django poběží Alpine Linux s nainstalovaným pythonem 3.5 a přidá balíček postgresql-dev pro podporu databáze PostgreSQL. A pak nainstalujeme všechny balíčky pythonu uvedené v souboru 'requirements.txt' pomocí příkazu python pip a vytvoříme nové '/src' pro náš projekt.
Vytvořit skript Docker-compose
Pomocí níže uvedeného příkazu vim vytvořte soubor 'docker-compose.yml' v adresáři 'guide01'.
vim docker-compose.yml
Zde vložte následující konfiguraci.
version: '3'
services:
db:
image: postgres:10.3-alpine
container_name: postgres01
nginx:
image: nginx:1.13-alpine
container_name: nginx01
ports:
- "8000:8000"
volumes:
- ./project:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: django01
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./project:/src
expose:
- "8000"
restart: always
Uložte a ukončete.
Poznámka:
Pomocí tohoto skriptu docker-compose file vytvoříme tři služby. Vytvořte databázovou službu s názvem 'db' pomocí PostgreSQL alpine Linux, vytvořte službu 'nginx' znovu pomocí Nginx alpine Linuxu a vytvořte náš kontejner python Django pomocí vlastních obrázků dockeru generovaných z našeho Dockerfile.
Konfigurace projektu Django
Zkopírujte soubory projektu Django do adresáře 'project'.
cd ~/django
cp -r * ~/guide01/project/
Přejděte do adresáře 'project' a upravte nastavení aplikace 'settings.py'.
cd ~/guide01/project/
vim hello_django/settings.py
Poznámka:
Nasadíme jednoduchou aplikaci Django s názvem 'hello_django' app.
Na řádek 'ALLOW_HOSTS' přidejte název služby 'web'.
ALLOW_HOSTS = ['web']
Nyní změňte nastavení databáze. Budeme používat databázi PostgreSQL, která běží jako služba s názvem 'db' s výchozím uživatelem a heslem.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
A pro konfigurační adresář 'STATIC_ROOT' přidejte tento řádek na konec řádku souboru.
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Uložte a ukončete.
Nyní jsme připraveni vytvořit a spustit projekt Django pod kontejnerem docker.
Krok 4 – Vytvoření a spuštění obrazu Docker
V tomto kroku chceme vytvořit image Docker pro náš projekt Django pomocí konfigurace v adresáři 'guide01'.
Přejděte do adresáře 'guide01'.
cd ~/guide01/
Nyní vytvořte obrazy dockeru pomocí příkazu docker-compose.
docker-compose build
Spusťte všechny služby ve skriptu docker-compose.
docker-compose up -d
Počkejte několik minut, než Docker sestaví náš obraz Pythonu a stáhne obrazy dockeru nginx a postgresql.
A až to bude hotové, zkontrolujte spuštěné obrazy kontejneru a vypište obrázky dockeru v systému pomocí následujících příkazů.
docker-compose ps
docker-compose images
A nyní získáte tři spuštěné kontejnery a seznam obrazů Docker v systému, jak je znázorněno níže.
Naše aplikace Python Django nyní běží v kontejneru dockeru a byly vytvořeny obrázky dockeru pro naši službu.
Krok 5 – Testování
Otevřete webový prohlížeč a zadejte adresu serveru s portem 8000, moje je: http://ovh01:8000/
Nyní získáte výchozí domovskou stránku Django.
Dále otestujte stránku správce přidáním cesty '/admin' do adresy URL.
http://ovh01:8000/admin/
A uvidíte přihlašovací stránku správce Django.
Aplikace Dockerizing Python Django byla úspěšně dokončena.