This article describes the basic fields that can be configured in a Docker Compose YAML. It should help you bootstrap your Compose YAML and get your services up and running.
The fields described are available in Docker Compose YAML version 3.7. If your YAML version if different or you Docker Engine is too old, you might not be able to use all the fields.
What we’re gonna do is build-up the YAML from scratch, adding new fields as we require them.
Our initial docker-compose.yml looks like this:
version: '3.7' services: database:
In order to run a container you need to have an image which describes what the container includes. You can specify the value using the image field (key). The value can be a string that refers to an image from the Public Docker Hub or an URL for any other hub.
For example if you want to use the official postgres image from here, you would specify the name like this:
version: '3.7' services: database: image: postgres
Sometimes we need to use custom images that are created using custom made Dockerfile. You can specify which Dockerfile to use, and allocate a build context using the context and dockerfile fields.
version: '3.7' services: database: build: context: ./my_project_folder dockerfile: ./my_project_folder/Dockerfile
If you specify both image and build, then docker-compose names the resulting image from the build using the name specified as the image value.
The ports field allows configuration of the ports mapped between the container and the host machine.
You can specify multiple ports in the format: <HOST_PORT>:<CONTAINER_PORT>
version: '3.7' services: database: image: postgres ports: - 5432:5432