Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker compose for production and development

So I use Python+Django (but it does not really matter for this question)

When I write my code I simply run

./manage.py runserver 

which does the webserver, static files, automatic reload, etc.

and and to put it on production I use series of commands like

./manage.py collectstatic
./manage.py migrate
uwsgi --http 127.0.0.1:8000 -w wsgi --processes=4

also I have few other services like postgres, redis (which are common for both production and dev)

So I'm trying to adapt here docker(+ -compose) and I cannot understand how to split prod/dev with it.

basically in docker-compose.yml you define your services and images - but in my case image in production should run one CMD and in dev another..

what are the best practices to achieve that ?

like image 280
Pydev UA Avatar asked Oct 31 '17 15:10

Pydev UA


People also ask

Can docker compose be used in production?

Docker-compose is just a tool for handling and configuring Docker containers. If you would be comfortable working with plain Docker commands in your environment, you can use docker-compose as well. The docker-compose docs even have a section about using docker-compose in production.

What is docker compose good for?

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. Then, with a single command, you create and start all the services from your configuration.

What is docker compose disadvantages?

Docker Compose fails to prove itself on reboots. In fact, it is only a wrapper around the Docker API. This means that you can not count on it running as a separate process. This way, all the YAML changes (including containers) are erased from Docker's memory once it restarts.


1 Answers

You should create additional docker-compose.yml files like docker-compose-dev.yml or docker-compose-pro.yml and override some of the original docker-compose.yml configuration with -f command:

docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

Sometimes, I also use different Dockerfile for different environments and specify dockerfile parameter in docker-compose-pro.yml build section, but I didn't recommend it because you will end with duplicated Dockerfiles.

Update

Docker has introduced multi-stage builds feature https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds which allow to create a Dockerfile for different environments.

like image 78
TlmaK0 Avatar answered Oct 29 '22 09:10

TlmaK0