Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dockerfile for multiple Docker containers

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

like image 993
Katlock Avatar asked Dec 19 '22 19:12

Katlock


2 Answers

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.

like image 152
Paul Avatar answered Dec 28 '22 11:12

Paul


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.

like image 36
danday74 Avatar answered Dec 28 '22 10:12

danday74