Workshop: Deploy Django, Gunicorn, NGINX, Postgresql using Docker
Project Directory
$ mkdir djangoprj
$ mkdir config
$ mkdir config/nginx
$ touch Dockerfile
$ touch docker-compose.yml
$ python3 -m venv venv36
$ source venv36/bin/activate
(venv36) $ pip install django psycopg2
$ django-admin startproject taladdee
$ mv taladdee src
edit database configuration
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': 5432,
}
}
nginx config
$ cat taladdee.conf
upstream web {
ip_hash;
server web:8000;
}
# portal
server {
location / {
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}
docker-conpose.yml
version: '3'
services:
nginx:
image: nginx:1.13.7-alpine
container_name: ng01
ports:
- "8000:8000"
volumes:
- ./src:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
image: djangoapp:1.0.0
container_name: dg01
command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn taladdee.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./src:/src
expose:
- "8000"
db:
image: postgres:10.1-alpine
container_name: ps01
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
django
docker-compose up -d
docker-compose stop
#Nginx
docker exec -ti nginx bash
#Web
docker exec -ti web bash
#Database
docker exec -ti db bash
for logs
#Nginx
docker-compose logs nginx
#Web
docker-compose logs web
#DB
docker-compose logs db
Manage Databae
postgres=# \connect postgres
You are now connected to database "postgres" as user "postgres".
postgres=# \l
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
$ python3 -m venv venv36
Useful Docker Commands (use with care)
View docker images
docker images
List actively running images (add -l to include stopped containers)
docker ps
View container logs
docker logs -f <containerID>
Stop container
docker stop <containerID>
Delete dead images
for i in `docker images|grep \<none\>|awk '{print $3}'`;do docker rmi $i;done
Delete containers
docker rm -f `docker ps --no-trunc -a -q`