7

I am working with Docker and I have a web-app that requires the following:

  1. Tomcat
  2. PostgreSQL
  3. MongoDB

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

1
  • 2
    docker-compose is meant for exactly this sort of situation. You should try it out and see if it meets your needs. Commented Feb 29, 2016 at 21:23

2 Answers 2

13

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.

Sign up to request clarification or add additional context in comments.

Comments

4

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.