diff --git a/cluster/aws.md b/cluster/aws.md
new file mode 100644
index 0000000000..2a3a6ab87f
--- /dev/null
+++ b/cluster/aws.md
@@ -0,0 +1,402 @@
+---
+description: Get started with Docker Cluster on AWS
+keywords: documentation, docs, docker, cluster, infrastructure, automation, AWS
+title: Get started with Docker Cluster on AWS
+---
+
+This topic discusses working with docker clusters in AWS, including how to:
+
+- [Create a cluster](#create-a-cluster)
+- [View cluster information](#view-cluster-information)
+- [Use context](#use-context)
+- [Scale a cluster](#scale-a-cluster)
+- [Back up a cluster](#back-up-a-cluster)
+- [Upgrade a cluster](#upgrade-a-cluster)
+- [Destroy a cluster](#destroy-a-cluster)
+
+## Prerequisites
+
+- Completed installation of [Docker Desktop Enterprise](/ee/desktop/admin/install).
+- [Access keys](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) to an AWS subscription. You can provide these credentials in many ways, but the recommended way is to create an `~/.aws/credentials` file. Refer to [AWS CLI configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) for details on creating one.
+
+## Create a cluster
+When you create a docker cluster in AWS, the created cluster has:
+ - 3 UCP Managers
+ - 3 Workers
+ - 3 DTR Replicas
+
+Create a `cluster.yml` file with the following information:
+```yaml
+ variable:
+ domain: "YOUR DOMAIN, e.g. docker.com"
+ subdomain: "A SUBDOMAIN, e.g. cluster"
+ region: "THE AWS REGION TO DEPLOY, e.g. us-east-1"
+ email: "YOUR.EMAIL@COMPANY.COM"
+ ucp_password:
+ type: prompt
+
+ provider:
+ acme:
+ email: ${email}
+ server_url: https://acme-staging-v02.api.letsencrypt.org/directory
+ aws:
+ region: ${region}
+ cluster:
+ dtr:
+ version: docker/dtr:2.6.5
+ engine:
+ version: ee-stable-18.09.5
+ ucp:
+ username: admin
+ password: ${ucp_password}
+ version: docker/ucp:3.1.6
+ resource:
+ aws_instance:
+ managers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ registry:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ workers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ aws_lb:
+ apps:
+ domain: ${subdomain}.${domain}
+ instances:
+ - workers
+ ports:
+ - 80:8080
+ - 443:8443
+ dtr:
+ domain: ${subdomain}.${domain}
+ instances:
+ - registry
+ ports:
+ - 443:443
+ ucp:
+ domain: ${subdomain}.${domain}
+ instances:
+ - managers
+ ports:
+ - 443:443
+ - 6443:6443
+ aws_route53_zone:
+ dns:
+ domain: ${domain}
+ subdomain: ${subdomain}
+```
+In this example, the cluster takes on the following topology:
+
+
+
+Provide values for the variable section. For example:
+
+ domain: "docker.notreal"
+ subdomain: "quickstart"
+ region: "us-east-1"
+ email: "cluster@docker.com"
+
+The values are substituted in the cluster definition, which makes it
+easy to define a re-usable cluster definition and then change the variables
+to create multiple instances of a cluster.
+
+Run `docker cluster create --file cluster.yml --name quickstart`
+
+ $ docker cluster create --file cluster.yml --name quickstart
+ Please provide a value for ucp_password
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Creating: [=========================== ] 44%
+
+After approximately 10 minutes, resources are provisioned Docker Enterprise installation is started:
+
+ $ docker cluster create --file cluster.yml --name quickstart
+ Please provide a value for ucp_password
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Creating: [==============================================================] 100%
+ Installing Docker Enterprise Platform Requirements [OK]
+ docker-ee : Ensure old versions of Docker are not installed. [-]
+
+After approximately 20 minutes, Docker Enterprise installation completes:
+
+ $ docker cluster create -f examples/docs.yml -n quickstart
+ Please provide a value for ucp_password
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Creating: [==============================================================] 100%
+ Installing Docker Enterprise Platform Requirements [OK]
+ Installing Docker Enterprise Engine [OK]
+ Installing Docker Universal Control Plane [OK]
+ Installing Docker Trusted Registry [OK]
+
+ Successfully created context "quickstart"
+ Connect to quickstart at:
+
+ https://ucp.quickstart.docker.notreal
+
+ 911c882340b2
+
+After all operations complete succesfully, the cluster ID is the last statement
+to print. You can now log in to the URL and begin interacting with the cluster.
+
+## View cluster information
+
+To view an inventory of the clusters you created, run `docker cluster ls`:
+
+ $ docker cluster ls
+ ID NAME PROVIDER ENGINE UCP DTR STATE
+ 911c882340b2 quickstart acme, aws ee-stable-18.09.5 docker/ucp:3.1.6 docker/dtr:2.6.5 running
+
+For detailed information about the cluster, run `docker cluster inspect quickstart`
+
+ $ docker cluster inspect quickstart
+```yaml
+name: quickstart
+shortid: 911c882340b2
+variable:
+ domain: docker.notreal
+ email: cluster@docker.com
+ region: us-east-1
+ subdomain: quickstart
+provider:
+ acme:
+ server_url: https://acme-staging-v02.api.letsencrypt.org/directory
+ aws:
+ region: us-east-1
+ version: ~> 1.0
+cluster:
+ dtr:
+ version: docker/dtr:2.6.5
+ engine:
+ storage_volume: /dev/xvdb
+ version: ee-stable-18.09.5
+ registry:
+ url: https://index.docker.io/v1/
+ username: user
+ ucp:
+ username: admin
+ version: docker/ucp:3.1.6
+resource:
+ aws_instance:
+ managers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ role: manager
+ registry:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ role: dtr
+ workers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ role: worker
+ aws_lb:
+ apps:
+ domain: quickstart.docker.notreal
+ path: /data/ssl-certs/
+ ports:
+ - 80:8080
+ - 443:8443
+ dtr:
+ domain: quickstart.docker.notreal
+ path: /data/ssl-certs/
+ ports:
+ - 443:443
+ ucp:
+ domain: quickstart.docker.notreal
+ path: /data/ssl-certs/
+ ports:
+ - 443:443
+ - 6443:6443
+ aws_route53_zone:
+ dns:
+ domain: docker.notreal
+ subdomain: quickstart
+```
+The information displayed by `docker cluster inspect` can be used as a cluster definition to clone the cluster.
+
+## Use context
+
+`docker cluster` creates a context on your local machine. To use this context and interact with the cluster, run `docker context use quickstart`:
+
+ $ docker context use quickstart
+ quickstart
+ Current context is now "quickstart"
+
+To verify that the client is connected to the cluster, run `docker version`:
+
+ $ docker version
+
+ Client: Docker Engine - Enterprise
+ Version: 19.03.0-beta1
+ API version: 1.39 (downgraded from 1.40)
+ Go version: go1.12.1
+ Git commit: 90dbc83
+ Built: Fri Apr 5 23:35:58 2019
+ OS/Arch: darwin/amd64
+ Experimental: false
+
+ Server: Docker Enterprise 2.1
+ Engine:
+ Version: 18.09.5
+ API version: 1.39 (minimum version 1.12)
+ Go version: go1.10.8
+ Git commit: be4553c
+ Built: Thu Apr 11 06:19:48 2019
+ OS/Arch: linux/amd64
+ Experimental: false
+ Universal Control Plane:
+ Version: 3.1.6
+ ApiVersion: 1.39
+ Arch: amd64
+ BuildTime: Wed Apr 10 22:35:22 UTC 2019
+ GitCommit: 944388b
+ GoVersion: go1.10.6
+ MinApiVersion: 1.20
+ Os: linux
+ Kubernetes:
+ Version: 1.11+
+ buildDate: 2019-03-26T02:54:43Z
+ compiler: gc
+ gitCommit: 2d582ce995b1ff65b89ad851e8b09b6bc1a84c85
+ gitTreeState: clean
+ gitVersion: v1.11.9-docker-1
+ goVersion: go1.10.8
+ major: 1
+ minor: 11+
+ platform: linux/amd64
+ Calico:
+ Version: v3.5.3
+ cni: v3.5.3
+ kube-controllers: v3.5.3
+ node: v3.5.3
+
+To change the context back to your local machine, run `docker context use default`:
+
+ $ docker context use default
+ default
+ Current context is now "default"
+
+## Scale a cluster
+Open `cluster.yml`. Change the number of workers to 6:
+```yaml
+ workers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 6
+```
+Since the cluster is already created, the next step is to `update` the cluster's
+desired state. Run `docker cluster update quickstart --file cluster.yml`:
+
+ $ docker cluster update quickstart --file cluster.yml
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Updating: [================== ] 30%
+
+After approximately 10 minutes, use the `update` operation to add the new nodes and join them to the cluster:
+
+ $ docker cluster update quickstart --file examples/docs.yml
+ Please provide a value for ucp_password
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Updating: [==============================================================] 100%
+ Installing Docker Enterprise Platform Requirements [OK]
+ Installing Docker Enterprise Engine [OK]
+ Installing Docker Universal Control Plane [OK]
+ Installing Docker Trusted Registry [OK]
+
+ 911c882340b2
+
+To view the new nodes in the cluster:
+
+ $ docker --context quickstart node ls
+ ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
+ mpyk5jxkvgnh75cqmfdzddp7g ip-172-31-0-116.us-east-2.compute.internal Ready Active 18.09.5
+ s0pd7kqjg8ufelwa9ndkbf1k5 ip-172-31-6-9.us-east-2.compute.internal Ready Active Leader 18.09.5
+ ddnvnasq8wibtz9kedlvnxru0 ip-172-31-7-9.us-east-2.compute.internal Ready Active 18.09.5
+ vzta920dhpke9nf4vipqtkuuw ip-172-31-15-210.us-east-2.compute.internal Ready Active 18.09.5
+ tk98g0tfsb9kzri4slqdh2d2x ip-172-31-18-95.us-east-2.compute.internal Ready Active 18.09.5
+ g1kwut63oule9v0x245ms7wsw ip-172-31-21-212.us-east-2.compute.internal Ready Active 18.09.5
+ 04jgx94jwscgnac2afdzcd9hp * ip-172-31-25-45.us-east-2.compute.internal Ready Active Reachable 18.09.5
+ 5ubqk4mojz198sr72m9zegeew ip-172-31-29-201.us-east-2.compute.internal Ready Active 18.09.5
+ 32rthfhjpm9gaz7n5608k5coj ip-172-31-33-183.us-east-2.compute.internal Ready Active 18.09.5
+ zqg81yv81auy7eot3a1kson2g ip-172-31-42-49.us-east-2.compute.internal Ready Active 18.09.5
+ qu84bv2zytv5nubcuntkzwbu5 ip-172-31-43-6.us-east-2.compute.internal Ready Active 18.09.5
+ j6kzzog8a2yv4ragpx826juyv ip-172-31-43-108.us-east-2.compute.internal Ready Active Reachable 18.09.5
+
+## Back up a cluster
+
+Before performing operations on the cluster, perform a full backup of the running cluster by running `docker cluster backup quickstart --file "backup-$(date '+%Y-%m-%d').tar.gz" `.
+
+Provide a passphrase to encrypt the UCP backup.
+
+ $ docker cluster backup quickstart --file "backup-$(date '+%Y-%m-%d').tar.gz"
+ Passphrase for UCP backup:
+ Docker Enterprise Platform 3.0
+ Create archive file. [OK]
+
+ Backup of 911c882340b2 saved to backup-2019-05-07.tar.gz
+
+Save the backup on external storage for disaster recovery.
+
+To restore a cluster, run `docker cluster restore quickstart --file backup-2019-05-07.tar.gz`.
+
+Provide the passphrase from the backup step to decrypt the UCP backup.
+
+## Upgrade a cluster
+Open `cluster.yml`. Change the cluster versions:
+```yaml
+cluster:
+ dtr:
+ version: docker/dtr:2.7.0
+ engine:
+ version: ee-stable-19.03
+ ucp:
+ version: docker/ucp:3.2.0
+```
+Run `docker cluster update quickstart --file cluster.yml `:
+
+ $ docker cluster update quickstart --file examples/docs.yml
+ Please provide a value for ucp_password
+ Docker Enterprise Platform 3.0
+ Preparing quickstart [OK]
+ Planning cluster on aws [OK]
+ Updating: [==============================================================] 100%
+ Installing Docker Enterprise Platform Requirements [OK]
+ Upgrading Docker Enterprise Engine [OK]
+ Upgrading Docker Universal Control Plane [OK]
+ Upgrading Docker Trusted Registry [OK]
+
+ 911c882340b2
+
+## Destroy a cluster
+When the cluster has reached end-of-life, run `docker cluster rm quickstart`:
+
+ $ docker cluster rm quickstart
+ Removing quickstart [OK]
+ Removing: [==============================================================] 100%
+
+ quickstart
+ 911c882340b2
+
+All provisioned resources are destroyed and the context for the cluster is removed.
+
+## Where to go next
+
+- View the quick start guide for [Azure](azure.md) or [vSphere](vsphere.md)
+- [Explore the full list of Cluster commands](./reference/index.md)
+- [Cluster configuration file reference](./cluster-file/index.md)
diff --git a/cluster/cluster-file/index.md b/cluster/cluster-file/index.md
new file mode 100644
index 0000000000..b712d97ec0
--- /dev/null
+++ b/cluster/cluster-file/index.md
@@ -0,0 +1,527 @@
+---
+description: Cluster file reference and guidelines
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: Cluster file version 1 reference
+toc_max: 5
+toc_min: 1
+---
+
+This topic describes version 1 of the Cluster file format.
+
+## Cluster file structure and examples
+```
+
+
+ Example Cluster file version 1
+
+
+
+ variable:
+ domain: "YOUR DOMAIN, e.g. docker.com"
+ subdomain: "A SUBDOMAIN, e.g. cluster"
+ region: "THE AWS REGION TO DEPLOY, e.g. us-east-1"
+ email: "YOUR.EMAIL@COMPANY.COM"
+ ucp_password:
+ type: prompt
+ provider:
+ acme:
+ email: ${email}
+ server_url: https://acme-staging-v02.api.letsencrypt.org/directory
+ aws:
+ region: ${region}
+ cluster:
+ dtr:
+ version: docker/dtr:2.6.5
+ engine:
+ version: ee-stable-18.09.5
+ ucp:
+ username: admin
+ password: ${ucp_password}
+ version: docker/ucp:3.1.6
+ resource:
+ aws_instance:
+ managers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ registry:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ workers:
+ instance_type: t2.xlarge
+ os: Ubuntu 16.04
+ quantity: 3
+ aws_lb:
+ apps:
+ domain: ${subdomain}.${domain}
+ instances:
+ - workers
+ ports:
+ - 80:8080
+ - 443:8443
+ dtr:
+ domain: ${subdomain}.${domain}
+ instances:
+ - registry
+ ports:
+ - 443:443
+ ucp:
+ domain: ${subdomain}.${domain}
+ instances:
+ - managers
+ ports:
+ - 443:443
+ - 6443:6443
+ aws_route53_zone:
+ dns:
+ domain: ${domain}
+ subdomain: ${subdomain}
+
+
+
+```
+The topics on this reference page are organized alphabetically by top-level keys
+to reflect the structure of the Cluster file. Top-level keys that define
+a section in the configuration file, such as `cluster`, `provider`, and `resource`,
+are listed with the options that support them as sub-topics. This information
+maps to the indent structure of the Cluster file.
+
+### cluster
+Specifies components to install and configure for a cluster.
+
+The following components are available:
+
+- `subscription`: (Optional) A string value representing the subscription ID.
+- `license`: (Optional) A path to the cluster's license file.
+- `cloudstor`: (Optional) Configuration options for Docker CloudStor
+- `dtr`: (Optional) Configuration options for Docker Trusted Registry
+- `engine`: (Optional) Configuration options for Docker Engine
+- `ucp`: (Optional) Configuration options for Docker Universal Control Plane
+- `registry`: (Optional) Configuration options for authenticating nodes with a registry to pull Docker images.
+
+#### cloudstor
+Customizes the installation of Docker Cloudstor.
+
+- `version`: (Optional) The version of Cloudstor to install. Default is `1.0`
+- `use_efs`: (Optional) Specifies whether an Elastic File System should be provisioned. Defaults to `false`.
+
+#### dtr
+Customizes the installation of Docker Trusted Registry.
+```yaml
+cluster:
+ dtr:
+ version: "docker/dtr:2.6.5"
+ install_options:
+ - "--debug"
+ - "--enable-pprof"
+```
+
+The following optional elements can be specified:
+
+- `version`: (Optional) The version of DTR to install. Defaults to `docker/dtr:2.6.5`.
+- `ca`: (Optional) The path to a root CA public certificate.
+- `key`: (Optional) The path to a TLS private key.
+- `cert`: (Optional) The path to a public key certificate.
+- `install_options`: (Optional) Additional [DTR install options](https://docs.docker.com/reference/dtr/2.6/cli/install/)
+
+#### engine
+Customizes the installation of Docker Enterprise Engine.
+```yaml
+cluster:
+ engine:
+ channel: "stable"
+ edition: "ee"
+ version: "19.03"
+```
+
+The following optional elements can be specified:
+- `version`: (Optional) The version of the Docker Engine to install. Defaults to `19.03`.
+- `edition`: (Optional) The family of Docker Engine to install. Defaults to `ee` for Enterprise edition.
+- `channel`: (Optional) The channel on the repository to pull updated packages. Defaults to `stable`.
+- `url`: (Optional) Defaults to "https://storebits.docker.com/ee".
+- `storage_driver`: (Optional) The storage driver to use for the storage volume. Default
+value is dependent on the operating system.
+ - Amazon Linux 2 is `overlay2`.
+ - Centos is `overlay2`.
+ - Oracle Linux is `overlay2`.
+ - RedHat is `overlay2`.
+ - SLES is `btrfs`.
+ - Ubuntu is `overlay2`.
+- `storage_fstype`: (Optional) File system to use for storage volume. Default value is dependent on the operating system.
+ - Amazon Linux 2 is `xfs`.
+ - Centos is `xfs`.
+ - Oracle Linux is `xfs`.
+ - RedHat is `xfs`.
+ - SLES is `btrfs`.
+ - Ubuntu is `ext4`.
+- `storage_volume`: (Optional) Docker storage volume path for `/var/lib/docker` Default value is provider dependent.
+ - AWS
+ - non-NVME is `/dev/xvdb`.
+ - NVME disks are one of `/dev/nvme[0-26]n1`.
+ - Azure is `/dev/disk/azure/scsi1/lun0`.
+- `daemon`: (Optional) Provides docker daemon options. Defaults to "".
+- `ca`: (dev) Defaults to "".
+- `key`: (dev) Defaults to "".
+- `enable_remote_tcp`: (dev) Enables direct access to docker engine. Defaults to `false`.
+
+*dev indicates that the functionality is only for development and testing.
+
+#### kubernetes
+Enables provider-specific options for Kubernetes support.
+
+##### AWS Kubernetes options
+
+- `cloud_provider`: (Optional)Enable cloud provider support for Kubernetes. Defaults to `false`.
+- `ebs_persistent_volumes`: (Optional) Enable persistent volume support with EBS volumes. Defaults to `false`.
+- `efs_persistent_volumes`: (Optional) Enable persistent volume support with EFS. Defaults to `false`.
+- `load_balancer`: (Optional) Enable Kubernetes pods to instantiate a load-balancer. Defaults to `false`.
+- `nfs_storage`: (Optional) Install additional packages on node for NFS support. Defaults to `false`.
+- `lifecycle`: (Optional) Defaults to `owned`.
+
+#### registry
+Customizes the registry from which the installation should pull images. By default, Docker Hub and credentials to access Docker Hub are used.
+
+```yaml
+cluster:
+ registry:
+ password: ${base64decode("TVJYeTNDQWpTSk5HTW1ZRzJQcE1kM0tVRlQ=")}
+ url: https://index.docker.io/v1/
+ username: user
+```
+
+The following optional elements can be specified:
+- `username`: The username for logging in to the registry on each node. Default value is the current docker user.
+- `url`: The registry to use for pulling Docker images. Defaults to "https://index.docker.io/v1/".
+- `password`: The password for logging in to the registry on each node. Default value is the current docker user's password base64 encoded and wrapped in a call to base64decode.
+
+#### ucp
+
+- `version`: Specifies the version of UCP to install. Defaults to `docker/ucp:3.1.6`.
+- `username`: Specifies the username of the first user to create in UCP. Defaults to `admin`.
+- `password`: Specifies the password of the first user to create in UCP. Defaults to `dockerdocker`.
+- `ca`: Specifies a path to a root CA public certificate.
+- `key`: Specifies a path to a TLS private key.
+- `cert`: Specifies a path to a public key certificate.
+- `install_options`: Lists additional [UCP install options](https://docs.docker.com/reference/ucp/3.1/cli/install/)
+
+##### Additional UCP configuration options:
+Docker Cluster also accepts all UCP configuration options and creates the initial UCP config on
+installation. The following list provides supported options:
+- `anonymize_tracking`: Anonymizes analytic data. Specify 'true' to hide the license ID. Defaults to 'false'.
+- `audit_level`: Specifies the audit logging level. Leave empty for disabling audit logs (default).
+Other valid values are 'metadata' and 'request'.
+- `auto_refresh`: Specify 'true' to enable attempted automatic license renewal when the license
+nears expiration. If disabled, you must manually upload renewed license after expiration. Defaults to 'true'.
+- `azure_ip_count`: Sets the IP count for azure allocator to allocate IPs per Azure virtual machine.
+- `backend`: Specifie the name of the authorization backend to use, either 'managed' or 'ldap'. Defaults to 'managed'.
+- `calico_mtu`: Specifies the MTU (maximum transmission unit) size for the Calico plugin. Defaults to '1480'.
+- `cloud_provider`: Specifies the cloud provider for the kubernetes cluster.
+- `cluster_label`: Specifies a label to be included with analytics/.
+- `cni_installer_url`: Specifies the URL of a Kubernetes YAML file to be used for installing a CNI plugin.
+Only applies during initial installation. If empty, the default CNI plugin is used.
+- `controller_port`: Configures the port that the 'ucp-controller' listens to. Defaults to '443'.
+- `custom_header_name`: Specifies the name of the custom header with 'name' = '*X-Custom-Header-Name*'.
+- `custom_header_value`: Specifies the value of the custom header with 'value' = '*Custom Header Value*'.
+- `default_new_user_role`: Specifies the role that new users get for their private resource sets.
+Values are 'admin', 'viewonly', 'scheduler', 'restrictedcontrol', or 'fullcontrol'. Defaults to 'restrictedcontrol'.
+- `default_node_orchestrator`: Specifies the type of orchestrator to use for new nodes that are
+joined to the cluster. Can be 'swarm' or 'kubernetes'. Defaults to 'swarm'.
+- `disable_tracking`: Specify 'true' to disable analytics of API call information. Defaults to 'false'.
+- `disable_usageinfo`: Specify 'true' to disable analytics of usage information. Defaults to 'false'.
+- `dns`: Specifies a CSV list of IP addresses to add as nameservers.
+- `dns_opt`: Specifies a CSV list of options used by DNS resolvers.
+- `dns_search`: Specifies a CSV list of domain names to search when a bare unqualified hostname is
+used inside of a container.
+- `enable_admin_ucp_scheduling`: Specify 'true' to allow admins to schedule on containers on manager nodes.
+Defaults to 'false'.
+- `external_service_lb`: Specifies an optional external load balancer for default links to services with
+exposed ports in the web interface.
+- `host_address`: Specifies the address for connecting to the DTR instance tied to this UCP cluster.
+- `log_host`: Specifies a remote syslog server to send UCP controller logs to. If omitted, controller
+logs are sent through the default docker daemon logging driver from the 'ucp-controller' container.
+- `idpMetadataURL`: Specifies the Identity Provider Metadata URL.
+- `image_repository`: Specifies the repository to use for UCP images.
+- `install_args`: Specifies additional arguments to pass to the UCP installer.
+- `ipip_mtu`: Specifies the IPIP MTU size for the calico IPIP tunnel interface.
+- `kube_apiserver_port`: Configures the port to which the Kubernetes API server listens.
+- `kv_snapshot_count`: Sets the key-value store snapshot count setting. Defaults to '20000'.
+- `kv_timeout`: Sets the key-value store timeout setting, in milliseconds. Defaults to '5000'.
+- `lifetime_minutes`: Specifies the initial session lifetime, in minutes. Defaults to `4320`, which is 72 hours.
+- `local_volume_collection_mapping`: Stores data about collections for volumes in UCP's local KV store
+instead of on the volume labels. This is used for enforcing access control on volumes.
+- `log_level`: Specifies the logging level for UCP components. Values are syslog priority
+levels (https://linux.die.net/man/5/syslog.conf): 'debug', 'info', 'notice', 'warning', 'err', 'crit', 'alert',
+and 'emerg'.
+- `managedPasswordDisabled`: Indicates if managed password is disabled. Defaults to false.
+- `managedPasswordFallbackUser`: The fallback user when the managed password authentication is disabled. Defaults to "".
+- `manager_kube_reserved_resources`: Specifies reserve resources for Docker UCP and Kubernetes components
+that are running on manager nodes.
+- `metrics_disk_usage_interval`: Specifies the interval for how frequently storage metrics are gathered.
+This operation can impact performance when large volumes are present.
+- `metrics_retention_time`: Adjusts the metrics retention time.
+- `metrics_scrape_interval`: Specifies the interval for how frequently managers gather metrics from nodes in the cluster.
+- `nodeport_range`: Specifies the port range that for Kubernetes services of type NodePort can be exposed in.
+Defaults to '32768-35535'.
+- `per_user_limit`: Specifies the maximum number of sessions that a user can have active simultaneously. If
+the creation of a new session would put a user over this limit, the least recently used session is deleted.
+A value of zero disables limiting the number of sessions that users can have. Defaults to `5`.
+- `pod_cidr`: Specifies the subnet pool from which the IP for the Pod should be allocated from the CNI ipam plugin.
+- `profiling_enabled`: Specify 'true' to enable specialized debugging endpoints for profiling UCP performance.
+Defaults to 'false'.
+- `log_protocol`: Specifies the protocol to use for remote logging. Values are 'tcp' and 'udp'. Defaults to 'tcp'.
+- `renewal_threshold_minutes`: Specifies the length of time, in minutes, before the expiration of a
+session. When used, a session is extended by the current configured lifetime from that point in time. A zero value disables session extension. Defaults to `1440`, which is 24 hours.
+- `require_content_trust`: Specify 'true' to require images be signed by content trust. Defaults to 'false'.
+- `require_signature_from`: Specifies a csv list of users or teams required to sign images.
+- `rethinkdb_cache_size`: Sets the size of the cache used by UCP's RethinkDB servers. TDefaults to 1GB,
+but leaving this field empty or specifying `auto` instructs RethinkDB to determine a cache size automatically.
+- `rootCerts`: Defaults to empty.
+- `samlEnabled`: Indicates if saml is used.
+- `samlLoginText`: Specifies the customized SAML login button text.
+- `service_id`: Specifies the DTR instance's OpenID Connect Client ID, as registered with the Docker
+authentication provider.
+- `spHost`: Specifies the Service Provider Host.
+- `storage_driver`: Specifies the UCP storage driver to install.
+- `support_dump_include_audit_logs`: When set to `true`, support dumps include audit logs in the logs
+of the 'ucp-controller' container of each manager node. Defaults to 'false'.
+- `swarm_port`: Configures the port that the 'ucp-swarm-manager' listens to. Defaults to '2376'.
+- `swarm_strategy`: Configures placement strategy for container scheduling.
+This doesn't affect swarm-mode services. Values are 'spread', 'binpack', and 'random'.
+- `tlsSkipVerify`: Specifies TLS Skip verify for IdP Metadata.
+- `unmanaged_cni`: Defaults to 'false'.
+- `worker_kube_reserved_resources`: Reserves resources for Docker UCP and Kubernetes components
+that are running on worker nodes.
+- `custom_kube_api_server_flags`: Specifies the configuration options for the Kubernetes API server. (dev)
+- `custom_kube_controller_manager_flags`: Specifies the configuration options for the Kubernetes controller manager. (dev)
+- `custom_kube_scheduler_flags`: Specifies the configuration options for the Kubernetes scheduler. (dev)
+- `custom_kubelet_flags`: Specifies the configuration options for Kubelets. (dev)
+
+*dev indicates that the functionality is only for development and testing. Arbitrary Kubernetes configuration parameters are not tested and supported under the Docker Enterprise Software Support Agreement.
+
+### provider
+Defines where the cluster's resources are provisioned, as well as provider-specific configuration such as tags.
+
+```yaml
+provider:
+ acme:
+ email: ${email}
+ server_url: https://acme-staging-v02.api.letsencrypt.org/directory
+ aws:
+ region: ${region}
+```
+
+#### acme
+The Automated Certificate Management Environment (ACME) is an evolving standard for the automation of a domain-validated certificate authority. Docker Cluster uses the ACME provider to create SSL certificates that are signed by [Let's Encrypt](https://letsencrypt.org/).
+
+The ACME provider Configuration for the ACME provider supports arguments that closely align with the [Terraform ACME provider](https://www.terraform.io/docs/providers/acme/index.html):
+
+The following elements can be specified:
+- `email`: (Required) The email to associate the certificates with.
+- `server_url`: (Optional) The URL to the ACME endpoint's directory. Default is "https://acme-v02.api.letsencrypt.org/directory"
+
+#### aws
+Configuration for the AWS provider supports arguments that closely align with the [Terraform AWS provider](https://www.terraform.io/docs/providers/aws/index.html).
+
+```yaml
+aws:
+ region: "us-east-1"
+ tags:
+ Owner: "Infra"
+ Environment: "Test"
+```
+The following elements can be specified:
+- `region` - (Required) This is the AWS region. It can be sourced from the `AWS_DEFAULT_REGION` environment variables, or
+ via a shared credentials file if `profile` is specified.
+- `tags` - (Optional) Additional name value pairs to assign to every resource (which
+ supports tagging) in the cluster.
+- `access_key` - (Required) This is the AWS access key. It can be sourced from
+the `AWS_ACCESS_KEY_ID` environment variable, or via
+ a shared credentials file if `profile` is specified.
+- `secret_key` - (Required) This is the AWS secret key. It can be sourced from
+the `AWS_SECRET_ACCESS_KEY` environment variable, or
+ via a shared credentials file if `profile` is specified.
+- `profile` - (Optional) This is the AWS profile name as set in the shared credentials
+ file.
+- `assume_role` - (Optional) An `assume_role` block (documented below). Only one
+ `assume_role` block can be in the configuration.
+- `endpoints` - (Optional) Configuration block for customizing service endpoints. See the
+[Custom Service Endpoints Guide](/docs/providers/aws/guides/custom-service-endpoints.html)
+for more information about connecting to alternate AWS endpoints or AWS compatible solutions.
+- `shared_credentials_file` = (Optional) This is the path to the shared
+ credentials file. If this is not set and a profile is specified,
+ `~/.aws/credentials` is used.
+- `token` - (Optional) Session token for validating temporary credentials.
+Typically provided after successful identity federation or Multi-Factor
+Authentication (MFA) login. With MFA login, this is the session token
+provided afterwards, not the 6 digit MFA code used to get temporary
+credentials. It can also be sourced from the `AWS_SESSION_TOKEN`
+environment variable.
+- `max_retries` - (Optional) This is the maximum number of times an API
+ call is retried, in the case where requests are being throttled or
+ experiencing transient failures. The delay between the subsequent API
+ calls increases exponentially.
+- `allowed_account_ids` - (Optional) List of allowed, white listed, AWS
+ account IDs to prevent you from mistakenly using an incorrect one (and
+ potentially end up destroying a live environment). Conflicts with
+ `forbidden_account_ids`.
+- `forbidden_account_ids` - (Optional) List of forbidden, blacklisted,
+ AWS account IDs to prevent you mistakenly using a wrong one (and
+ potentially end up destroying a live environment). Conflicts with
+ `allowed_account_ids`.
+- `insecure` - (Optional) Explicitly allows the provider to
+ perform "insecure" SSL requests. If omitted, defaults to `false`.
+- `skip_credentials_validation` - (Optional) Skips the credentials
+ validation via the STS API. Useful for AWS API implementations that do
+ not have STS available or implemented.
+- `skip_get_ec2_platforms` - (Optional) Skips getting the supported EC2
+ platforms. Used by users that don't have `ec2:DescribeAccountAttributes`
+ permissions.
+- `skip_region_validation` - (Optional) Skips validation of provided region name.
+ Useful for AWS-like implementations that use their own region names
+ or to bypass the validation for regions that aren't publicly available yet.
+
+### resource
+Resources to provision for a cluster. Resources are organized as shown in the following example:
+
+```yaml
+resource:
+ type:
+ name:
+ parameters
+```
+For a given `type`, there may be more one or more named resources to provision.
+
+For a given `name`, a resource may have one or more parameters.
+
+#### aws_instance
+
+```yaml
+resource:
+ aws_instance:
+ workers:
+ instance_type: t2.xlarge
+ price: 0.25
+ os: Ubuntu 16.04
+```
+- `quantity`: (Required) The number of instances to create.
+- `os`: An alias that is expanded by `docker cluster` to the AMI owner and AMI name to install.
+The following aliases are supported by `docker cluster`:
+ - `CentOS 7`
+ - `RHEL 7.1`
+ - `RHEL 7.2`
+ - `RHEL 7.3`
+ - `RHEL 7.4`
+ - `RHEL 7.5`
+ - `RHEL 7.6`
+ - `Oracle Linux 7.3`
+ - `Oracle Linux 7.4`
+ - `Oracle Linux 7.5`
+ - `SLES 12.2`
+ - `SLES 12.3`
+ - `SLES 15`
+ - `Ubuntu 14.04`
+ - `Ubuntu 16.04`
+ - `Ubuntu 18.04`
+ - `Windows Server 2016`
+ - `Windows Server 1709`
+ - `Windows Server 1803`
+ - `Windows Server 2019`
+ > Note: Make sure the OS you select is [compatible](https://success.docker.com/article/compatibility-matrix)
+ with the product you're installing. Docker Cluster validates the support during installation.
+- `instance_type`: Specifies the [AWS instance type](https://aws.amazon.com/ec2/instance-types/) to provision.
+- `key_name`: By default, Docker Cluster creates an [AWS EC2 Key Pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) and registers it with AWS for the cluster.
+To use an existing AWS EC2 Key Pair, set this value to the name of the AWS EC2 Key Pair.
+- `ssh_private_key`: By default, Docker Cluster creates an [AWS EC2 Key Pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) and registers it with AWS for the cluster. To use an existing AWS EC2 Key Pair, set this value to the path of the private SSH key.
+- `username`: Specifies the username for the node with Administrative privileges. By default, the `os` option
+sets this to the well-known username for the AMIs (which can change by distribution):
+ - Amazon Linux 2 is `ec2-user`.
+ - Centos is `centos`.
+ - Oracle Linux is `ec2-user`.
+ - RedHat is `ec2-user`.
+ - SLES is `ec2-user`.
+ - Ubuntu is `ubuntu`.
+ - Windows is `Administrator`.
+- `password`: This value is only used by Windows nodes. By default, Windows nodes have a random password generated.
+- `ami`: Specifies a custom AMI, or one that's not currently available as an OS. Specify either the id or
+the owner/name to query for the latest.
+ - `id`: Specifies the ID of the AMI. For example, `ami-0510c89f1a2691cf2`.
+ - `owner`: Specifies the AWS account ID of the image owner. For example, `099720109477`.
+ - `name`: Specifies the name of the AMI that was provided during image creation. For example, `ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*`.
+ - `platform`: Specify `windows` for Windows instances.
+- `tags`: (Optional) Specifies additional name value pairs to assign to every instance.
+- `swarm_labels`: (Optional) Specifies additional key value pairs that represent swarm labels to apply to every node.
+
+#### aws_spot_instance_request
+
+Provisions a spot instance request in AWS to dramatically reduce the cost of instances. Spot instance
+availability is not guaranteed. Therefore, it is recommended to use `aws_spot_instance_request` for
+additional worker nodes and not for mission-critical nodes like managers and registry.
+
+```yaml
+resource:
+ aws_spot_instance_request:
+ workers:
+ instance_type: t2.xlarge
+ price: 0.25
+ os: Ubuntu 16.04
+ quantity: 3
+```
+
+Supports the same set of parameters as [aws_instance](index.md#aws_instance), with the addition of an optional price to limit the max bid for a spot instance.
+- `price`: (Optional) Specifies a maximum price to bid on the spot instance.
+
+#### aws_lb
+Provisions an AWS Load Balancer.
+```yaml
+resource:
+ aws_lb:
+ ucp:
+ domain: "example.com"
+ instances:
+ - managers
+ ports:
+ - 443:443
+ - 6443:6443
+```
+The following options are supported:
+
+- `instances`: (Required) Specifies a list of `aws_instance` and `aws_spot_instance_request` names to
+attach to the load balancer.
+- `ports`: (Required) Specifies a list of `listening port[/protocol]:target port[/protocol]` mappings
+to define how the load balancer should route traffic. By default, the protocol is `tcp`.
+- `domain`: Specifies the domain in which to create DNS records for this load balancer. The record is named the
+same as this resource, appended by the domain. For example, if the resource is `ucp` and the domain is `example.com`,
+the `A` record is `ucp.example.com`.
+- `internal`: (Optional) Defaults to `false`.
+- `type`: (Optional) Defaults to `network`.
+- `enable_cross_zone_load_balancing`: (Optional) Defaults to `false`.
+
+#### aws_route53_zone
+Creates a subdomain in an AWS route53 zone. The following example creates a public zone for `testing.example.com`:
+
+```yaml
+resource:
+ aws_route53_zone:
+ dns:
+ domain: example.com
+ subdomain: testing
+```
+The following elements are required:
+- `domain`: (Required) Specifies the name of the hosted zone.
+- `subdomain`: (Required) Specifies the subdomain to create in the `domain` hosted zone.
+
+### variable
+Docker cluster supports basic parameterization. The variable section defines a make of keys and values. A key can have a sub-key named `type`, which changes the behavior of the variable.
+
+```yaml
+variable:
+ region: "us-east-1"
+ password:
+ type: prompt
+```
+
+Variables are referenced in the cluster definition as `${variable_name}`. For example, `${region}` is substituted as `us-east-2` through the cluster definition.
+
+The type defines how the variable behaves. This is currently limited in scope to:
+- `prompt`: Requests the value from the user and does not echo characters as the value is entered.
diff --git a/cluster/images/docker_cluster_aws.png b/cluster/images/docker_cluster_aws.png
new file mode 100644
index 0000000000..67a885b16d
Binary files /dev/null and b/cluster/images/docker_cluster_aws.png differ
diff --git a/cluster/overview.md b/cluster/overview.md
new file mode 100644
index 0000000000..0bed1a6932
--- /dev/null
+++ b/cluster/overview.md
@@ -0,0 +1,60 @@
+---
+description: Introduction and Overview of Docker Cluster
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: Overview of Docker Cluster
+---
+
+Docker Cluster is a tool for lifecycle management of Docker clusters.
+With Cluster, you use a YAML file to configure your provider's resources.
+Then, with a single command, you provision and install all the resources
+from your configuration.
+
+Using Docker Cluster is a three-step process:
+
+1. Ensure you have the credentials necessary to provision a cluster.
+
+2. Define the resources that make up your cluster in `cluster.yml`
+
+3. Run `docker cluster create` to have Cluster provision resources and install Docker Enterprise on the resources.
+
+A `cluster.yml` file resembles the following example:
+
+ variable:
+ region: us-east-2
+ ucp_password:
+ type: prompt
+
+ provider:
+ aws:
+ region: ${region}
+
+ cluster:
+ engine:
+ version: "ee-stable-18.09.5"
+ ucp:
+ version: "docker/ucp:3.1.6"
+ username: "admin"
+ password: ${ucp_password}
+
+ resource:
+ aws_instance:
+ managers:
+ quantity: 1
+
+For more information about Cluster files, refer to the
+[Cluster file reference](cluster-file/index.md).
+
+Docker Cluster has commands for managing the whole lifecycle of your cluster:
+
+ * Create and destroy clusters
+ * Scale up or Scale down clusters
+ * Upgrade clusters
+ * View the status of clusters
+ * Backup and Restore clusters
+
+## Cluster documentation
+
+- [Get started with Docker Cluster on AWS](aws.md)
+- [Command line reference](./reference/index.md)
+- [Cluster file reference](./cluster-file/index.md)
+
diff --git a/cluster/reference/backup.md b/cluster/reference/backup.md
new file mode 100644
index 0000000000..cd4539d8da
--- /dev/null
+++ b/cluster/reference/backup.md
@@ -0,0 +1,21 @@
+---
+description: Back up a running cluster
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster backup
+notoc: true
+---
+
+## Usage
+```
+docker cluster backup [OPTIONS] cluster
+```
+
+Use the following options as needed to back up a running cluster:
+
+- `--dry-run`: Skips resource provisioning.
+- `--file string`: Specifies a cluster backup filename. Defaults to `backup.tar.gz`.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`.
+Defaults to `warn`.
+- `--passphrase string`: Specifies a cluster backup passphrase.
+
+The backup command performs a full Docker Cluster backup following the steps found in [Backup and Restore Best Practices](https://success.docker.com/article/backup-restore-best-practices).
diff --git a/cluster/reference/envvars.md b/cluster/reference/envvars.md
new file mode 100644
index 0000000000..5619de99ab
--- /dev/null
+++ b/cluster/reference/envvars.md
@@ -0,0 +1,73 @@
+---
+description: Cluster CLI environment variables
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: Cluster CLI environment variables
+---
+
+Use the following environment variables as needed to configure the Docker Cluster command-line behavior.
+
+## AWS\_ACCESS\_KEY\_ID
+Represents your AWS Access Key. Overrides the use of `AWS_SHARED_CREDENTIALS_FILE` and `AWS_PROFILE`.
+
+```bash
+export AWS_ACCESS_KEY_ID="AKIFAKEAWSACCESSKEYNLQ"
+```
+
+## AWS\_SECRET\_ACCESS\_KEY
+Represents your AWS Secret Key. Overrides the use of `AWS_SHARED_CREDENTIALS_FILE` and `AWS_PROFILE`.
+```bash
+export AWS_SECRET_ACCESS_KEY="3SZYfAkeS3cr3TKey+L0ok5/rEalBu71sFak3vmy"
+```
+
+## AWS\_DEFAULT\_REGION
+Specifies the AWS region to provision resources.
+```bash
+export AWS_DEFAULT_REGION="us-east-1"
+```
+
+## AWS\_PROFILE
+Specifies the AWS profile name as set in the shared credentials file.
+```bash
+export AWS_PROFILE="default"
+```
+## AWS\_SESSION\_TOKEN
+Specifies the session token used for validating temporary credentials. This is typically provided after
+successful identity federation or Multi-Factor Authentication (MFA) login. With MFA login, this is the
+session token provided afterwards, not the 6 digit MFA code used to get temporary credentials.
+```bash
+export AWS_SESSION_TOKEN=AQoDYXdzEJr...
+```
+## AWS\_SHARED\_CREDENTIALS\_FILE
+Specifies the path to the shared credentials file. If this is not set and a profile is specified, `~/.aws/credentials`
+is used.
+
+```bash
+export AWS_SHARED_CREDENTIALS_FILE="~/.production/credentials"
+```
+
+## CLUSTER\_ORGANIZATION
+Specifies the Docker Hub organization to pull the `cluster` container.
+
+```bash
+export CLUSTER_ORGANIZATION="docker"
+```
+
+## CLUSTER\_TAG
+Specifies the tag of the `cluster` container to pull.
+
+```bash
+export CLUSTER_TAG="latest"
+```
+
+## DOCKER\_PASSWORD
+Overrides docker password lookup from `~/.docker/config.json`.
+
+```bash
+export DOCKER_PASSWORD="il0v3U3000!"
+```
+## DOCKER\_USERNAME
+Overrides docker username lookup from `~/.docker/config.json`.
+
+```bash
+export DOCKER_USERNAME="ironman"
+```
diff --git a/cluster/reference/index.md b/cluster/reference/index.md
new file mode 100644
index 0000000000..040812961c
--- /dev/null
+++ b/cluster/reference/index.md
@@ -0,0 +1,24 @@
+---
+description: Cluster CLI reference
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: Cluster command-line reference
+notoc: true
+---
+
+The following pages describe the usage information for the [docker cluster](overview) subcommands. You can also view this information by running `docker cluster [subcommand] --help` from the command line.
+
+* [docker cluster](overview)
+* [backup](backup)
+* [create](create)
+* [inspect](inspect)
+* [logs](logs)
+* [ls](ls)
+* [restore](restore)
+* [rm](rm)
+* [update](update)
+* [version](version)
+
+## Where to go next
+
+* [CLI environment variables](envvars)
+* [docker cluster command](overview)
diff --git a/cluster/reference/inspect.md b/cluster/reference/inspect.md
new file mode 100644
index 0000000000..ba0149687e
--- /dev/null
+++ b/cluster/reference/inspect.md
@@ -0,0 +1,16 @@
+---
+description: Inspect clusters
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster inspect
+notoc: true
+---
+
+## Usage
+```
+docker cluster inspect [OPTIONS] cluster
+```
+Use the following options as needed to display detailed information about a cluster:
+
+- `-a, --all`: Displays complete information about the cluster.
+- `--dry-run`: Skips resource provisioning.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
diff --git a/cluster/reference/ls.md b/cluster/reference/ls.md
new file mode 100644
index 0000000000..093944e88f
--- /dev/null
+++ b/cluster/reference/ls.md
@@ -0,0 +1,16 @@
+---
+description: List all available clusters
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster ls
+notoc: true
+---
+
+## Usage
+```
+docker cluster ls [OPTIONS]
+```
+Use the following options as needed to list all available clusters:
+
+- `--dry-run`: Skips resource provisioning.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
+- `-q`, `--quiet`: Displays only numeric IDs.
diff --git a/cluster/reference/overview.md b/cluster/reference/overview.md
new file mode 100644
index 0000000000..fb3d2ccaf9
--- /dev/null
+++ b/cluster/reference/overview.md
@@ -0,0 +1,49 @@
+---
+description: Overview of docker cluster CLI
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: Overview of docker cluster CLI
+---
+
+This page provides usage information for the `docker cluster` CLI plugin command options.
+
+You can also view this information by running `docker cluster --help` from the
+command line.
+
+## Usage
+```
+docker cluster [Options] [Commands]
+```
+
+Options:
+
+- `--dry-run`: Skips resource provisioning.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
+
+Commands:
+
+- `backup`: Backs up a running cluster.
+- `begin`: Creates an example cluster declaration.
+- `create`: Creates a new Docker cluster.
+- `inspect`: Provides detailed information about a cluster.
+- `logs`:TODO: Fetches cluster logs.
+- `ls`: Lists all available clusters.
+- `restore`: Restores a cluster from a backup.
+- `rm`: Removes a cluster.
+- `update`: Updates a running cluster's desired state.
+- `version`: Displays Version, Commit, and Build type.
+
+Run 'docker cluster [Command] --help' for more information about a command.
+```
+
+## Specify name and path of one or more cluster files
+
+Use the `-f` flag to specify the location of a cluster configuration file.
+
+## Set up environment variables
+
+You can set [environment variables](envvars) for various
+`docker cluster` options, including the `-f` and `-p` flags.
+
+## Where to go next
+
+* [CLI environment variables](envvars)
diff --git a/cluster/reference/restore.md b/cluster/reference/restore.md
new file mode 100644
index 0000000000..e47f70bf51
--- /dev/null
+++ b/cluster/reference/restore.md
@@ -0,0 +1,20 @@
+---
+description: Restore to a running cluster
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster restore
+notoc: true
+---
+
+## Usage
+```
+docker cluster restore [OPTIONS] cluster
+```
+Use the following options as needed to restore a cluster from a backup:
+
+- `--dry-run`: Skips resource provisioning.
+- `--file string`: Specifies a cluster backup filename. Defaults to `backup.tar.gz`.
+- `--log-level string`: Specifies the logging level. Valid values include:
+`trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
+- `--passphrase string`: Specifies a cluster backup passphrase.
+
+The restore command performs a full Docker Cluster restore following the steps found in [Backup and Restore Best Practices](https://success.docker.com/article/backup-restore-best-practices).
diff --git a/cluster/reference/rm.md b/cluster/reference/rm.md
new file mode 100644
index 0000000000..ad95c788af
--- /dev/null
+++ b/cluster/reference/rm.md
@@ -0,0 +1,16 @@
+---
+description: Remove a cluster
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster rm
+notoc: true
+---
+
+## Usage
+```
+docker cluster rm [OPTIONS] cluster
+```
+Use the following options as needed when removing a cluster:
+
+- `--dry-run`: Skips resource provisioning.
+- `-f`, `--force`: Forces removal of the cluster files.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
diff --git a/cluster/reference/update.md b/cluster/reference/update.md
new file mode 100644
index 0000000000..de694b813f
--- /dev/null
+++ b/cluster/reference/update.md
@@ -0,0 +1,18 @@
+---
+description: Update a cluster
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster update
+notoc: true
+---
+
+## Usage
+```
+docker cluster update [Options] cluster
+```
+Use the following options as needed to update a running cluster's desired state:
+
+Options:
+
+- `--dry-run`: Skips resource provisioning.
+- `-f`, `--file string`: Specfies cluster definition.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.
diff --git a/cluster/reference/version.md b/cluster/reference/version.md
new file mode 100644
index 0000000000..70c3588956
--- /dev/null
+++ b/cluster/reference/version.md
@@ -0,0 +1,15 @@
+---
+description: Print Version
+keywords: documentation, docs, docker, cluster, infrastructure, automation
+title: docker cluster version
+notoc: true
+---
+
+## Usage
+```
+docker cluster version
+```
+Use the following options as needed for printing Version, Commit, and Build type:
+
+- `--dry-run`: Skips resource provisioning.
+- `--log-level string`: Specifies the logging level. Valid values include: `trace`,`debug`,`info`,`warn`,`error`, and `fatal`. Defaults to `warn`.