====== LU06b - Docker-Compose-File ======
===== Ziele =====
-Ich verstehe die Struktur eines Docker-Compose-Files.
-Ich kann ein Docker-Compose-Files nach Vorgaben anpassen.
-Ich kann mögliche Fehlermeldung lesen und interpretieren.
-Ich kann mindestens eine Massnahme bei Fehlermeldung vorschlagen und umsetzen.
\\
===== Docker-Compose =====
Create a collection of interconnected containers, networks, and volumes with a single command.
==== Command-Line-Interface (CLI) ====
The most important commands regarding docker-compose:
docker-compose up: create all containers, networks and volumes described in our docker-compose file
docker-compose up -d: same as above, but run containers in detached mode
docker-compose -f up: create containers based on a different docker-compose file
docker-compose down: remove all containers and networks
docker-compose down -v: remove all containers, networks, and volumes
==== Docker-Compose file ====
The docker-compose tool uses files written in a data-serialization language called YAML (extension is .yml)
At the top level of each file, include the version of docker-compose, then you can list services (containers), plus any volumes or networks if necessary.
version: '3.8'
services:
# any services go here
networks:
# networks go here
volumes:
# volumes
services
# The next level down will be the name of the service/container.
=== Useful keywords ===
Keyword Purpose
* ''build'': specify where to find the Dockerfile to build image
* ''image'': can name a newly built image, or specify name of image to build from
* ''volumes'': specify volumes or bind mounts to connect to image
''networks'' will connect container to specified networks
''environment'' add environment variables
''ports'' publish ports
services:
service_name:
build:
context: ./folder_with_dockerfile
dockerfile: Dockerfile-alternate.Dockerfile
image: whatevername # like the -t flag when you are building your image
# if you don't have a build command, Docker will try to build from an existing image with that name
volumes:
# with a named volume - also list name under top-level volumes
- volume_name:/path/to/volume/on/container
# for bind mounts
- ./path/locally:/path/to/bind/mount/on/container
# by default, docker-compose will create a single network for all containers
networks:
- network_name
environment:
DATABASE_URL: postgresql://username:password/localhost
ANOTHER_VARIABLE: more-stuff
ports:
# :
-8000:80
second_service_name:
#... all the keywords for this service
=== Volumes ===
If you include any named volumes, list their names under the top-level “volumes” key.
volumes:
some_named_volume:
another_named_volume:
=== Networks ===
If you don’t specify a network, all the containers in the docker-compose file will be put onto one network together.
networks:
network_name:
second_network_name: