I am working with Docker and I have a web-app that requires the following:
To install item 2 and 3 I do the following:
I can run a command for PostgreSQL like :
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
For Mongodb I run:
docker run --name some-mongo -d mongo
For Tomcat, I have a Dockerfile with Tomcat and copying my war to the apps folder. I build the image using Docker and run it.
My question is whether there is a better way to coordinate this step by step via separate script? Is Docker compose the solution for this?
thanks
A Dockerfile is a recipe for building an image, which is a template for starting containers. To describe a system that is made of multiple containers using standardized images, you would use docker-compose, not a new Dockerfile. You would use a Dockerfile to customize a pre-existing docker image, like mysql or node or ubuntu, for some specific use.
docker-compose
allows you to express multiple docker commands as a .yml file in a specific format.
You can then use docker-compose up
to start the set of containers.
The docker-compose .yml file for your example might start looking somewhat like this
some-postgres: environment: POSTGRES_PASSWORD:mysecretpassword image: postgres some-mongo: image: mongo
You would add links between the containers with a links:
line. These and other details are in the docs.
Basically docker-compose is just a yaml file implementation of docker run. As docker run has arguments passed to it, these exact same arguments are stipulated in docker compose in a yaml format instead of on the command line. Docker compose supports multiple containers too.
Docker compose has a few other nice features such as docker-compose logs , this command gives logs of all containers started by compose.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With