====== 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: