This is an old revision of the document!
Tasks
Normally, in order to run containers, we need to execute the corresponding run command (docker run) and set all the necessary parameters. This process can be difficult and repetitive when we need to start multiple containers. One way to “save” the running configuration is to create scripts. The problem with running multiple scripts is the loss of uniformity in configuration (which container connects to which network, who communicates with whom, etc.).
Docker Compose is a utility created by Docker that is used to centralise the configuration process of a container-based application in a declarative manner, using Yet Another Markup Language (YAML) configuration files.
Moreover, the format for Compose files is also used in Docker Swarm, the orchestrator created by Docker for managing Docker services, which we will discuss in lab 5.
For Windows and MacOS, Docker Compose is part of the Docker Desktop installation. For Linux, the installation is done according to the official guide.
YAML files are usually used to write declarative configurations. The format is very easy to understand and employ, as follows:
# docker-compose.yml version: "3.8" services: api: build: . # builds the image from a Dockerfile image: register-image-name:version # uses an image from a registry environment: ENVIRONMENT_VARIABLE: value ports: - "5000:80" networks: - lab4-network postgres: image: postgres:12 volumes: - lab4-volume:/var/lib/postgresql/ data - ./scripts/init-db.sql:/docker-entrypoint-init.d/init-db.sql networks: - lab4-network volumes: lab4-volume: networks: lab4-network:
The “version” attribute describes what functionalities will be loaded when running the Docker Compose utility.
The “services” attribute describes the services/containers that will run after the configuration is started by Compose. Each service represents a container that will have the name and configuration of the service. In the example above, the containers will be named api and postgres. The most important properties of services are the following: