diff --git a/_data/toc.yaml b/_data/toc.yaml index 799db89483..181773e728 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1072,8 +1072,6 @@ reference: title: Version 3 - path: /compose/compose-file/compose-file-v2/ title: Version 2 - - path: /compose/compose-file/compose-file-v1/ - title: Version 1 - path: /compose/compose-file/compose-versioning/ title: About versions and upgrading - path: /compose/faq/ diff --git a/compose/compose-file/compose-file-v1.md b/compose/compose-file/compose-file-v1.md deleted file mode 100644 index 6c53cca430..0000000000 --- a/compose/compose-file/compose-file-v1.md +++ /dev/null @@ -1,700 +0,0 @@ ---- -description: Compose file reference -keywords: fig, composition, compose version 1, docker -title: Compose file version 1 reference -toc_max: 4 -toc_min: 1 -sitemap: false ---- - ->**Deprecated** -> -> Docker Compose file version 1 has been deprecated. We recommend that you move to the latest Compose specification. For more information, see [Compose file reference](index.md). -{: .warning } - -## Reference and guidelines - -These topics describe version 1 of the Compose file format. This is the oldest -version. - -## Compose and Docker compatibility matrix - -There are several versions of the Compose file format – 1, 2, 2.x, and 3.x The -table below is a quick look. For full details on what each version includes and -how to upgrade, see **[About versions and upgrading](compose-versioning.md)**. - -{% include content/compose-matrix.md %} - -## Service configuration reference - -The Version 1 Compose file is a [YAML](https://yaml.org) file that defines [services](#service-configuration-reference). - -The default path for a Compose file is `./docker-compose.yml`. - -> **Tip**: You can use either a `.yml` or `.yaml` extension for this file. -> They both work. - -A service definition contains configuration which is applied to each -container started for that service, much like passing command-line parameters to -`docker run`. - -As with `docker run`, options specified in the Dockerfile, such as `CMD`, -`EXPOSE`, `VOLUME`, `ENV`, are respected by default - you don't need to -specify them again in `docker-compose.yml`. - -This section contains a list of all configuration options supported by a service -definition in version 1. - -### build - -Configuration options that are applied at build time. - -`build` can specified as a string containing a path to the build -context. - -```yaml -build: ./dir -``` - -> **Note** -> -> In [version 1 file format](compose-versioning.md#version-1), `build` is -> different in two ways: -> -> * Only the string form (`build: .`) is allowed - not the object -> form that is allowed in Version 2 and up. -> * Using `build` together with [`image`](#image) is not allowed. -> Attempting to do so results in an error. - -#### dockerfile - -Alternate Dockerfile. - -Compose uses an alternate file to build with. A build path must also be -specified. - -```yaml -build: . -dockerfile: Dockerfile-alternate -``` - -> **Note** -> -> In the [version 1 file format](compose-versioning.md#version-1), `dockerfile` -> is different from newer versions in two ways: -> -> * It appears alongside `build`, not as a sub-option: -> * Using `dockerfile` together with [`image`](#image) is not allowed. -> Attempting to do so results in an error. - -### cap_add, cap_drop - -Add or drop container capabilities. -See `man 7 capabilities` for a full list. - -```yaml -cap_add: - - ALL - -cap_drop: - - NET_ADMIN - - SYS_ADMIN -``` - -> **Note**: These options are ignored when -> [deploying a stack in swarm mode](../../engine/reference/commandline/stack_deploy.md) -> with a (version 3) Compose file. - -### command - -Override the default command. - -```yaml -command: bundle exec thin -p 3000 -``` - -The command can also be a list, in a manner similar to -[dockerfile](../../engine/reference/builder.md#cmd): - -```yaml -command: ["bundle", "exec", "thin", "-p", "3000"] -``` - -### cgroup_parent - -Specify an optional parent cgroup for the container. - -```yaml -cgroup_parent: m-executor-abcd -``` - -### container_name - -Specify a custom container name, rather than a generated default name. - -```yaml -container_name: my-web-container -``` - -Because Docker container names must be unique, you cannot scale a service -beyond 1 container if you have specified a custom name. Attempting to do so -results in an error. - -### devices - -List of device mappings. Uses the same format as the `--device` docker -client create option. - -```yaml -devices: - - "/dev/ttyUSB0:/dev/ttyUSB0" -``` - -### dns - -Custom DNS servers. Can be a single value or a list. - -```yaml -dns: 8.8.8.8 -``` - -```yaml -dns: - - 8.8.8.8 - - 9.9.9.9 -``` - -### dns_search - -Custom DNS search domains. Can be a single value or a list. - -```yaml -dns_search: example.com -``` - -```yaml -dns_search: - - dc1.example.com - - dc2.example.com -``` - -### entrypoint - -Override the default entrypoint. - -```yaml -entrypoint: /code/entrypoint.sh -``` - -The entrypoint can also be a list, in a manner similar to -[dockerfile](../../engine/reference/builder.md#entrypoint): - -```yaml -entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"] -``` - -> **Note**: Setting `entrypoint` both overrides any default entrypoint set -> on the service's image with the `ENTRYPOINT` Dockerfile instruction, *and* -> clears out any default command on the image - meaning that if there's a `CMD` -> instruction in the Dockerfile, it is ignored. - -### env_file - -Add environment variables from a file. Can be a single value or a list. - -If you have specified a Compose file with `docker-compose -f FILE`, paths in -`env_file` are relative to the directory that file is in. - -Environment variables declared in the [environment](#environment) section -_override_ these values – this holds true even if those values are -empty or undefined. - -```yaml -env_file: .env -``` - -```yaml -env_file: - - ./common.env - - ./apps/web.env - - /opt/runtime_opts.env -``` - -Compose expects each line in an env file to be in `VAR=VAL` format. Lines -beginning with `#` are processed as comments and are ignored. Blank lines are -also ignored. - -```console -# Set Rails/Rack environment -RACK_ENV=development -``` - -> **Note**: If your service specifies a [build](#build) option, variables -> defined in environment files are _not_ automatically visible during the -> build. - -The value of `VAL` is used as is and not modified at all. For example if the -value is surrounded by quotes (as is often the case of shell variables), the -quotes are included in the value passed to Compose. - -Keep in mind that _the order of files in the list is significant in determining -the value assigned to a variable that shows up more than once_. The files in the -list are processed from the top down. For the same variable specified in file -`a.env` and assigned a different value in file `b.env`, if `b.env` is -listed below (after), then the value from `b.env` stands. For example, given the -following declaration in `docker-compose.yml`: - -```yaml -services: - some-service: - env_file: - - a.env - - b.env -``` - -And the following files: - -```console -# a.env -VAR=1 -``` - -and - -```console -# b.env -VAR=hello -``` - -`$VAR` is `hello`. - -### environment - -Add environment variables. You can use either an array or a dictionary. Any -boolean values (true, false, yes, no) need to be enclosed in quotes to ensure -they are not converted to True or False by the YML parser. - -Environment variables with only a key are resolved to their values on the -machine Compose is running on, which can be helpful for secret or host-specific values. - -```yaml -environment: - RACK_ENV: development - SHOW: 'true' - SESSION_SECRET: -``` - -```yaml -environment: - - RACK_ENV=development - - SHOW=true - - SESSION_SECRET -``` - -> **Note**: If your service specifies a [build](#build) option, variables -> defined in `environment` are _not_ automatically visible during the -> build. - -### expose - -Expose ports without publishing them to the host machine - they'll only be -accessible to linked services. Only the internal port can be specified. - -```yaml -expose: - - "3000" - - "8000" -``` - -### extends - -Extend another service, in the current file or another, optionally overriding -configuration. - -You can use `extends` on any service together with other configuration keys. -The `extends` value must be a dictionary defined with a required `service` -and an optional `file` key. - -```yaml -extends: - file: common.yml - service: webapp -``` - -The `service` the name of the service being extended, for example -`web` or `database`. The `file` is the location of a Compose configuration -file defining that service. - -If you omit the `file` Compose looks for the service configuration in the -current file. The `file` value can be an absolute or relative path. If you -specify a relative path, Compose treats it as relative to the location of the -current file. - -You can extend a service that itself extends another. You can extend -indefinitely. Compose does not support circular references and `docker-compose` -returns an error if it encounters one. - -For more on `extends`, see the -[the extends documentation](../extends.md#extending-services). - -### external_links - -Link to containers started outside this `docker-compose.yml` or even outside of -Compose, especially for containers that provide shared or common services. -`external_links` follow semantics similar to `links` when -specifying both the container name and the link alias (`CONTAINER:ALIAS`). - -```yaml -external_links: - - redis_1 - - project_db_1:mysql - - project_db_1:postgresql -``` - -### extra_hosts - -Add hostname mappings. Use the same values as the docker client `--add-host` parameter. - -```yaml -extra_hosts: - - "somehost:162.242.195.82" - - "otherhost:50.31.209.229" -``` - -An entry with the ip address and hostname is created in `/etc/hosts` inside containers for this service, e.g: - -```console -162.242.195.82 somehost -50.31.209.229 otherhost -``` - -### image - -Specify the image to start the container from. Can either be a repository/tag or -a partial image ID. - -```yaml -image: redis -``` -```yaml -image: ubuntu:18.04 -``` -```yaml -image: tutum/influxdb -``` -```yaml -image: example-registry.com:4000/postgresql -``` -```yaml -image: a4bc65fd -``` - -If the image does not exist, Compose attempts to pull it, unless you have also -specified [build](#build), in which case it builds it using the specified -options and tags it with the specified tag. - -> **Note**: In the [version 1 file format](compose-versioning.md#version-1), -> using [`build`](#build) together with `image` is not allowed. Attempting to do -> so results in an error. - -### labels - -Add metadata to containers using [Docker labels](../../config/labels-custom-metadata.md). You can use either an array or a dictionary. - -It's recommended that you use reverse-DNS notation to prevent your labels from conflicting with those used by other software. - -```yaml -labels: - com.example.description: "Accounting webapp" - com.example.department: "Finance" - com.example.label-with-empty-value: "" -``` - -```yaml -labels: - - "com.example.description=Accounting webapp" - - "com.example.department=Finance" - - "com.example.label-with-empty-value" -``` - -### links - -Link to containers in another service. Either specify both the service name and -a link alias (`"SERVICE:ALIAS"`), or just the service name. - -> Links are a legacy option. We recommend using -> [networks](../networking.md) instead. - -```yaml -web: - links: - - "db" - - "db:database" - - "redis" -``` - -Containers for the linked service are reachable at a hostname identical to -the alias, or the service name if no alias was specified. - -Links also express dependency between services in the same way as -[depends_on](compose-file-v2.md#depends_on), so they determine the order of service startup. - -> **Note** -> -> If you define both links and [networks](compose-file-v3.md#networks), services with -> links between them must share at least one network in common in order to -> communicate. - -#### link environment variables - -> [Version 1 file format](compose-versioning.md#version-1) only. In version 2 and -> up, custom networks are used, and no environment variables are created. - -> **Note** -> -> Environment variables are no longer the recommended method for connecting to -> linked services. Instead, you should use the link name (by default, the name -> of the linked service) as the hostname to connect to. Refer to the -> [docker-compose.yml documentation](compose-file/compose-file-v3.md#links) for details. -> -> Environment variables are only populated if you use the -> [legacy version 1 Compose file format](compose-file/compose-versioning.md#versioning). -{: .warning } - -Compose uses [Docker links](../../network/links.md) -to expose services' containers to one another. Each linked container injects a set of -environment variables, each of which begins with the uppercase name of the container. - -To see what environment variables are available to a service, run `docker-compose run SERVICE env`. - -name\_PORT
-Full URL, such as `DB_PORT=tcp://172.17.0.5:5432` - -name\_PORT\_num\_protocol
-Full URL, such as `DB_PORT_5432_TCP=tcp://172.17.0.5:5432` - -name\_PORT\_num\_protocol\_ADDR
-Container's IP address, such as `DB_PORT_5432_TCP_ADDR=172.17.0.5` - -name\_PORT\_num\_protocol\_PORT
-Exposed port number, such as `DB_PORT_5432_TCP_PORT=5432` - -name\_PORT\_num\_protocol\_PROTO
-Protocol (tcp or udp), such as `DB_PORT_5432_TCP_PROTO=tcp` - -name\_NAME
-Fully qualified container name, such as `DB_1_NAME=/myapp_web_1/myapp_db_1` - -### log_driver - -> [Version 1 file format](compose-versioning.md#version-1) only. In version 2 and up, use -> [logging](compose-file-v3.md#logging). - -Specify a log driver. The default is `json-file`. - -```yaml -log_driver: syslog -``` - -### log_opt - -> [Version 1 file format](compose-versioning.md#version-1) only. In version 2 and up, use -> [logging](compose-file-v3.md#logging). - -Specify logging options as key-value pairs. An example of `syslog` options: - -```yaml -log_opt: - syslog-address: "tcp://192.168.0.42:123" -``` - -### net - -> [Version 1 file format](compose-versioning.md#version-1) only. In version 2 and up, use -> [network_mode](compose-file-v3.md#network_mode) and [networks](compose-file-v3.md#networks). - -Network mode. Use the same values as the docker client `--net` parameter. -The `container:...` form can take a service name instead of a container name or -id. - -```yaml -net: "bridge" -``` -```yaml -net: "host" -``` -```yaml -net: "none" -``` -```yaml -net: "service:[service name]" -``` -```yaml -net: "container:[container name/id]" -``` - -### pid - -```yaml -pid: "host" -``` - -Sets the PID mode to the host PID mode. This turns on sharing between -container and the host operating system the PID address space. Containers -launched with this flag can access and manipulate other -containers in the bare-metal machine's namespace and vice versa. - -### ports - -Expose ports. Either specify both ports (`HOST:CONTAINER`), or just the container -port (an ephemeral host port is chosen). - -> **Note**: When mapping ports in the `HOST:CONTAINER` format, you may experience -> erroneous results when using a container port lower than 60, because YAML -> parses numbers in the format `xx:yy` as a base-60 value. For this reason, -> we recommend always explicitly specifying your port mappings as strings. - -```yaml -ports: - - "3000" - - "3000-3005" - - "8000:8000" - - "9090-9091:8080-8081" - - "49100:22" - - "127.0.0.1:8001:8001" - - "127.0.0.1:5000-5010:5000-5010" - - "6060:6060/udp" - - "12400-12500:1240" -``` - -### security_opt - -Override the default labeling scheme for each container. - -```yaml -security_opt: - - label:user:USER - - label:role:ROLE -``` - -### stop_signal - -Sets an alternative signal to stop the container. By default `stop` uses -SIGTERM. Setting an alternative signal using `stop_signal` causes -`stop` to send that signal instead. - -```yaml -stop_signal: SIGUSR1 -``` - -### ulimits - -Override the default ulimits for a container. You can either specify a single -limit as an integer or soft/hard limits as a mapping. - -```yaml -ulimits: - nproc: 65535 - nofile: - soft: 20000 - hard: 40000 -``` - -### volumes, volume\_driver - -Mount paths or named volumes, optionally specifying a path on the host machine -(`HOST:CONTAINER`), or an access mode (`HOST:CONTAINER:ro`). -For [version 2 files](compose-versioning.md#version-2), named volumes need to be specified with the -[top-level `volumes` key](compose-file-v2.md#volume-configuration-reference). -When using [version 1](compose-versioning.md#version-1), the Docker Engine creates the named -volume automatically if it doesn't exist. - -You can mount a relative path on the host, which expands relative to -the directory of the Compose configuration file being used. Relative paths -should always begin with `.` or `..`. - -```yaml -volumes: - # Just specify a path and let the Engine create a volume - - /var/lib/mysql - - # Specify an absolute path mapping - - /opt/data:/var/lib/mysql - - # Path on the host, relative to the Compose file - - ./cache:/tmp/cache - - # User-relative path - - ~/configs:/etc/configs/:ro - - # Named volume - - datavolume:/var/lib/mysql -``` - -If you do not use a host path, you may specify a `volume_driver`. - -```yaml -volume_driver: mydriver -``` - -There are several things to note, depending on which -[Compose file version](compose-versioning.md#versioning) you're using: - -- For [version 1 files](compose-versioning.md#version-1), both named volumes and - container volumes use the specified driver. -- No path expansion is done if you have also specified a `volume_driver`. - For example, if you specify a mapping of `./foo:/data`, the `./foo` part - is passed straight to the volume driver without being expanded. - -See [Docker Volumes](../../storage/volumes.md) and -[Volume Plugins](/engine/extend/plugins_volume/) for more information. - -### volumes_from - -Mount all of the volumes from another service or container, optionally -specifying read-only access (``ro``) or read-write (``rw``). If no access level -is specified, then read-write is used. - -```yaml -volumes_from: - - service_name - - service_name:ro -``` - -### cpu\_shares, cpu\_quota, cpuset, domainname, hostname, ipc, mac\_address, mem\_limit, memswap\_limit, mem\_swappiness, privileged, read\_only, restart, shm\_size, stdin\_open, tty, user, working\_dir - -Each of these is a single value, analogous to its -[docker run](../../engine/reference/run.md) counterpart. - -```yaml -cpu_shares: 73 -cpu_quota: 50000 -cpuset: 0,1 - -user: postgresql -working_dir: /code - -domainname: foo.com -hostname: foo -ipc: host -mac_address: 02:42:ac:11:65:43 - -mem_limit: 1000000000 -memswap_limit: 2000000000 -privileged: true - -restart: always - -read_only: true -shm_size: 64M -stdin_open: true -tty: true -``` - -## Compose documentation - -- [User guide](../index.md) -- [Installing Compose](../install.md) -- [Compose file versions and upgrading](compose-versioning.md) -- [Sample apps with Compose](../samples-for-compose.md) -- [Command line reference](../reference/index.md) diff --git a/compose/compose-file/index.md b/compose/compose-file/index.md index 1a01095f76..0c4ea59d35 100644 --- a/compose/compose-file/index.md +++ b/compose/compose-file/index.md @@ -3,6 +3,7 @@ description: Compose file reference keywords: fig, composition, compose, docker redirect_from: - /compose/yml +- /compose/compose-file/compose-file-v1/ title: Compose file toc_max: 4 toc_min: 1