= Docker Compose = '''Docker Compose''' is a method for creating containers through configuration files. <> ---- == Installation == Most [[Linux]] distributions offer a `docker-compose` package. ---- == Compose Files == === Volumes === Docker compose supports two methods for creating [[Docker/Volumes|volumes]] and [[Docker/BindMounts|bind mounts]]. The ''long'' syntax, which is recommended, is: {{{ container_name: my-container version: 0.1 services: web: image: my-image volumes: - type: bind source: relative/source/path target: /absolute/target/path read only: true }}} The ''short'' syntax is: {{{ container_name: my-container version: 0.1 services: web: image: my-image volumes: - relative/source/path:/absolute/target/path:ro }}} === Publishing === Docker compose supports two methods to expose a container to the network. The ''short'' syntax is: {{{ container_name: my-container version: 0.1 services: web: image: my-image ports: - 127.0.0.1:80:8080/tcp }}} If the host [[Protocols/IP|IP]] is not set, the service will listen on all interfaces. If the protocol is not specified, both [[Protocols/TCP|TCP]] and [[Protocols/UDP|UDP]] connections are accepted. So it can be expressed simply as: {{{ container_name: my-container version: 0.1 services: web: image: my-image ports: - 80:8080 }}} The ''long'' syntax is: {{{ container_name: my-container version: 0.1 services: web: image: my-image ports: - target: 80 host_ip: 127.0.0.1 published: "8080" protocol: tcp mode: host }}} In this syntax, `published` is a string because it can be expressed as a range (like `"8000-9000"`). === Environment Variables === To pass in an environment variable from the local environment to a Docker container, use: {{{ container_name: my-container version: 0.1 services: web: image: my-image environment: - VARIABLE1 - VARIABLE2 }}} ---- == See also == [[https://docs.docker.com/compose/compose-file/|Docker compose reference documentation]] ---- CategoryRicottone