As my education with Docker continues, I'm finding I need to draw and sketch things out to match keywords, concepts, and what each does. A couple months ago, I got a Django app containerized and deployed to a server, and then played around with docker-compose
to see how I could spin up a local development environment while I was working on the application.
I came back to that today and realized that I couldn't immediately recall how all the pieces fit together. I took the time to map it all out in my head again, but this time I'm creating a visualization to help me quickly recall what the configuration does the next time I look at it.
I know that this will eventually become knowledge that I can analyze, evaluate and create on-demand, but until it is, visualization will help me get ramped up much faster.
Explanation
Running docker-compose up
executes the commands in the docker-compose.yml
file. That file gets two separate services running.
- nginx
- My container named
stevebrownlee/hubspotapps
which is the Django app.
The nginx
service maps host traffic on port 8080 to port 80 inside the container.
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
In the container, the nginx configuration proxies that incoming traffic to the Django app running on port 8084.
upstream hubspotapp {
server apphost:8084;
}
server {
listen 80;
server_name www.nomnomasaurus.com;
location / {
proxy_pass http://hubspotapp;
}
}
That server apphost:8084;
is important because the apphost
needs to match the name of the service in the docker-compose.yml
file.
apphost:
build: .
image: stevebrownlee/hubspotapps
container_name: hubspot_app
restart: always
volumes:
- .:/code
So, the nginx service directs traffic to the container created by the apphost
configuration, specifically to port 8084. Now, that's important because the Dockerfile
for the stevebrownlee/hubspotapps
container has an ENTRYPOINT script.
ENTRYPOINT [ "/entrypoint.sh" ]
When the container starts, that bash script will execute. It starts gunicorn listening on port 8084 in the container.
exec gunicorn -w 3 -b 0.0.0.0:8084 NssApplications.wsgi
This post was originally published on stevebrownlee.com.