Introduce DTR 2.3
240
_data/toc.yaml
|
@ -1247,9 +1247,9 @@ reference:
|
|||
path: /registry/spec/api/
|
||||
nosync: true
|
||||
- title: Trusted Registry API
|
||||
path: /datacenter/dtr/2.2/reference/api/
|
||||
path: /datacenter/dtr/2.3/reference/api/
|
||||
- title: Trusted Registry CLI
|
||||
path: /datacenter/dtr/2.2/reference/cli/
|
||||
path: /datacenter/dtr/2.3/reference/cli/
|
||||
nosync: true
|
||||
- title: Universal Control Plane CLI
|
||||
path: /datacenter/ucp/2.1/reference/cli/
|
||||
|
@ -1718,135 +1718,135 @@ manuals:
|
|||
title: Get support
|
||||
- sectiontitle: Docker Trusted Registry
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/
|
||||
- path: /datacenter/dtr/2.3/guides/
|
||||
title: Docker Trusted Registry overview
|
||||
- path: /datacenter/dtr/2.2/guides/architecture/
|
||||
- path: /datacenter/dtr/2.3/guides/architecture/
|
||||
title: Architecture
|
||||
- sectiontitle: Administration
|
||||
section:
|
||||
- sectiontitle: Install
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/system-requirements/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/install/system-requirements/
|
||||
title: System requirements
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/install/
|
||||
title: Install
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/install-offline/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/install/install-offline/
|
||||
title: Install offline
|
||||
- path: /datacenter/dtr/2.2/guides/admin/upgrade/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/upgrade/
|
||||
title: Upgrade
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/uninstall/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/install/uninstall/
|
||||
title: Uninstall
|
||||
- sectiontitle: Configure
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/license-your-installation/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/license-your-installation/
|
||||
title: License your installation
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/use-your-own-tls-certificates/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/use-your-own-tls-certificates/
|
||||
title: Use your own TLS certificates
|
||||
- sectiontitle: External storage
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/external-storage/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/s3/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/external-storage/s3/
|
||||
title: S3
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/nfs/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/external-storage/nfs/
|
||||
title: NFS
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/set-up-high-availability/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/set-up-high-availability/
|
||||
title: Set up high availability
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/use-a-load-balancer/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/use-a-load-balancer/
|
||||
title: Use a load balancer
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/set-up-vulnerability-scans/
|
||||
title: Set up vulnerability scans
|
||||
- sectiontitle: Deploy caches
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/deploy-caches/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/tls/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/deploy-caches/tls/
|
||||
title: Deploy caches with TLS
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/chaining/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/deploy-caches/chaining/
|
||||
title: Chain multiple caches
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/garbage-collection/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/configure/garbage-collection/
|
||||
title: Garbage collection
|
||||
- sectiontitle: Manage users
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/manage-users/
|
||||
title: Authentication and authorization
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-users/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/manage-users/create-and-manage-users/
|
||||
title: Create and manage users
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-teams/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/manage-users/create-and-manage-teams/
|
||||
title: Create and manage teams
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/manage-users/permission-levels/
|
||||
title: Permission levels
|
||||
- sectiontitle: Monitor and troubleshoot
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/monitor-and-troubleshoot/
|
||||
title: Monitor the cluster status
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/
|
||||
title: Troubleshoot with logs
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-batch-jobs/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/monitor-and-troubleshoot/troubleshoot-batch-jobs/
|
||||
title: Troubleshoot batch jobs
|
||||
- path: /datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery/
|
||||
- path: /datacenter/dtr/2.3/guides/admin/backups-and-disaster-recovery/
|
||||
title: Backups and disaster recovery
|
||||
- sectiontitle: CLI reference
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/reference/cli/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/reference/cli/backup/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/backup/
|
||||
title: backup
|
||||
- path: /datacenter/dtr/2.2/reference/cli/destroy/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/destroy/
|
||||
title: destroy
|
||||
- path: /datacenter/dtr/2.2/reference/cli/images/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/images/
|
||||
title: images
|
||||
- path: /datacenter/dtr/2.2/reference/cli/install/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/install/
|
||||
title: install
|
||||
- path: /datacenter/dtr/2.2/reference/cli/join/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/join/
|
||||
title: join
|
||||
- path: /datacenter/dtr/2.2/reference/cli/reconfigure/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/reconfigure/
|
||||
title: reconfigure
|
||||
- path: /datacenter/dtr/2.2/reference/cli/remove/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/remove/
|
||||
title: remove
|
||||
- path: /datacenter/dtr/2.2/reference/cli/restore/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/restore/
|
||||
title: restore
|
||||
- path: /datacenter/dtr/2.2/reference/cli/upgrade/
|
||||
- path: /datacenter/dtr/2.3/reference/cli/upgrade/
|
||||
title: upgrade
|
||||
- sectiontitle: User guides
|
||||
section:
|
||||
- sectiontitle: Access DTR
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/
|
||||
- path: /datacenter/dtr/2.3/guides/user/access-dtr/
|
||||
title: Configure your Docker Engine
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/configure-your-notary-client/
|
||||
- path: /datacenter/dtr/2.3/guides/user/access-dtr/configure-your-notary-client/
|
||||
title: Configure your Notary client
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/use-a-cache/
|
||||
- path: /datacenter/dtr/2.3/guides/user/access-dtr/use-a-cache/
|
||||
title: Use a cache
|
||||
- sectiontitle: Manage images
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/
|
||||
title: Create a repository
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/pull-and-push-images/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/pull-and-push-images/
|
||||
title: Pull and push images
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/delete-images/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/delete-images/
|
||||
title: Delete images
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/scan-images-for-vulnerabilities/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/scan-images-for-vulnerabilities/
|
||||
title: Scan images for vulnerabilities
|
||||
- sectiontitle: Sign images
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/sign-images/
|
||||
title: Sign an image
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/delegate-image-signing/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/sign-images/delegate-image-signing/
|
||||
title: Delegate image signing
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/manage-trusted-repositories/
|
||||
- path: /datacenter/dtr/2.3/guides/user/manage-images/sign-images/manage-trusted-repositories/
|
||||
title: Manage trusted repositories
|
||||
- path: /datacenter/dtr/2.2/guides/user/create-and-manage-webhooks/
|
||||
- path: /datacenter/dtr/2.3/guides/user/create-and-manage-webhooks/
|
||||
title: Create and manage webhooks
|
||||
- path: /datacenter/dtr/2.2/reference/api/
|
||||
- path: /datacenter/dtr/2.3/reference/api/
|
||||
title: API reference
|
||||
- sectiontitle: Release notes
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/release-notes/
|
||||
- path: /datacenter/dtr/2.3/guides/release-notes/
|
||||
title: Release notes
|
||||
- path: /datacenter/dtr/2.2/guides/release-notes/incompatibilities-and-breaking-changes/
|
||||
- path: /datacenter/dtr/2.3/guides/release-notes/incompatibilities-and-breaking-changes/
|
||||
title: Incompatibilities and breaking changes
|
||||
- path: /datacenter/dtr/2.2/guides/support/
|
||||
- path: /datacenter/dtr/2.3/guides/support/
|
||||
title: Get support
|
||||
- sectiontitle: Previous versions
|
||||
section:
|
||||
|
@ -2078,6 +2078,138 @@ manuals:
|
|||
title: Get support
|
||||
- path: /datacenter/ucp/1.1/release_notes/
|
||||
title: Release notes
|
||||
- sectiontitle: Docker Trusted Registry 2.2
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/
|
||||
title: Docker Trusted Registry overview
|
||||
- path: /datacenter/dtr/2.2/guides/architecture/
|
||||
title: Architecture
|
||||
- sectiontitle: Administration
|
||||
section:
|
||||
- sectiontitle: Install
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/system-requirements/
|
||||
title: System requirements
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/
|
||||
title: Install
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/install-offline/
|
||||
title: Install offline
|
||||
- path: /datacenter/dtr/2.2/guides/admin/upgrade/
|
||||
title: Upgrade
|
||||
- path: /datacenter/dtr/2.2/guides/admin/install/uninstall/
|
||||
title: Uninstall
|
||||
- sectiontitle: Configure
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/license-your-installation/
|
||||
title: License your installation
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/use-your-own-tls-certificates/
|
||||
title: Use your own TLS certificates
|
||||
- sectiontitle: External storage
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/s3/
|
||||
title: S3
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/external-storage/nfs/
|
||||
title: NFS
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/set-up-high-availability/
|
||||
title: Set up high availability
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/use-a-load-balancer/
|
||||
title: Use a load balancer
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans/
|
||||
title: Set up vulnerability scans
|
||||
- sectiontitle: Deploy caches
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/tls/
|
||||
title: Deploy caches with TLS
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/deploy-caches/chaining/
|
||||
title: Chain multiple caches
|
||||
- path: /datacenter/dtr/2.2/guides/admin/configure/garbage-collection/
|
||||
title: Garbage collection
|
||||
- sectiontitle: Manage users
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/
|
||||
title: Create and manage users
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-users/
|
||||
title: Create and manage users
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/create-and-manage-teams/
|
||||
title: Create and manage teams
|
||||
- path: /datacenter/dtr/2.2/guides/admin/manage-users/permission-levels/
|
||||
title: Permission levels
|
||||
- sectiontitle: Monitor and troubleshoot
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/
|
||||
title: Monitor the cluster status
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/
|
||||
title: Troubleshoot with logs
|
||||
- path: /datacenter/dtr/2.2/guides/admin/monitor-and-troubleshoot/troubleshoot-batch-jobs/
|
||||
title: Troubleshoot batch jobs
|
||||
- path: /datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery/
|
||||
title: Backups and disaster recovery
|
||||
- sectiontitle: CLI reference
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/reference/cli/
|
||||
title: Overview
|
||||
- path: /datacenter/dtr/2.2/reference/cli/backup/
|
||||
title: backup
|
||||
- path: /datacenter/dtr/2.2/reference/cli/destroy/
|
||||
title: destroy
|
||||
- path: /datacenter/dtr/2.2/reference/cli/images/
|
||||
title: images
|
||||
- path: /datacenter/dtr/2.2/reference/cli/install/
|
||||
title: install
|
||||
- path: /datacenter/dtr/2.2/reference/cli/join/
|
||||
title: join
|
||||
- path: /datacenter/dtr/2.2/reference/cli/reconfigure/
|
||||
title: reconfigure
|
||||
- path: /datacenter/dtr/2.2/reference/cli/remove/
|
||||
title: remove
|
||||
- path: /datacenter/dtr/2.2/reference/cli/restore/
|
||||
title: restore
|
||||
- path: /datacenter/dtr/2.2/reference/cli/upgrade/
|
||||
title: upgrade
|
||||
- sectiontitle: User guides
|
||||
section:
|
||||
- sectiontitle: Access DTR
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/
|
||||
title: Configure your Docker Engine
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/configure-your-notary-client/
|
||||
title: Configure your Notary client
|
||||
- path: /datacenter/dtr/2.2/guides/user/access-dtr/use-a-cache/
|
||||
title: Use a cache
|
||||
- sectiontitle: Manage images
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/
|
||||
title: Create a repository
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/pull-and-push-images/
|
||||
title: Pull and push images
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/delete-images/
|
||||
title: Delete images
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/scan-images-for-vulnerabilities/
|
||||
title: Scan images for vulnerabilities
|
||||
- sectiontitle: Sign images
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/
|
||||
title: Sign an image
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/delegate-image-signing/
|
||||
title: Delegate image signing
|
||||
- path: /datacenter/dtr/2.2/guides/user/manage-images/sign-images/manage-trusted-repositories/
|
||||
title: Manage trusted repositories
|
||||
- path: /datacenter/dtr/2.2/guides/user/create-and-manage-webhooks/
|
||||
title: Create and manage webhooks
|
||||
- path: /datacenter/dtr/2.2/reference/api/
|
||||
title: API reference
|
||||
- sectiontitle: Release notes
|
||||
section:
|
||||
- path: /datacenter/dtr/2.2/guides/release-notes/
|
||||
title: Release notes
|
||||
- path: /datacenter/dtr/2.2/guides/release-notes/incompatibilities-and-breaking-changes/
|
||||
title: Incompatibilities and breaking changes
|
||||
- path: /datacenter/dtr/2.2/guides/support/
|
||||
title: Get support
|
||||
- sectiontitle: Docker Trusted Registry 2.1
|
||||
section:
|
||||
- path: /datacenter/dtr/2.1/guides/
|
||||
|
|
|
@ -0,0 +1,233 @@
|
|||
---
|
||||
title: DTR backups and recovery
|
||||
description: Learn how to back up your Docker Trusted Registry cluster, and to recover your cluster from an existing backup.
|
||||
keywords: docker, registry, high-availability, backup, recovery
|
||||
---
|
||||
|
||||
DTR needs that a majority (n/2 + 1) of its replicas are healthy at all times
|
||||
for it to work. So if a majority of replicas is unhealthy or lost, the only
|
||||
way to restore DTR to a working state, is by recovering from a backup. This
|
||||
is why it's important to ensure replicas are healthy and perform frequent
|
||||
backups.
|
||||
|
||||
## Data managed by DTR
|
||||
|
||||
Docker Trusted Registry maintains data about:
|
||||
|
||||
| Data | Description |
|
||||
|:-----------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Configurations | The DTR cluster configurations |
|
||||
| Repository metadata | The metadata about the repositories and images deployed |
|
||||
| Access control to repos and images | Permissions for teams and repositories |
|
||||
| Notary data | Notary tags and signatures |
|
||||
| Scan results | Security scanning results for images |
|
||||
| Certificates and keys | The certificates, public keys, and private keys that are used for mutual TLS communication |
|
||||
| Images content | The images you push to DTR. This can be stored on the filesystem of the node running DTR, or other storage system, depending on the configuration |
|
||||
|
||||
This data is persisted on the host running DTR, using named volumes.
|
||||
[Learn more about DTR named volumes](../architecture.md).
|
||||
|
||||
To perform a backup of a DTR node, run the `docker/dtr backup` command. This
|
||||
command backups up the following data:
|
||||
|
||||
| Data | Backed up | Description |
|
||||
|:-----------------------------------|:----------|:---------------------------------------------------------------|
|
||||
| Configurations | yes | |
|
||||
| Repository metadata | yes | |
|
||||
| Access control to repos and images | yes | |
|
||||
| Notary data | yes | |
|
||||
| Scan results | yes | |
|
||||
| Certificates and keys | yes | |
|
||||
| Image content | no | Needs to be backed up separately, depends on DTR configuration |
|
||||
| Users, orgs, teams | no | Create a UCP backup to backup this data |
|
||||
| Vulnerability database | no | Can be re-downloaded after a restore |
|
||||
|
||||
|
||||
## Backup DTR data
|
||||
|
||||
To create a backup of DTR you need to:
|
||||
|
||||
1. Backup image content
|
||||
2. Backup DTR metadata
|
||||
|
||||
You should always create backups from the same DTR replica, to ensure a smoother
|
||||
restore.
|
||||
|
||||
### Backup image content
|
||||
|
||||
Since you can configure the storage backend that DTR uses to store images,
|
||||
the way you backup images depends on the storage backend you're using.
|
||||
|
||||
If you've configured DTR to store images on the local filesystem or NFS mount,
|
||||
you can backup the images by using ssh to log into a node where DTR is running,
|
||||
and creating a tar archive of the [dtr-registry volume](../architecture.md):
|
||||
|
||||
```none
|
||||
tar -cf /tmp/backup-images.tar dtr-registry-<replica-id>
|
||||
```
|
||||
|
||||
If you're using a different storage backend, follow the best practices
|
||||
recommended for that system.
|
||||
|
||||
|
||||
### Backup DTR metadata
|
||||
|
||||
To create a DTR backup, load your UCP client bundle, and run the following
|
||||
command, replacing the placeholders for the real values:
|
||||
|
||||
```none
|
||||
read -sp 'ucp password: ' UCP_PASSWORD; \
|
||||
docker run -i --rm \
|
||||
--env UCP_PASSWORD=$UCP_PASSWORD \
|
||||
docker/dtr:<version> backup \
|
||||
--ucp-url <ucp-url> \
|
||||
--ucp-insecure-tls \
|
||||
--ucp-username <ucp-username> \
|
||||
--existing-replica-id <replica-id> > /tmp/backup-metadata.tar
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
* `<version>`, the version of DTR you're running
|
||||
* `<ucp-url>` is the url you use to access UCP
|
||||
* `<ucp-username>` is the username of a UCP administrator
|
||||
* `<replica-id>` is the id of the DTR replica to backup
|
||||
|
||||
|
||||
This prompts you for the UCP password, backups up the DTR metadata and saves the
|
||||
result into a tar archive. You can learn more about the supported flags in
|
||||
the [reference documentation](../../reference/cli/backup.md).
|
||||
|
||||
The backup command doesn't stop DTR, so that you can take frequent backups
|
||||
without affecting your users. Also, the backup contains sensitive information
|
||||
like private keys, so you can encrypt the backup by running:
|
||||
|
||||
```none
|
||||
gpg --symmetric /tmp/backup-metadata.tar
|
||||
```
|
||||
|
||||
This prompts you for a password to encrypt the backup, copies the backup file
|
||||
and encrypts it.
|
||||
|
||||
### Test your backups
|
||||
|
||||
To validate that the backup was correctly performed, you can print the contents
|
||||
of the tar file created. The backup of the images should look like:
|
||||
|
||||
```none
|
||||
tar -tf /tmp/backup-images.tar
|
||||
|
||||
dtr-backup-v2.2.3/
|
||||
dtr-backup-v2.2.3/rethink/
|
||||
dtr-backup-v2.2.3/rethink/layers/
|
||||
```
|
||||
|
||||
And the backup of the DTR metadata should look like:
|
||||
|
||||
```none
|
||||
tar -tf /tmp/backup-metadata.tar
|
||||
|
||||
# The archive should look like this
|
||||
dtr-backup-v2.2.1/
|
||||
dtr-backup-v2.2.1/rethink/
|
||||
dtr-backup-v2.2.1/rethink/properties/
|
||||
dtr-backup-v2.2.1/rethink/properties/0
|
||||
```
|
||||
|
||||
If you've encrypted the metadata backup, you can use:
|
||||
|
||||
```none
|
||||
gpg -d /tmp/backup.tar.gpg | tar -t
|
||||
```
|
||||
|
||||
You can also create a backup of a UCP cluster and restore it into a new
|
||||
cluster. Then restore DTR on that new cluster to confirm that everything is
|
||||
working as expected.
|
||||
|
||||
## Restore DTR data
|
||||
|
||||
If your DTR has a majority of unhealthy replicas, the one way to restore it to
|
||||
a working state is by restoring from an existing backup.
|
||||
|
||||
To restore DTR, you need to:
|
||||
|
||||
1. Stop any DTR containers that might be running
|
||||
2. Restore the images from a backup
|
||||
3. Restore DTR metadata from a backup
|
||||
4. Re-fetch the vulnerability database
|
||||
|
||||
You need to restore DTR on the same UCP cluster where you've created the
|
||||
backup. If you restore on a different UCP cluster, all DTR resources will be
|
||||
owned by users that don't exist, so you'll not be able to manage the resources,
|
||||
even though they're stored in the DTR data store.
|
||||
|
||||
When restoring, you need to use the same version of the `docker/dtr` image
|
||||
that you've used when creating the update. Other versions are not guaranteed
|
||||
to work.
|
||||
|
||||
### Stop DTR containers
|
||||
|
||||
Start by removing any DTR container that is still running:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
docker/dtr:<version> destroy \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
### Restore images
|
||||
|
||||
If you had DTR configured to store images on the local filesystem, you can
|
||||
extract your backup:
|
||||
|
||||
```none
|
||||
sudo tar -xzf /tmp/image-backup.tar -C /var/lib/docker/volumes
|
||||
```
|
||||
|
||||
If you're using a different storage backend, follow the best practices
|
||||
recommended for that system. When restoring the DTR metadata, DTR will be
|
||||
deployed with the same configurations it had when creating the backup.
|
||||
|
||||
|
||||
### Restore DTR metadata
|
||||
|
||||
You can restore the DTR metadata with the `docker/dtr restore` command. This
|
||||
performs a fresh installation of DTR, and reconfigures it with
|
||||
the configuration created during a backup.
|
||||
|
||||
Load your UCP client bundle, and run the following command, replacing the
|
||||
placeholders for the real values:
|
||||
|
||||
```none
|
||||
read -sp 'ucp password: ' UCP_PASSWORD; \
|
||||
docker run -i --rm \
|
||||
--env UCP_PASSWORD=$UCP_PASSWORD \
|
||||
docker/dtr:<version> restore \
|
||||
--ucp-url <ucp-url> \
|
||||
--ucp-insecure-tls \
|
||||
--ucp-username <ucp-username> \
|
||||
--ucp-node <hostname> \
|
||||
--replica-id <replica-id> \
|
||||
--dtr-external-url <dtr-external-url> < /tmp/backup-metadata.tar
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
* `<version>`, the version of DTR you're running
|
||||
* `<ucp-url>` is the url you use to access UCP
|
||||
* `<ucp-username>` is the username of a UCP administrator
|
||||
* `<hostname>` is the hostname of the node where you've restored the images
|
||||
* `<replica-id>` the id of the replica you backed up
|
||||
* `<dtr-external-url>`the url that clients use to access DTR
|
||||
|
||||
### Re-fetch the vulnerability database
|
||||
|
||||
If you're scanning images, you now need to download the vulnerability database.
|
||||
|
||||
After you successfully restore DTR, you can join new replicas the same way you
|
||||
would after a fresh installation. [Learn more](configure/set-up-vulnerability-scans.md).
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Set up high availability](configure/set-up-high-availability.md)
|
||||
* [DTR architecture](../architecture.md)
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
description: Learn how to set up organizations to enforce security in Docker Trusted
|
||||
Registry.
|
||||
keywords: docker, registry, security, permissions, organizations
|
||||
title: Create and manage organizations in DTR
|
||||
---
|
||||
|
||||
<!-- TODO: review page for v2.2 -->
|
||||
|
||||
When a user creates a repository, only that user has permissions to make changes
|
||||
to the repository.
|
||||
|
||||
For team workflows, where multiple users have permissions to manage a set of
|
||||
common repositories, create an organization. By default, DTR has one
|
||||
organization called 'docker-datacenter', that is shared between DTR and UCP.
|
||||
|
||||
To create a new organization, navigate to the **DTR web UI**, and go to the
|
||||
**Organizations** page.
|
||||
|
||||

|
||||
|
||||
Click the **New organization** button, and choose a meaningful name for the
|
||||
organization.
|
||||
|
||||

|
||||
|
||||
Repositories owned by this organization will contain the organization name, so
|
||||
to pull an image from that repository, you'll use:
|
||||
|
||||
```bash
|
||||
$ docker pull <dtr-domain-name>/<organization>/<repository>:<tag>
|
||||
```
|
||||
|
||||
Click **Save** to create the organization, and then **click the organization**
|
||||
to define which users are allowed to manage this
|
||||
organization. These users will be able to edit the organization settings, edit
|
||||
all repositories owned by the organization, and define the user permissions for
|
||||
this organization.
|
||||
|
||||
For this, click the **Add user** button, **select the users** that you want to
|
||||
grant permissions to manage the organization, and click
|
||||
**Save**. Then change their permissions from 'Member' to **Admin**.
|
||||
|
||||

|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Create and manage users](create-and-manage-users.md)
|
||||
* [Create and manage teams](create-and-manage-teams.md)
|
|
@ -0,0 +1,77 @@
|
|||
---
|
||||
title: Chain multiple caches
|
||||
description: Learn how to deploy and chain multiple caches for Docker Trusted Registry, to cover multiple regions or offices
|
||||
keywords: docker, dtr, tls
|
||||
---
|
||||
|
||||
If your users are distributed geographically, consider chaining multiple DTR
|
||||
caches together for faster pulls.
|
||||
|
||||

|
||||
|
||||
Too many levels of chaining might slow down pulls, so you should try different
|
||||
configurations and benchmark them, to find out the right configuration.
|
||||
|
||||
In this example we'll show how to configure two caches. A dedicated cache for
|
||||
the Asia region that pulls images directly from DTR, and a cache for China, that
|
||||
pulls images from the Asia cache.
|
||||
|
||||
## Cache for the Asia region
|
||||
|
||||
This cache has TLS, and pulls images directly from DTR:
|
||||
|
||||
```
|
||||
version: 0.1
|
||||
storage:
|
||||
delete:
|
||||
enabled: true
|
||||
filesystem:
|
||||
rootdirectory: /var/lib/registry
|
||||
http:
|
||||
addr: :5000
|
||||
tls:
|
||||
certificate: /certs/asia-ca.pem
|
||||
key: /certs/asia-key.pem
|
||||
middleware:
|
||||
registry:
|
||||
- name: downstream
|
||||
options:
|
||||
blobttl: 24h
|
||||
upstreams:
|
||||
- originhost: https://<dtr-url>
|
||||
cas:
|
||||
- /certs/dtr-ca.pem
|
||||
```
|
||||
|
||||
## Cache for the China region
|
||||
|
||||
This cache has TLS, and pulls images from the Asia cache:
|
||||
|
||||
```
|
||||
version: 0.1
|
||||
storage:
|
||||
delete:
|
||||
enabled: true
|
||||
filesystem:
|
||||
rootdirectory: /var/lib/registry
|
||||
http:
|
||||
addr: :5000
|
||||
tls:
|
||||
certificate: /certs/china-ca.pem
|
||||
key: /certs/china-key.pem
|
||||
middleware:
|
||||
registry:
|
||||
- name: downstream
|
||||
options:
|
||||
blobttl: 24h
|
||||
upstreams:
|
||||
- originhost: https://<dtr-url>
|
||||
upstreamhosts:
|
||||
- https://<asia-cache-url>
|
||||
cas:
|
||||
- /certs/asia-cache-ca.pem
|
||||
```
|
||||
|
||||
Since the China cache doesn't need to communicate directly with DTR,
|
||||
it only needs to trust the CA certificates for the next hop, in this case
|
||||
the CA certificate used by the Asia cache.
|
|
@ -0,0 +1,237 @@
|
|||
---
|
||||
title: Deploy DTR caches
|
||||
description: Learn how to deploy and configure DTR caches, so that users can pull images faster.
|
||||
keywords: docker, registry, dtr, cache
|
||||
redirect_from:
|
||||
- /datacenter/dtr/2.2/guides/admin/configure/deploy-a-cache/
|
||||
---
|
||||
|
||||
You can configure DTR to have multiple caches. Once you've deployed caches,
|
||||
users can configure their DTR user account to specify which cache to pull from.
|
||||
|
||||
Then, when users pull from DTR, they are redirected to pull from the cache
|
||||
configured on their user account. By deploying caches geographically closer to remote
|
||||
offices and low connectivity areas, users can pull images faster.
|
||||
|
||||
User requests are authenticated when pulling from a cache. Users can only pull
|
||||
images from a cache if they have access. And if the image has changed in DTR,
|
||||
users will pull the latest version, not an outdated one.
|
||||
|
||||
## How caches work
|
||||
|
||||
After you've deployed the caches, users can configure which cache to
|
||||
pull from on their DTR user settings page.
|
||||
|
||||

|
||||
|
||||
When users try to pull an image by running
|
||||
`docker pull <dtr-url>/<org>/<repository>`, the following happens:
|
||||
|
||||
1. The Docker client makes a request to DTR which in turn authenticates the
|
||||
request
|
||||
2. The Docker client requests the image manifest to DTR. This ensures that
|
||||
users will always pull the correct image, and not an outdated version
|
||||
3. The Docker client requests the layer blobs to DTR, which becomes signed
|
||||
and redirected to the cache configured by the user
|
||||
4. If the blob exists on the cache it is sent to the user. Otherwise, the cache
|
||||
pulls it from DTR and sends it to the user
|
||||
|
||||
When a user pushes an image, that image is pushed directly to DTR. A cache
|
||||
will only store the image when a user tries to pull the image using that cache.
|
||||
|
||||
## Configure the cache
|
||||
|
||||
DTR caches are based on Docker Registry, and use the same configuration
|
||||
file format.
|
||||
[Learn more about the configuration options](/registry/configuration.md).
|
||||
|
||||
The DTR cache extends the Docker Registry configuration file format by
|
||||
introducing a new middleware called `downstream` that has three configuration
|
||||
options: `blobttl`, `upstreams`, and `cas`:
|
||||
|
||||
```none
|
||||
# Settings that you would include in a
|
||||
# Docker Registry configuration file followed by
|
||||
|
||||
middleware:
|
||||
registry:
|
||||
- name: downstream
|
||||
options:
|
||||
blobttl: 24h
|
||||
upstreams:
|
||||
- originhost: <Externally-reachable address for the origin registry>
|
||||
upstreamhosts:
|
||||
- <Externally-reachable address for upstream content cache A>
|
||||
- <Externally-reachable address for upstream content cache B>
|
||||
cas:
|
||||
- <Absolute path to upstream content cache A certificate>
|
||||
- <Absolute path to upstream content cache B certificate>
|
||||
```
|
||||
|
||||
Below you can find the description for each parameter, specific to DTR caches.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Required</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>blobttl</code>
|
||||
</td>
|
||||
<td>
|
||||
no
|
||||
</td>
|
||||
<td>
|
||||
The TTL for blobs in the cache. This field takes a positive integer and an optional suffix indicating the unit of time. If
|
||||
this field is configured, "storage.delete.enabled" must be configured to true. Possible units are:
|
||||
<ul>
|
||||
<li><code>ns</code> (nanoseconds)</li>
|
||||
<li><code>us</code> (microseconds)</li>
|
||||
<li><code>ms</code> (milliseconds)</li>
|
||||
<li><code>s</code> (seconds)</li>
|
||||
<li><code>m</code> (minutes)</li>
|
||||
<li><code>h</code> (hours)</li>
|
||||
</ul>
|
||||
If you omit the suffix, the system interprets the value as nanoseconds.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>cas</code>
|
||||
</td>
|
||||
<td>
|
||||
no
|
||||
</td>
|
||||
<td>
|
||||
A list of absolute paths to PEM-encoded CA certificates of upstream registries.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>originhost</code>
|
||||
</td>
|
||||
<td>
|
||||
yes
|
||||
</td>
|
||||
<td>
|
||||
An externally-reachable address for the origin registry, as a fully qualified URL.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>upstreamhosts</code>
|
||||
</td>
|
||||
<td>
|
||||
no
|
||||
</td>
|
||||
<td>
|
||||
A list of externally-reachable addresses for upstream registries for cache chaining. If more than one host is specified, pulls from upstream content caches will be done in round-robin order.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Deploy a simple cache
|
||||
|
||||
You can deploy a Docker Content Cache on any host that has Docker installed.
|
||||
The only requirements are that:
|
||||
|
||||
* Users need to have access to both DTR and the cache
|
||||
* The cache needs access to DTR
|
||||
|
||||

|
||||
|
||||
On the host where the cache will be deployed, create a `config.yml` file with
|
||||
the following content:
|
||||
|
||||
```
|
||||
version: 0.1
|
||||
storage:
|
||||
delete:
|
||||
enabled: true
|
||||
filesystem:
|
||||
rootdirectory: /var/lib/registry
|
||||
http:
|
||||
addr: :5000
|
||||
middleware:
|
||||
registry:
|
||||
- name: downstream
|
||||
options:
|
||||
blobttl: 24h
|
||||
upstreams:
|
||||
- originhost: https://<dtr-url>
|
||||
cas:
|
||||
- /certs/dtr-ca.pem
|
||||
```
|
||||
|
||||
This configures the cache to store the images in the directory
|
||||
`/var/lib/registry`, exposes the cache service on port 5000, and configures the
|
||||
cache to delete images that are not pulled in the last 24 hours. It also
|
||||
defines where DTR can be reached, and which CA certificates should be trusted.
|
||||
|
||||
Now we need to download the CA certificate used by DTR. For this, run:
|
||||
|
||||
```
|
||||
curl -k https://<dtr-url>/ca > dtr-ca.pem
|
||||
```
|
||||
|
||||
Now that we've got the cache configuration file and DTR CA certificate, we can
|
||||
deploy the cache by running:
|
||||
|
||||
```none
|
||||
docker run --detach --restart always \
|
||||
--name dtr-cache \
|
||||
--publish 5000:5000 \
|
||||
--volume $(pwd)/dtr-ca.pem:/certs/dtr-ca.pem \
|
||||
--volume $(pwd)/config.yml:/config.yml \
|
||||
docker/dtr-content-cache:<version> /config.yml
|
||||
```
|
||||
|
||||
You can also run the command in interactive mode instead of detached by
|
||||
replacing `--detached` with `--interactive`. This allows you to
|
||||
see the logs generated by the container and troubleshoot misconfigurations.
|
||||
|
||||
Now that you've deployed a cache, you need to configure DTR to know about it.
|
||||
This is done using the `POST /api/v0/content_caches` API. You can use the
|
||||
DTR interactive API documentation to use this API.
|
||||
|
||||
In the DTR web UI, click the top-right menu, and choose **API docs**.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Navigate to the `POST /api/v0/content_caches` line and click it to expand.
|
||||
In the **body** field include:
|
||||
|
||||
```
|
||||
{
|
||||
"name": "region-us",
|
||||
"host": "http://<cache-public-ip>:5000"
|
||||
}
|
||||
```
|
||||
|
||||
Click the **Try it out!** button to make the API call.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Now that DTR knows about the cache we've created, we just need to configure
|
||||
our DTR user settings to start using that cache.
|
||||
|
||||
In the DTR web UI, navigate to your **user profile**, click the **Settings**
|
||||
tab, and change the **Content Cache** settings to use the **region-us** cache.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Now when you pull images, you'll be using the cache. To test this, try pulling
|
||||
an image from DTR. You can inspect the logs of the cache service, to validate
|
||||
that the cache is being used, and troubleshoot problems.
|
||||
|
||||
In the host where you've deployed the `region-us` cache, run:
|
||||
|
||||
```
|
||||
docker container logs dtr-cache
|
||||
```
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Deploy caches with TLS](tls.md)
|
|
@ -0,0 +1,93 @@
|
|||
---
|
||||
title: Deploy caches with TLS
|
||||
description: Learn how to deploy and secure caches for Docker Trusted Registry, leveraging TLS
|
||||
keywords: docker, dtr, tls
|
||||
---
|
||||
|
||||
When running DTR caches on a production environment, you should secure them
|
||||
with TLS. In this example we're going to deploy a DTR cache that uses TLS.
|
||||
|
||||
DTR caches use the same configuration file format used by Docker Registry.
|
||||
You can learn more about the supported configuration in the
|
||||
[Docker Registry documentation](/registry/configuration.md#tls).
|
||||
|
||||
|
||||
## Get the TLS certificate and keys
|
||||
|
||||
Before deploying a DTR cache with TLS you need to get a public key
|
||||
certificate for the domain name were you'll deploy the cache. You'll also
|
||||
need the public and private key files for that certificate.
|
||||
|
||||
Once you have then, transfer those file to the host where you'll deploy
|
||||
the DTR cache.
|
||||
|
||||
|
||||
## Create the cache configuration
|
||||
|
||||
Use SSH to log into the host where you'll deploy the DTR cache, and navigate to
|
||||
the directory where you've stored the TLS certificate and keys.
|
||||
|
||||
Create the `config.yml` file with the following content:
|
||||
|
||||
```
|
||||
version: 0.1
|
||||
storage:
|
||||
delete:
|
||||
enabled: true
|
||||
filesystem:
|
||||
rootdirectory: /var/lib/registry
|
||||
http:
|
||||
addr: :5000
|
||||
tls:
|
||||
certificate: /certs/dtr-cache-ca.pem
|
||||
key: /certs/dtr-cache-key.pem
|
||||
middleware:
|
||||
registry:
|
||||
- name: downstream
|
||||
options:
|
||||
blobttl: 24h
|
||||
upstreams:
|
||||
- originhost: https://<dtr-url>
|
||||
cas:
|
||||
- /certs/dtr-ca.pem
|
||||
```
|
||||
|
||||
The configuration file mentions:
|
||||
|
||||
* /certs/dtr-cache-ca.pem: this is the public key certificate the cache will use
|
||||
* /certs/dtr-cache-key.pem: this is the TLS private key
|
||||
* /certs/dtr-ca.pem is the CA certificate used by DTR
|
||||
|
||||
Run this command to download the CA certificate used by DTR:
|
||||
|
||||
```
|
||||
curl -k https://<dtr-url>/ca > dtr-ca.pem
|
||||
```
|
||||
|
||||
Now that we've got the cache configuration file and TLS certificates, we can
|
||||
deploy the cache by running:
|
||||
|
||||
```none
|
||||
docker run --detach --restart always \
|
||||
--name dtr-cache \
|
||||
--publish 5000:5000 \
|
||||
--volume $(pwd)/dtr-cache-ca.pem:/certs/dtr-cache-ca.pem \
|
||||
--volume $(pwd)/dtr-cache-key.pem:/certs/dtr-cache-key.pem \
|
||||
--volume $(pwd)/dtr-ca.pem:/certs/dtr-ca.pem \
|
||||
--volume $(pwd)/config.yml:/config.yml \
|
||||
docker/dtr-content-cache:<version> /config.yml
|
||||
```
|
||||
|
||||
## Use Let's Encrypt
|
||||
|
||||
You can also use Let's Encrypt to automatically generate TLS certificates that
|
||||
are trusted by most clients.
|
||||
|
||||
Learn more [about Let's Encrypt](https://letsencrypt.org/how-it-works/), and
|
||||
how to
|
||||
[create a configuration file that leverages it](/registry/configuration.md#letsencrypt).
|
||||
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Chain multiple caches](chaining.md)
|
|
@ -0,0 +1,74 @@
|
|||
---
|
||||
description: Storage configuration for Docker Trusted Registry
|
||||
keywords: docker, documentation, about, technology, understanding, configuration,
|
||||
storage, storage drivers, Azure, S3, Swift, enterprise, hub, registry
|
||||
title: Configure DTR image storage
|
||||
---
|
||||
|
||||
By default DTR uses the local filesystem of the node where it is running to
|
||||
store your Docker images. You can configure DTR to use an external storage
|
||||
backend, for improved performance or high availability.
|
||||
|
||||

|
||||
|
||||
If your DTR deployment only has a single replica, you can continue using the
|
||||
local filesystem to store your Docker images. If your DTR deployment has
|
||||
multiple replicas, for high availability, you need to ensure all replicas are
|
||||
using the same storage backend. When a user pulls an image, the node serving
|
||||
the request needs to have access to that image.
|
||||
|
||||
DTR supports these storage systems:
|
||||
|
||||
* Local filesystem
|
||||
* NFS
|
||||
* Amazon S3 or compatible
|
||||
* Google Cloud Storage
|
||||
* Microsoft Azure Blob storage
|
||||
* OpenStack Swift
|
||||
|
||||
To configure the storage backend, you can log into the **DTR web UI**
|
||||
as an administrator user, navigate to the **Settings** page, and choose
|
||||
**Storage**.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
The storage configuration page in the DTR web UI has options for the most
|
||||
common configuration options, but you can also upload a yaml configuration file.
|
||||
|
||||
The format of this configuration file is similar to the one used by
|
||||
[Docker Registry](/registry/configuration.md).
|
||||
|
||||
## Local filesystem
|
||||
|
||||
By default, DTR creates a volume names `dtr-registry-<replica-id>` to store
|
||||
your images using the local filesystem. You can customize the name and path of
|
||||
the volume used by DTR, using the `docker/dtr reconfigure --dtr-storage-volume`
|
||||
option.
|
||||
|
||||
If you're deploying DTR with high-availability, you need to use NFS or any other
|
||||
centralized storage backend so that all your DTR replicas have access to the
|
||||
same images.
|
||||
|
||||
To check how much space your images are taking in the local filesystem, you
|
||||
can ssh into the node where DTR is deployed and run:
|
||||
|
||||
```
|
||||
# Find the path to the volume
|
||||
docker volume inspect dtr-registry-<replica-id>
|
||||
|
||||
# Check the disk usage
|
||||
du -hs <path-to-volume>
|
||||
```
|
||||
|
||||
## NFS
|
||||
|
||||
You can configure your DTR replicas to store images on a NFS partition, so that
|
||||
all replicas can share the same storage backend.
|
||||
|
||||
[Learn how to configure DTR with NFS](nfs.md).
|
||||
|
||||
|
||||
## Amazon S3
|
||||
|
||||
DTR supports AWS3 or other storage systems that are S3-compatible like Minio.
|
||||
[Learn how to configure DTR with Amazon S3](s3.md).
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
title: Use NFS
|
||||
description: Learn how to integrate Docker Trusted Registry with NFS
|
||||
keywords: registry, dtr, storage, nfs
|
||||
---
|
||||
|
||||
You can configure DTR to store Docker images in an NFS directory.
|
||||
|
||||
Before installing or configuring DTR to use an NFS directory, make sure that:
|
||||
|
||||
* The NFS server has been correctly configured
|
||||
* The NFS server has a fixed IP address
|
||||
* All hosts running DTR have the correct NFS libraries installed
|
||||
|
||||
|
||||
To confirm that the hosts can connect to the NFS server, try to list the
|
||||
directories exported by your NFS server:
|
||||
|
||||
```bash
|
||||
showmount -e <nfsserver>
|
||||
```
|
||||
|
||||
You should also try to mount one of the exported directories:
|
||||
|
||||
```bash
|
||||
mkdir /tmp/mydir && sudo mount -t nfs <nfs server>:<directory>
|
||||
```
|
||||
|
||||
## Install DTR with NFS
|
||||
|
||||
One way to configure DTR to use an NFS directory is at install time:
|
||||
|
||||
```none
|
||||
docker run -it --rm docker/dtr install \
|
||||
--nfs-storage-url <nfs-storage-url> \
|
||||
<other options>
|
||||
```
|
||||
|
||||
The NFS storage URL should be in the format `nfs://<nfs server>/<directory>`.
|
||||
|
||||
When you join replicas to the DTR cluster, the replicas will pick up that
|
||||
configuration, so you don't need to specify it again.
|
||||
|
||||
### Reconfigure DTR to use NFS
|
||||
|
||||
If you're upgrading from a previous version of DTR and are already using
|
||||
NFS you can continue using the same configurations.
|
||||
|
||||
If you want to start using the new DTR built-in support for NFS you can
|
||||
reconfigure DTR:
|
||||
|
||||
```none
|
||||
docker run -it --rm docker/dtr reconfigure \
|
||||
--nfs-storage-url <nfs-storage-url>
|
||||
```
|
||||
|
||||
If you want to reconfigure DTR to stop using NFS storage, leave the option
|
||||
in blank:
|
||||
|
||||
```none
|
||||
docker run -it --rm docker/dtr reconfigure \
|
||||
--nfs-storage-url ""
|
||||
```
|
||||
|
||||
If the IP address of your NFS server changes, even if the DNS address is kept
|
||||
the same, you should reconfigure DTR to stop using NFS storage, and then
|
||||
add it back again.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Configure where images are stored](index.md)
|
|
@ -0,0 +1,93 @@
|
|||
---
|
||||
title: Store images on Amazon S3
|
||||
description: Learn how to configure Docker Trusted Registry to store Docker images on
|
||||
Amazon S3
|
||||
keywords: docker, dtr, storage driver, s3
|
||||
---
|
||||
|
||||
You can configure DTR to store Docker images on Amazon S3, or other file servers
|
||||
with an S3-compatible API like Minio.
|
||||
|
||||
Amazon S3 and compatible services store files in "buckets", and users have
|
||||
permissions to read, write, and delete files from those buckets. When you
|
||||
integrate DTR with Amazon S3, DTR sends all read and write operations to the
|
||||
S3 bucket so that the images are persisted there.
|
||||
|
||||
## Create a bucket on Amazon S3
|
||||
|
||||
Before configuring DTR you need to create a bucket on Amazon S3.
|
||||
To get faster pulls and pushes, you should create the S3 bucket on a region
|
||||
that's physically close to the servers where DTR is running.
|
||||
|
||||
Start by
|
||||
[creating a bucket](http://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html).
|
||||
Then, as a best practice you should
|
||||
[create a new IAM user](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)
|
||||
just for the DTR
|
||||
integration and apply a IAM policy that ensures the user has limited permissions.
|
||||
|
||||
This user only needs permissions to access the bucket that you'll use to store
|
||||
images, and be able to read, write, and delete files.
|
||||
|
||||
Here's an example of a policy like that:
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "s3:ListAllMyBuckets",
|
||||
"Resource": "arn:aws:s3:::*"
|
||||
},
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"s3:ListBucket",
|
||||
"s3:GetBucketLocation"
|
||||
],
|
||||
"Resource": "arn:aws:s3:::<bucket-name>"
|
||||
},
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"s3:PutObject",
|
||||
"s3:GetObject",
|
||||
"s3:DeleteObject"
|
||||
],
|
||||
"Resource": "arn:aws:s3:::<bucket-name>/*"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Configure DTR
|
||||
|
||||
Once you've created a bucket and user, you can configure DTR to use it.
|
||||
Navigate to the **DTR web UI**, go to **Settings**, and choose **Storage**.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Select the **S3** option, and fill-in the information about the bucket and
|
||||
user.
|
||||
|
||||
| Field | Description |
|
||||
|:----------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Root directory | The path in the bucket where images are stored |
|
||||
| AWS Region name | The region where the bucket is. [Learn more](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) |
|
||||
| S3 bucket name | The name of the bucket to store the images |
|
||||
| AWS access key | The access key to use to access the S3 bucket. This can be left empty if you're using an AIM policy. [Learn more](http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) |
|
||||
| AWS secret key | The secret key to use to access the S3 bucket. This can be left empty if you're using an AIM policy |
|
||||
| Region endpoint | The endpoint name for the region you're using. [Learn more](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) |
|
||||
|
||||
There are also some advanced settings.
|
||||
|
||||
| Field | Description |
|
||||
|:---------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Version 4 auth | Authenticate the requests using AWS signature version 4. [Learn more](http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) |
|
||||
| Use HTTPS | Secure all requests with HTTPS, or make requests in an insecure way |
|
||||
|
||||
Once you click **Save**, DTR validates the configurations and saves the changes.
|
|
@ -0,0 +1,101 @@
|
|||
---
|
||||
description: Configure garbage collection in Docker Trusted Registry
|
||||
keywords: docker, registry, garbage collection, gc, space, disk space
|
||||
title: Docker Trusted Registry 2.2 Garbage Collection
|
||||
---
|
||||
|
||||
#### TL;DR
|
||||
|
||||
1. Garbage Collection (GC) reclaims disk space from your storage by deleting
|
||||
unused layers
|
||||
2. GC can be configured to run automatically with a cron schedule, and can also
|
||||
be run manually. Only admins can configure these
|
||||
3. When GC runs DTR will be placed in read-only mode. Pulls will work but
|
||||
pushes will fail
|
||||
4. The UI will show when GC is running, and an admin can stop GC within the UI
|
||||
|
||||
**Important notes**
|
||||
|
||||
The GC cron schedule is set to run in **UTC time**. Containers typically run in
|
||||
UTC time (unless the system time is mounted), therefore remember that the cron
|
||||
schedule will run based off of UTC time when configuring.
|
||||
|
||||
GC puts DTR into read only mode; pulls succeed while pushes fail. Pushing an
|
||||
image while GC runs may lead to undefined behavior and data loss, therefore
|
||||
this is disabled for safety. For this reason it's generally best practice to
|
||||
ensure GC runs in the early morning on a Saturday or Sunday night.
|
||||
|
||||
|
||||
## Setting up garbage collection
|
||||
|
||||
You can set up GC if you're an admin by hitting "Settings" in the UI then
|
||||
choosing "Garbage Collection". By default, GC will be disabled, showing this
|
||||
screen:
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Here you can configure GC to run **until it's done** or **with a timeout**.
|
||||
The timeout ensures that your registry will be in read-only mode for a maximum
|
||||
amount of time.
|
||||
|
||||
Select an option (either "Until done" or "For N minutes") and you'll have the
|
||||
option to configure GC to run via a cron job, with several default crons
|
||||
provided:
|
||||
|
||||
{: .with-border}
|
||||
|
||||
You can also choose "Do not repeat" to disable the cron schedule entirely.
|
||||
|
||||
Once the cron schedule has been configured (or disabled), you have the option to
|
||||
the schedule ("Save") or save the schedule *and* start GC immediately ("Save
|
||||
& Start").
|
||||
|
||||
## Stopping GC while it's running
|
||||
|
||||
When GC runs the garbage collection settings page looks as follows:
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Note the global banner visible to all users, ensuring everyone knows that GC is
|
||||
running.
|
||||
|
||||
An admin can stop the current GC process by hitting "Stop". This safely shuts
|
||||
down the running GC job and moves the registry into read-write mode, ensuring
|
||||
pushes work as expected.
|
||||
|
||||
## How does garbage collection work?
|
||||
|
||||
### Background: how images are stored
|
||||
|
||||
Each image stored in DTR is made up of multiple files:
|
||||
|
||||
- A list of "layers", which represent the image's filesystem
|
||||
- The "config" file, which dictates the OS, architecture and other image
|
||||
metadata
|
||||
- The "manifest", which is pulled first and lists all layers and the config file
|
||||
for the image.
|
||||
|
||||
All of these files are stored in a content-addressable manner. We take the
|
||||
sha256 hash of the file's content and use the hash as the filename. This means
|
||||
that if tag `example.com/user/blog:1.11.0` and `example.com/user/blog:latest`
|
||||
use the same layers we only store them once.
|
||||
|
||||
### How this impacts GC
|
||||
|
||||
Let's continue from the above example, where `example.com/user/blog:latest` and
|
||||
`example.com/user/blog:1.11.0` point to the same image and use the same layers.
|
||||
If we delete `example.com/user/blog:latest` but *not*
|
||||
`example.com/user/blog:1.11.0` we expect that `example.com/user/blog:1.11.0`
|
||||
can still be pulled.
|
||||
|
||||
This means that we can't delete layers when tags or manifests are deleted.
|
||||
Instead, we need to pause writing and take reference counts to see how many
|
||||
times a file is used. If the file is never used only then is it safe to delete.
|
||||
|
||||
This is the basis of our "mark and sweep" collection:
|
||||
|
||||
1. Iterate over all manifests in registry and record all files that are
|
||||
referenced
|
||||
2. Iterate over all file stored and check if the file is referenced by any
|
||||
manifest
|
||||
3. If the file is *not* referenced, delete it
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
title: License your installation
|
||||
description: Learn how to license your Docker Trusted Registry installation.
|
||||
keywords: docker, dtr, install, license
|
||||
---
|
||||
|
||||
By default, you don't need to license your Docker Trusted Registry. When
|
||||
installing DTR, it automatically starts using the same license file used on
|
||||
your Docker Universal Control Plane cluster.
|
||||
|
||||
However, there are some situations when you have to manually license your
|
||||
DTR installation:
|
||||
|
||||
* When upgrading to a new major version,
|
||||
* When your current license expires.
|
||||
|
||||
|
||||
## Download your license
|
||||
|
||||
Go to [Docker Store](https://store.docker.com/bundles/docker-datacenter) and
|
||||
download your license.
|
||||
|
||||

|
||||
|
||||
|
||||
## License your installation
|
||||
|
||||
Once you've downloaded the license file, you can apply it to your DTR
|
||||
installation. Navigate to the **DTR web UI**, and then go to the **Settings
|
||||
page**.
|
||||
|
||||

|
||||
|
||||
Click the **Apply new license** button, and upload your new license file.
|
||||
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Use your own TLS certificates](use-your-own-tls-certificates.md)
|
|
@ -0,0 +1,89 @@
|
|||
---
|
||||
title: Set up high availability
|
||||
description: Lean how to scale Docker Trusted Registry by adding and removing replicas.
|
||||
keywords: docker, dtr, install, deploy
|
||||
---
|
||||
|
||||
Docker Trusted Registry is designed to scale horizontally as your usage
|
||||
increases. You can add more replicas to make DTR scale to your demand and for
|
||||
high availability.
|
||||
|
||||
All DTR replicas run the same set of services and changes to their configuration
|
||||
are automatically propagated to other replicas.
|
||||
|
||||

|
||||
|
||||
To make DTR tolerant to failures, add additional replicas to the DTR cluster.
|
||||
|
||||
| DTR replicas | Failures tolerated |
|
||||
|:------------:|:------------------:|
|
||||
| 1 | 0 |
|
||||
| 3 | 1 |
|
||||
| 5 | 2 |
|
||||
| 7 | 3 |
|
||||
|
||||
|
||||
When sizing your DTR installation for high-availability,
|
||||
follow these rules of thumb:
|
||||
|
||||
* Don't create a DTR cluster with just two replicas. Your cluster
|
||||
won't tolerate any failures, and it's possible that you experience performance
|
||||
degradation.
|
||||
* When a replica fails, the number of failures tolerated by your cluster
|
||||
decreases. Don't leave that replica offline for long.
|
||||
* Adding too many replicas to the cluster might also lead to performance
|
||||
degradation, as data needs to be replicated across all replicas.
|
||||
|
||||
To have high-availability on UCP and DTR, you need a minimum of:
|
||||
|
||||
* 3 dedicated nodes to install UCP with high availability,
|
||||
* 3 dedicated nodes to install DTR with high availability,
|
||||
* As many nodes as you want for running your containers and applications.
|
||||
|
||||
## Join more DTR replicas
|
||||
|
||||
To add replicas to an existing DTR deployment:
|
||||
|
||||
1. Use ssh to log into any node that is already part of UCP.
|
||||
|
||||
2. Run the DTR join command:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} join \
|
||||
--ucp-node <ucp-node-name> \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
Where the `--ucp-node` is the hostname of the UCP node where you want to
|
||||
deploy the DTR replica. `--ucp-insecure-tls` tells the command to trust the
|
||||
certificates used by UCP.
|
||||
|
||||
3. If you have a load balancer, add this DTR replica to the load balancing pool.
|
||||
|
||||
## Remove existing replicas
|
||||
|
||||
To remove a DTR replica from your deployment:
|
||||
|
||||
1. Use ssh to log into any node that is part of UCP.
|
||||
2. Run the DTR remove command:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} remove \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
You will be prompted for:
|
||||
|
||||
* Existing replica id: the id of any healthy DTR replica of that cluster
|
||||
* Replica id: the id of the DTR replica you want to remove. It can be the id of an
|
||||
unhealthy replica
|
||||
* UCP username and password: the administrator credentials for UCP
|
||||
|
||||
If you're load-balancing user requests across multiple DTR replicas, don't
|
||||
forget to remove this replica from the load balancing pool.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Set up vulnerability scans](set-up-vulnerability-scans.md)
|
|
@ -0,0 +1,181 @@
|
|||
---
|
||||
description: Enable and configure Docker Security Scanning for Docker Trusted Registry.
|
||||
keywords: docker, registry, scanning, security scan, vulnerability, CVE
|
||||
title: Set up Security Scanning in DTR
|
||||
---
|
||||
|
||||
This page explains how to set up and enable Docker Security Scanning on an existing installation of Docker Trusted Registry.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
These instructions assume that you have already installed Docker Trusted
|
||||
Registry, and have access to an account on the DTR instance with administrator
|
||||
access.
|
||||
|
||||
Before you begin, make sure that you or your organization has purchased a DTR
|
||||
license that includes Docker Security Scanning, and that your Docker ID can
|
||||
access and download this license from the Docker Store.
|
||||
|
||||
If you are using a license associated with an individual account, no additional
|
||||
action is needed. If you are using a license associated with an organization
|
||||
account, you may need to make sure your Docker ID is a member of the `Owners`
|
||||
team. Only `Owners` team members can download license files for an Organization.
|
||||
|
||||
If you will be allowing the Security Scanning database to update itself
|
||||
automatically, make sure that the server hosting your DTR instance can access
|
||||
`https://dss-cve-updates.docker.com/` on the standard https port 443.
|
||||
|
||||
## Get the security scanning license.
|
||||
|
||||
If your DTR instance already has a license that includes Security Scanning, skip
|
||||
this step and proceed to [enable DTR Security Scanning](#enable-dtr-security-scanning).
|
||||
|
||||
> **Tip**: To check if your existing DTR license includes scanning, navigate to the DTR **Settings** page, and click **Security**. If an "Enable scanning" toggle appears, the license includes scanning.
|
||||
|
||||
If your current DTR license doesn't include scanning, you must first download the new license.
|
||||
|
||||
1. Log in to the Docker Store using a Docker ID with access to the license you need.
|
||||
2. In the top right corner, click your user account icon, and select **Subscriptions**.
|
||||
3. If necessary, select an organization account from the **Accounts** menu at the upper right.
|
||||
4. Locate Docker Datacenter in the **Subscriptions** list.
|
||||
5. Click **Subscription Details** and select **Setup instructions**.
|
||||
6. Click **License key** below the Docker Datacenter logo.
|
||||
The license key (a `.lic` file) is downloaded to your local computer.
|
||||
{: .with-border}
|
||||
Next, install the new license on the DTR instance.
|
||||
|
||||
7. Log in to your DTR instance using an administrator account.
|
||||
8. Click **Settings** in the left navigation.
|
||||
9. On the **General** tab click **Apply new license**.
|
||||
|
||||
A file browser dialog appears.
|
||||
|
||||
10. Navigate to where you saved the license key (`.lic`) file, select it, and click **Open**.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Proceed to [enable DTR Security Scanning](#enable-dtr-security-scanning).
|
||||
|
||||
## Enable DTR security scanning
|
||||
|
||||
To enable security scanning in DTR:
|
||||
|
||||
1. Log in to your DTR instance with an administrator account.
|
||||
2. Click **Settings** in the left navigation.
|
||||
3. Click the **Security** tab.
|
||||
|
||||
> **Note**: If you see a message on this tab telling you to contact your Docker sales representative, then the license installed on this DTR instance does not include Docker Security Scanning. Check that you have purchased Security Scanning, and that the DTR instance is using the latest license file.
|
||||
|
||||
4. Click the **Enable scanning** toggle so that it turns blue and says "on".
|
||||
{: .with-border}
|
||||
5. Next, provide a security database for the scanner. **Security scanning will not function until DTR has a security database to use.**
|
||||
|
||||
By default, security scanning is enabled in **Online** mode. In this mode,
|
||||
DTR attempts to download a security database from a Docker server. If your
|
||||
installation cannot access `https://dss-cve-updates.docker.com/` you must
|
||||
manually upload a `.tar` file containing the security database.
|
||||
|
||||
- If you are using `Online` mode, the DTR instance will contact a Docker server, download the latest vulnerability database, and install it. Scanning can begin once this process completes.<!--(TODO: no completion or confirmation message?) -->
|
||||
- If you are using `Offline` mode, use the instructions in [Update scanning database - offline mode](#update-cve-database---offline-mode) to upload an initial security database.
|
||||
|
||||
By default when Security Scanning is enabled, new repositories will automatically scan on `docker push`. If you had existing repositories before you enabled security scanning, you might want to [change repository scanning behavior](#set-repository-scanning-mode).
|
||||
|
||||
## Set repository scanning mode
|
||||
|
||||
Two modes are available when Security Scanning is enabled:
|
||||
|
||||
- `Scan on push & Scan manually`: the image is re-scanned on each `docker push` to the repository, and whenever a user with `write` access clicks the **Start Scan** links or **Scan** button.
|
||||
- `Scan manually`: the image is scanned only when a user with `write` access clicks the **Start Scan** links or **Scan** button.
|
||||
|
||||
By default, _new_ repositories are set to `Scan on push & Scan manually`, but
|
||||
you can change this setting during repository creation.
|
||||
|
||||
{: .with-border}
|
||||
|
||||
Any repositories that existed before scanning was enabled are set to `Scan manually` mode by default. If these repositories are still in use, you can change this setting from each repository's **Settings** page.
|
||||
|
||||
> **Note**: To change an individual repository's scanning mode, you must have
|
||||
`write` or `admin` access to the repo.
|
||||
|
||||
To change an individual repository's scanning mode:
|
||||
|
||||
1. Navigate to the repository, and click the **Settings** tab.
|
||||
2. Scroll down to the **Image scanning** section.
|
||||
3. Select the desired scanning mode.
|
||||
{: .with-border}
|
||||
|
||||
## Update the CVE scanning database
|
||||
|
||||
Docker Security Scanning indexes the components in your DTR images and compares
|
||||
them against a known CVE database. When new vulnerabilities are reported, Docker
|
||||
Security Scanning matches the components in new CVE reports to the indexed
|
||||
components in your images, and quickly generates an updated report.
|
||||
|
||||
Users with administrator access to DTR can check when the CVE database was last updated from the **Security** tab in the DTR **Settings** pages.
|
||||
|
||||
### Update CVE database - online mode
|
||||
|
||||
By default Docker Security Scanning checks automatically for updates to the
|
||||
vulnerability database, and downloads them when available. If your installation
|
||||
does not have access to the public internet, use the [Offline mode instructions below](#update-cve-database-offline-mode).
|
||||
|
||||
To ensure that DTR can access these updates, make sure that the host can reach
|
||||
`https://dss-cve-updates.docker.com/` on port 443 using https.
|
||||
|
||||
DTR checks for new CVE database updates at 3:00 AM UTC every day. If an update
|
||||
is found it is downloaded and applied without interrupting any scans in
|
||||
progress. Once the update is complete, the security scanning system looks for
|
||||
new vulnerabilities in the indexed components.
|
||||
|
||||
To set the update mode to Online:
|
||||
|
||||
1. Log in to DTR as a user with administrator rights.
|
||||
2. Click **Settings** in the left navigation and click **Security**.
|
||||
3. Click **Online**.
|
||||
|
||||
Your choice is saved automatically.
|
||||
|
||||
> **Tip**: DTR also checks for CVE database updates when scanning is first enabled, and when you switch update modes. If you need to check for a CVE database update immediately, you can briefly switch modes from online to offline and back again.
|
||||
|
||||
### Update CVE database - offline mode
|
||||
|
||||
To update the CVE database for your DTR instance when it cannot contact the update server, you download and install a `.tar` file that contains the database updates. Contact us at [nautilus-feedback@docker.com](mailto:nautilus-feedback@docker.com?Subject=Need%20CVE%20database%20file) for an updated database file.
|
||||
|
||||
<!-- TODO: update when Store updates available: https://docker.atlassian.net/browse/MER-1444
|
||||
1. Log in to the Docker Store.
|
||||
|
||||
If you are a member of an Organization managing licenses using Docker Store,
|
||||
make sure your account is a member of the `Owners` team. Only Owners can
|
||||
view and manage licenses and other entitlements for Organizations from the
|
||||
Docker Store.
|
||||
|
||||
2. In the top right corner, click your user account icon, and select **Subscriptions**.
|
||||
3. If necessary, select an organization account from the **Accounts** menu at the upper right.
|
||||
4. Locate Docker Datacenter in the **Subscriptions** list.
|
||||
5. Click ...-->
|
||||
|
||||
To manually update the DTR CVE database from a `.tar` file:
|
||||
|
||||
1. Log in to DTR as a user with administrator rights.
|
||||
2. Click **Settings** in the left navigation and click **Security**.
|
||||
4. Click **Upload .tar database file**.
|
||||
5. Browse to the latest `.tar` file that you received, and click **Open**.
|
||||
|
||||
DTR installs the new CVE database, and begins checking already indexed images
|
||||
for components that match new or updated vulnerabilities.
|
||||
|
||||
> **Tip**: The Upload button is unavailable while DTR applies CVE database updates.
|
||||
|
||||
## Enable or disable automatic database updates
|
||||
|
||||
To change the update mode:
|
||||
|
||||
1. Log in to DTR as a user with administrator rights.
|
||||
2. Click **Settings** in the left navigation and click **Security**.
|
||||
3. Click **Online/Offline**.
|
||||
|
||||
Your choice is saved automatically.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Deploy DTR caches](deploy-caches/index.md)
|
|
@ -0,0 +1,288 @@
|
|||
---
|
||||
title: Use a load balancer
|
||||
description: Learn how to configure a load balancer to balance user requests across multiple Docker Trusted Registry replicas.
|
||||
keywords: docker, dtr, load balancer
|
||||
---
|
||||
|
||||
Once you’ve joined multiple DTR replicas nodes for
|
||||
[high-availability](set-up-high-availability.md), you can configure your own
|
||||
load balancer to balance user requests across all replicas.
|
||||
|
||||

|
||||
|
||||
|
||||
This allows users to access DTR using a centralized domain name. If a replica
|
||||
goes down, the load balancer can detect that and stop forwarding requests to
|
||||
it, so that the failure goes unnoticed by users.
|
||||
|
||||
## Load balancing DTR
|
||||
|
||||
DTR does not provide a load balancing service. You can use an on-premises
|
||||
or cloud-based load balancer to balance requests across multiple DTR replicas.
|
||||
|
||||
Make sure you configure your load balancer to:
|
||||
|
||||
* Load balance TCP traffic on ports 80 and 443
|
||||
* Not terminate HTTPS connections
|
||||
* Use the unauthenticated `/health` endpoint (note the lack of an `/api/v0/` in
|
||||
the path) on each DTR replica, to check if the replica is healthy and if it
|
||||
should remain in the load balancing pool or not
|
||||
|
||||
## Health check endpoints
|
||||
|
||||
The `/health` endpoint returns a JSON object for the replica being queried of
|
||||
the form:
|
||||
|
||||
```json
|
||||
{
|
||||
"Error": "error message",
|
||||
"Health": true
|
||||
}
|
||||
```
|
||||
|
||||
A response of `"Healthy": true` means the replica is suitable for taking
|
||||
requests. It is also sufficient to check whether the HTTP status code is 200.
|
||||
|
||||
An unhealthy replica will return 503 as the status code and populate `"Error"`
|
||||
with more details on any one of these services:
|
||||
|
||||
* Storage container (registry)
|
||||
* Authorization (garant)
|
||||
* Metadata persistence (rethinkdb)
|
||||
* Content trust (notary)
|
||||
|
||||
Note that this endpoint is for checking the health of a *single* replica. To get
|
||||
the health of every replica in a cluster, querying each replica individiually is
|
||||
the preferred way to do it in real time.
|
||||
|
||||
The `/api/v0/meta/cluster_status`
|
||||
[endpoint](https://docs.docker.com/datacenter/dtr/2.2/reference/api/)
|
||||
returns a JSON object for the entire cluster *as observed* by the replica being
|
||||
queried, and it takes the form:
|
||||
|
||||
```json
|
||||
{
|
||||
"replica_health": {
|
||||
"replica id": "OK",
|
||||
"another replica id": "error message"
|
||||
},
|
||||
"replica_timestamp": {
|
||||
"replica id": "2006-01-02T15:04:05Z07:00",
|
||||
"another replica id": "2006-01-02T15:04:05Z07:00"
|
||||
},
|
||||
"(other fields go here)": "..."
|
||||
}
|
||||
```
|
||||
|
||||
Health statuses for the replicas is available in the `"replica_health"` object.
|
||||
These statuses are taken from a cache which is last updated by each replica
|
||||
individually at the time specified in the `"replica_timestamp"` object.
|
||||
|
||||
The response also contains information about the internal DTR storage state,
|
||||
which is around 45 KB of data. This, combined with the fact that the endpoint
|
||||
requires admin credentials, means it is not particularly appropriate for load
|
||||
balance checks. Use `/health` instead for those kinds of checks.
|
||||
|
||||
|
||||
## Configuration examples
|
||||
|
||||
Use the following examples to configure your load balancer for DTR.
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" data-target="#nginx" data-group="nginx">NGINX</a></li>
|
||||
<li><a data-toggle="tab" data-target="#haproxy" data-group="haproxy">HAProxy</a></li>
|
||||
<li><a data-toggle="tab" data-target="#aws">AWS LB</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div id="nginx" class="tab-pane fade in active" markdown="1">
|
||||
```conf
|
||||
user nginx;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
stream {
|
||||
upstream dtr_80 {
|
||||
server <DTR_REPLICA_1_IP>:80 max_fails=2 fail_timeout=30s;
|
||||
server <DTR_REPLICA_2_IP>:80 max_fails=2 fail_timeout=30s;
|
||||
server <DTR_REPLICA_N_IP>:80 max_fails=2 fail_timeout=30s;
|
||||
}
|
||||
upstream dtr_443 {
|
||||
server <DTR_REPLICA_1_IP>:443 max_fails=2 fail_timeout=30s;
|
||||
server <DTR_REPLICA_2_IP>:443 max_fails=2 fail_timeout=30s;
|
||||
server <DTR_REPLICA_N_IP>:443 max_fails=2 fail_timeout=30s;
|
||||
}
|
||||
server {
|
||||
listen 443;
|
||||
proxy_pass dtr_443;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
proxy_pass dtr_80;
|
||||
}
|
||||
}
|
||||
```
|
||||
</div>
|
||||
<div id="haproxy" class="tab-pane fade" markdown="1">
|
||||
```conf
|
||||
global
|
||||
log /dev/log local0
|
||||
log /dev/log local1 notice
|
||||
|
||||
defaults
|
||||
mode tcp
|
||||
option dontlognull
|
||||
timeout connect 5000
|
||||
timeout client 50000
|
||||
timeout server 50000
|
||||
### frontends
|
||||
# Optional HAProxy Stats Page accessible at http://<host-ip>:8181/haproxy?stats
|
||||
frontend dtr_stats
|
||||
mode http
|
||||
bind 0.0.0.0:8181
|
||||
default_backend dtr_stats
|
||||
frontend dtr_80
|
||||
mode tcp
|
||||
bind 0.0.0.0:80
|
||||
default_backend dtr_upstream_servers_80
|
||||
frontend dtr_443
|
||||
mode tcp
|
||||
bind 0.0.0.0:443
|
||||
default_backend dtr_upstream_servers_443
|
||||
### backends
|
||||
backend dtr_stats
|
||||
mode http
|
||||
option httplog
|
||||
stats enable
|
||||
stats admin if TRUE
|
||||
stats refresh 5m
|
||||
backend dtr_upstream_servers_80
|
||||
mode tcp
|
||||
option httpchk GET /health HTTP/1.1\r\nHost:\ <DTR_FQDN>
|
||||
server node01 <DTR_REPLICA_1_IP>:80 check weight 100
|
||||
server node02 <DTR_REPLICA_2_IP>:80 check weight 100
|
||||
server node03 <DTR_REPLICA_N_IP>:80 check weight 100
|
||||
backend dtr_upstream_servers_443
|
||||
mode tcp
|
||||
option httpchk GET /health HTTP/1.1\r\nHost:\ <DTR_FQDN>
|
||||
server node01 <DTR_REPLICA_1_IP>:443 weight 100 check check-ssl verify none
|
||||
server node02 <DTR_REPLICA_2_IP>:443 weight 100 check check-ssl verify none
|
||||
server node03 <DTR_REPLICA_N_IP>:443 weight 100 check check-ssl verify none
|
||||
```
|
||||
</div>
|
||||
<div id="aws" class="tab-pane fade" markdown="1">
|
||||
```json
|
||||
{
|
||||
"Subnets": [
|
||||
"subnet-XXXXXXXX",
|
||||
"subnet-YYYYYYYY",
|
||||
"subnet-ZZZZZZZZ"
|
||||
],
|
||||
"CanonicalHostedZoneNameID": "XXXXXXXXXXX",
|
||||
"CanonicalHostedZoneName": "XXXXXXXXX.us-west-XXX.elb.amazonaws.com",
|
||||
"ListenerDescriptions": [
|
||||
{
|
||||
"Listener": {
|
||||
"InstancePort": 443,
|
||||
"LoadBalancerPort": 443,
|
||||
"Protocol": "TCP",
|
||||
"InstanceProtocol": "TCP"
|
||||
},
|
||||
"PolicyNames": []
|
||||
}
|
||||
],
|
||||
"HealthCheck": {
|
||||
"HealthyThreshold": 2,
|
||||
"Interval": 10,
|
||||
"Target": "HTTPS:443/health",
|
||||
"Timeout": 2,
|
||||
"UnhealthyThreshold": 4
|
||||
},
|
||||
"VPCId": "vpc-XXXXXX",
|
||||
"BackendServerDescriptions": [],
|
||||
"Instances": [
|
||||
{
|
||||
"InstanceId": "i-XXXXXXXXX"
|
||||
},
|
||||
{
|
||||
"InstanceId": "i-XXXXXXXXX"
|
||||
},
|
||||
{
|
||||
"InstanceId": "i-XXXXXXXXX"
|
||||
}
|
||||
],
|
||||
"DNSName": "XXXXXXXXXXXX.us-west-2.elb.amazonaws.com",
|
||||
"SecurityGroups": [
|
||||
"sg-XXXXXXXXX"
|
||||
],
|
||||
"Policies": {
|
||||
"LBCookieStickinessPolicies": [],
|
||||
"AppCookieStickinessPolicies": [],
|
||||
"OtherPolicies": []
|
||||
},
|
||||
"LoadBalancerName": "ELB-DTR",
|
||||
"CreatedTime": "2017-02-13T21:40:15.400Z",
|
||||
"AvailabilityZones": [
|
||||
"us-west-2c",
|
||||
"us-west-2a",
|
||||
"us-west-2b"
|
||||
],
|
||||
"Scheme": "internet-facing",
|
||||
"SourceSecurityGroup": {
|
||||
"OwnerAlias": "XXXXXXXXXXXX",
|
||||
"GroupName": "XXXXXXXXXXXX"
|
||||
}
|
||||
}
|
||||
```
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
You can deploy your load balancer using:
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" data-target="#nginx-2" data-group="nginx">NGINX</a></li>
|
||||
<li><a data-toggle="tab" data-target="#haproxy-2" data-group="haproxy">HAProxy</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div id="nginx-2" class="tab-pane fade in active" markdown="1">
|
||||
```conf
|
||||
# Create the nginx.conf file, then
|
||||
# deploy the load balancer
|
||||
|
||||
docker run --detach \
|
||||
--name dtr-lb \
|
||||
--restart=unless-stopped \
|
||||
--publish 80:80 \
|
||||
--publish 443:443 \
|
||||
--volume ${PWD}/nginx.conf:/etc/nginx/nginx.conf:ro \
|
||||
nginx:stable-alpine
|
||||
```
|
||||
</div>
|
||||
<div id="haproxy-2" class="tab-pane fade" markdown="1">
|
||||
```conf
|
||||
# Create the haproxy.cfg file, then
|
||||
# deploy the load balancer
|
||||
|
||||
docker run --detach \
|
||||
--name dtr-lb \
|
||||
--publish 443:443 \
|
||||
--publish 80:80 \
|
||||
--publish 8181:8181 \
|
||||
--restart=unless-stopped \
|
||||
--volume ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
|
||||
haproxy:1.7-alpine haproxy -d -f /usr/local/etc/haproxy/haproxy.cfg
|
||||
```
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Backups and disaster recovery](../backups-and-disaster-recovery.md)
|
||||
* [DTR architecture](../../architecture.md)
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
title: Use your own TLS certificates
|
||||
description: Learn how to configure Docker Trusted Registry with your own TLS certificates.
|
||||
keywords: docker, dtr, tls
|
||||
---
|
||||
|
||||
|
||||
By default the DTR services are exposed using HTTPS, to ensure all
|
||||
communications between clients and DTR is encrypted. Since DTR
|
||||
replicas use self-signed certificates for this, when a client accesses
|
||||
DTR, their browsers won't trust this certificate, so the browser displays a
|
||||
warning message.
|
||||
|
||||
You can configure DTR to use your own certificates, so that it is automatically
|
||||
trusted by your users' browser and client tools.
|
||||
|
||||
## Replace the server certificates
|
||||
|
||||
To configure DTR to use your own certificates and keys, go to the
|
||||
**DTR web UI**, navigate to the **Settings** page, and scroll down to the
|
||||
**Domain** section.
|
||||
|
||||

|
||||
|
||||
|
||||
Set the DTR domain name and upload the certificates and key:
|
||||
|
||||
* Load balancer/public address, is the domain name clients will use to access DTR.
|
||||
* TLS certificate, is the server certificate and any intermediate CA public
|
||||
certificates. This certificate needs to be valid for the DTR public address,
|
||||
and have SANs for all addresses used to reach the DTR replicas, including load
|
||||
balancers.
|
||||
* TLS private key is the server private key.
|
||||
* TLS CA is the root CA public certificate.
|
||||
|
||||
Finally, click **Save** for the changes to take effect.
|
||||
|
||||
If you're using certificates issued by a globally trusted certificate authority,
|
||||
any web browser or client tool should now trust DTR. If you're using an internal
|
||||
certificate authority, you'll need to configure your system to trust that
|
||||
certificate authority.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Set up external storage](external-storage/index.md)
|
|
@ -0,0 +1,138 @@
|
|||
---
|
||||
description: Learn how to install Docker Trusted Registry for production.
|
||||
keywords: docker, dtr, registry, install
|
||||
title: Install Docker Trusted Registry
|
||||
---
|
||||
|
||||
Docker Trusted Registry (DTR) is a containerized application that runs on a
|
||||
swarm managed by Docker Universal Control Plane (UCP). It can be installed
|
||||
on-premises or on a cloud infrastructure.
|
||||
|
||||
Use these instructions to install DTR.
|
||||
|
||||
## Step 1. Validate the system requirements
|
||||
|
||||
The first step in installing DTR, is ensuring your
|
||||
infrastructure has all the [requirements DTR needs to run](system-requirements.md).
|
||||
|
||||
## Step 2. Install UCP
|
||||
|
||||
Since DTR requires Docker Universal Control Plane (UCP)
|
||||
to run, you need to install UCP on all the nodes where you plan to install DTR.
|
||||
[Learn how to install UCP](/datacenter/ucp/2.1/guides/admin/install.md).
|
||||
|
||||
DTR needs to be installed on a worker node that is being managed by UCP.
|
||||
You can't install DTR on a standalone Docker Engine.
|
||||
|
||||

|
||||
|
||||
|
||||
## Step 3. Install DTR
|
||||
|
||||
To install DTR you use the `docker/dtr` image. This image has commands to
|
||||
install, configure, and backup DTR.
|
||||
|
||||
Run the following command to install DTR:
|
||||
|
||||
```none
|
||||
# Pull the latest version of DTR
|
||||
$ docker pull {{ page.docker_image }}
|
||||
|
||||
# Install DTR
|
||||
$ docker run -it --rm \
|
||||
{{ page.docker_image }} install \
|
||||
--ucp-node <ucp-node-name> \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
Where the `--ucp-node` is the hostname of the UCP node where you want to deploy
|
||||
DTR. `--ucp-insecure-tls` tells the installer to trust the TLS certificates used
|
||||
by UCP.
|
||||
|
||||
By default the install command runs in interactive mode and prompts for
|
||||
additional information like:
|
||||
|
||||
* DTR external url: the url clients use to read DTR. If you're using a load
|
||||
balancer for DTR, this is the IP address or DNS name of the load balancer
|
||||
* UCP url: the url clients use to reach UCP
|
||||
* UCP username and password: administrator credentials for UCP
|
||||
|
||||
You can also provide this information to the installer command so that it
|
||||
runs without prompting.
|
||||
Check the [reference documentation to learn more](../../../reference/cli/install.md).
|
||||
|
||||
## Step 4. Check that DTR is running
|
||||
|
||||
In your browser, navigate to the Docker **Universal Control Plane**
|
||||
web UI, and navigate to the **Applications** screen. DTR should be listed
|
||||
as an application.
|
||||
|
||||

|
||||
|
||||
You can also access the **DTR web UI**, to make sure it is working. In your
|
||||
browser, navigate to the address where you installed DTR.
|
||||
|
||||

|
||||
|
||||
|
||||
## Step 5. Configure DTR
|
||||
|
||||
After installing DTR, you should configure:
|
||||
|
||||
* The certificates used for TLS communication. [Learn more](../configure/use-your-own-tls-certificates.md).
|
||||
* The storage backend to store the Docker images. [Lean more](../configure/external-storage/index.md).
|
||||
|
||||
To perform these configurations, navigate to the **Settings** page of DTR.
|
||||
|
||||

|
||||
|
||||
|
||||
## Step 6. Test pushing and pulling
|
||||
|
||||
Now that you have a working installation of DTR, you should test that you can
|
||||
push and pull images to it.
|
||||
[Learn how to push and pull images](../../user/manage-images/pull-and-push-images.md).
|
||||
|
||||
## Step 7. Join replicas to the cluster
|
||||
|
||||
This step is optional.
|
||||
|
||||
To set up DTR for high availability,
|
||||
you can add more replicas to your DTR cluster. Adding more replicas allows you
|
||||
to load-balance requests across all replicas, and keep DTR working if a
|
||||
replica fails.
|
||||
|
||||
For high-availability you should set 3, 5, or 7 DTR replicas. The nodes where
|
||||
you're going to install these replicas also need to be managed by UCP.
|
||||
|
||||
To add replicas to a DTR cluster, use the `docker/dtr join` command:
|
||||
|
||||
1. Load your UCP user bundle.
|
||||
|
||||
2. Run the join command.
|
||||
|
||||
When you join a replica to a DTR cluster, you need to specify the
|
||||
ID of a replica that is already part of the cluster. You can find an
|
||||
existing replica ID by going to the **Applications** page on UCP.
|
||||
|
||||
Then run:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} join \
|
||||
--ucp-node <ucp-node-name> \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
3. Check that all replicas are running.
|
||||
|
||||
In your browser, navigate to the Docker **Universal Control Plane**
|
||||
web UI, and navigate to the **Applications** screen. All replicas should
|
||||
be displayed.
|
||||
|
||||

|
||||
|
||||
## See also
|
||||
|
||||
* [Install DTR offline](install-offline.md)
|
||||
* [Upgrade DTR](../upgrade/index.md)
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
description: Learn how to install Docker Trusted Registry on a machine with no internet
|
||||
access.
|
||||
keywords: docker, registry, install, offline
|
||||
title: Install Docker Trusted Registry offline
|
||||
---
|
||||
|
||||
The procedure to install Docker Trusted Registry on a host is the same,
|
||||
whether that host has access to the internet or not.
|
||||
|
||||
The only difference when installing on an offline host,
|
||||
is that instead of pulling the UCP images from Docker Hub, you use a
|
||||
computer that is connected to the internet to download a single package with
|
||||
all the images. Then you copy that package to the host where you’ll install DTR.
|
||||
|
||||
## Versions available
|
||||
|
||||
{% include components/ddc_url_list.html %}
|
||||
|
||||
## Download the offline package
|
||||
|
||||
Use a computer with internet access to download a single package with all
|
||||
Docker Datacenter components:
|
||||
|
||||
```bash
|
||||
$ wget <package-url> -O docker-datacenter.tar.gz
|
||||
```
|
||||
|
||||
Now that you have the package in your local machine, you can transfer it to
|
||||
the machines where you want to install DTR.
|
||||
|
||||
For each machine where you want to install DTR:
|
||||
|
||||
1. Copy the Docker Datacenter package to that machine.
|
||||
|
||||
```bash
|
||||
$ scp docker-datacenter.tar.gz <user>@<host>:/tmp
|
||||
```
|
||||
|
||||
2. Use ssh to login into the hosts where you transferred the package.
|
||||
|
||||
3. Load the Docker Datacenter images.
|
||||
|
||||
Once the package is transferred to the hosts, you can use the
|
||||
`docker load` command, to load the Docker images from the tar archive:
|
||||
|
||||
```bash
|
||||
$ docker load < docker-datacenter.tar.gz
|
||||
```
|
||||
|
||||
## Install DTR
|
||||
|
||||
Now that the offline hosts have all the images needed to install DTR,
|
||||
you can [install DTR on that host](index.md).
|
||||
|
||||
### Preventing outgoing connections
|
||||
|
||||
DTR makes outgoing connections to:
|
||||
|
||||
* report analytics,
|
||||
* check for new versions,
|
||||
* check online licenses,
|
||||
* update the vulnerability scanning database
|
||||
|
||||
All of these uses of online connections are optional. You can choose to
|
||||
disable or not use any or all of these features on the admin settings page.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [DTR architecture](../../architecture.md)
|
||||
* [Install DTR](index.md)
|
|
@ -0,0 +1,40 @@
|
|||
---
|
||||
description: Learn about the system requirements for installing Docker Trusted Registry.
|
||||
keywords: docker, DTR, architecture, requirements
|
||||
title: Docker Trusted Registry system requirements
|
||||
---
|
||||
|
||||
Docker Trusted Registry can be installed on-premises or on the cloud.
|
||||
Before installing, be sure your infrastructure has these requirements.
|
||||
|
||||
## Software requirements
|
||||
|
||||
You can only install DTR on a node that is being managed by Docker Universal
|
||||
Control Plane.
|
||||
|
||||
## Ports used
|
||||
|
||||
When installing DTR on a node, make sure the following ports are open on that
|
||||
node:
|
||||
|
||||
| Direction | Port | Purpose |
|
||||
|:---------:|:--------|:--------------------------------------|
|
||||
| in | 80/tcp | Web app and API client access to DTR. |
|
||||
| in | 443/tcp | Web app and API client access to DTR. |
|
||||
|
||||
These ports are configurable when installing DTR.
|
||||
|
||||
## Compatibility and maintenance lifecycle
|
||||
|
||||
Docker Datacenter is a software subscription that includes 3 products:
|
||||
|
||||
* CS Docker Engine,
|
||||
* Docker Trusted Registry,
|
||||
* Docker Universal Control Plane.
|
||||
|
||||
[Learn more about the maintenance lifecycle for these products](http://success.docker.com/Get_Help/Compatibility_Matrix_and_Maintenance_Lifecycle).
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [DTR architecture](../../architecture.md)
|
||||
* [Install DTR](index.md)
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
description: Learn how to uninstall your Docker Trusted Registry installation.
|
||||
keywords: docker, dtr, install, uninstall
|
||||
title: Uninstall Docker Trusted Registry
|
||||
---
|
||||
|
||||
Uninstalling DTR can be done by simply removing all data associated with each
|
||||
replica. To do that, you just run the destroy command once per replica:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} destroy \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
You will be prompted for the UCP URL, UCP credentials and which replica to
|
||||
destroy.
|
||||
|
||||
To see what options are available in the destroy command, check the
|
||||
[destroy command reference documentation](../../../reference/cli/destroy.md).
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Scale your deployment](../configure/set-up-high-availability.md)
|
||||
* [Install DTR](index.md)
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
description: Learn how to manage teams to enforce fine-grain access control in Docker
|
||||
Trusted Registry.
|
||||
keywords: docker, registry, security, permissions, teams
|
||||
title: Create and manage teams in DTR
|
||||
---
|
||||
|
||||
You can extend a user's default permissions by granting them individual
|
||||
permissions in other image repositories, by adding the user to a team. A team
|
||||
defines the permissions a set of users have for a set of repositories.
|
||||
|
||||
To create a new team, go to the **DTR web UI**, and navigate to the
|
||||
**Organizations** page.
|
||||
Then **click the organization** where you want to create the team. In this
|
||||
example, we'll create the 'billing' team under the 'whale' organization.
|
||||
|
||||

|
||||
|
||||
Click '**+**' to create a new team, and give it a name.
|
||||
|
||||

|
||||
|
||||
## Add users to a team
|
||||
|
||||
Once you have created a team, **click the team** name, to manage its settings.
|
||||
The first thing we need to do is add users to the team. Click the **Add user**
|
||||
button and add users to the team.
|
||||
|
||||

|
||||
|
||||
## Manage team permissions
|
||||
|
||||
The next step is to define the permissions this team has for a set of
|
||||
repositories. Navigate to the **Repositories** tab, and click the
|
||||
**Add repository** button.
|
||||
|
||||

|
||||
|
||||
Choose the repositories this team has access to, and what permission levels the
|
||||
team members have.
|
||||
|
||||

|
||||
|
||||
There are three permission levels available:
|
||||
|
||||
| Permission level | Description |
|
||||
|:-----------------|:-----------------------------------------------------------------|
|
||||
| Read only | View repository and pull images. |
|
||||
| Read & Write | View repository, pull and push images. |
|
||||
| Admin | Manage repository and change its settings, pull and push images. |
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Create and manage users](create-and-manage-users.md)
|
||||
* [Permission levels](permission-levels.md)
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
description: Learn how to manage user permissions in Docker Trusted Registry.
|
||||
keywords: docker, registry, security, permissions, users
|
||||
title: Create and manage users in DTR
|
||||
---
|
||||
|
||||
When using the Docker Datacenter built-in authentication, you can create users
|
||||
to grant them fine-grained permissions.
|
||||
Users are shared across Docker Datacenter. When you create a new user in
|
||||
Docker Universal Control Plane, that user becomes available in DTR and vice
|
||||
versa.
|
||||
|
||||
To create a new user, go to the **DTR web UI**, and navigate to the **Users**
|
||||
page.
|
||||
|
||||

|
||||
|
||||
Click the **New user** button, and fill-in the user information.
|
||||
|
||||

|
||||
|
||||
Check the **Trusted Registry admin** option, if you want to grant permissions
|
||||
for the user to change Docker Datacenter configurations.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Authentication and authorization](index.md)
|
||||
* [Create and manage teams](create-and-manage-teams.md)
|
|
@ -0,0 +1,56 @@
|
|||
---
|
||||
description: Learn about the permission levels available on Docker Trusted Registry.
|
||||
keywords: docker, registry, security, permissions, users
|
||||
title: Authentication and authorization in DTR
|
||||
---
|
||||
|
||||
With DTR you get to control which users have access to your image repositories.
|
||||
|
||||
By default, anonymous users can only pull images from public repositories.
|
||||
They can't create new repositories or push to existing ones.
|
||||
You can then grant permissions to enforce fine-grained access control to image
|
||||
repositories. For that:
|
||||
|
||||
* Start by creating a user.
|
||||
|
||||
Users are shared across Docker Datacenter. When you create a new user in
|
||||
Docker Universal Control Plane, that user becomes available in DTR and vice
|
||||
versa. Registered users can create and manage their own repositories.
|
||||
|
||||
You can also integrate with an LDAP service to manage users from a single
|
||||
place.
|
||||
|
||||
* Extend the permissions by adding the user to a team.
|
||||
|
||||
To extend a user's permission and manage their permissions over repositories,
|
||||
you add the user to a team.
|
||||
A team defines the permissions users have for a set of repositories.
|
||||
|
||||
|
||||
## Organizations and teams
|
||||
|
||||
When a user creates a repository, only that user can make changes to the
|
||||
repository settings, and push new images to it.
|
||||
|
||||
Organizations take permission management one step further, since they allow
|
||||
multiple users to own and manage a common set of repositories. This
|
||||
is useful when implementing team workflows. With organizations you can
|
||||
delegate the management of a set of repositories and user permissions to the
|
||||
organization administrators.
|
||||
|
||||
An organization owns a set of repositories, and defines a set of teams. With
|
||||
teams you can define fine-grain permissions that a team of
|
||||
user has for a set of repositories.
|
||||
|
||||

|
||||
|
||||
In this example, the 'Whale' organization has three repositories and two teams:
|
||||
|
||||
* Members of the blog team can only see and pull images from the whale/java
|
||||
repository,
|
||||
* Members of the billing team can manage the whale/golang repository, and push
|
||||
and pull images from the whale/java repository.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Create and manage users](create-and-manage-users.md)
|
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
description: Learn about the permission levels available in Docker Trusted Registry.
|
||||
keywords: docker, registry, security, permissions
|
||||
title: Permission levels in DTR
|
||||
---
|
||||
|
||||
Docker Trusted Registry allows you to define fine-grain permissions over image
|
||||
repositories.
|
||||
|
||||
## Administrator users
|
||||
|
||||
Users are shared across Docker Datacenter. When you create a new user in Docker
|
||||
Universal Control Plane, that user becomes available in DTR and vice versa.
|
||||
When you create an administrator user in DTR, that user is a Docker Datacenter
|
||||
administrator, with permissions to:
|
||||
|
||||
* Manage users across Docker Datacenter,
|
||||
* Manage DTR repositories and settings,
|
||||
* Manage the whole UCP cluster.
|
||||
|
||||
## Team permission levels
|
||||
|
||||
Teams allow you to define the permissions a set of user has for a set of
|
||||
repositories. Three permission levels are available:
|
||||
|
||||
| Repository operation | read | read-write | admin |
|
||||
|:----------------------|:----:|:----------:|:-----:|
|
||||
| View/ browse | x | x | x |
|
||||
| Pull | x | x | x |
|
||||
| Push | | x | x |
|
||||
| Delete tags | | x | x |
|
||||
| Edit description | | | x |
|
||||
| Set public or private | | | x |
|
||||
| Manage user access | | | x |
|
||||
| Delete repository | | | |
|
||||
|
||||
Team permissions are additive. When a user is a member of multiple teams, they
|
||||
have the highest permission level defined by those teams.
|
||||
|
||||
## Overall permissions
|
||||
|
||||
Here's an overview of the permission levels available in DTR:
|
||||
|
||||
* Anonymous users: Can search and pull public repositories.
|
||||
* Users: Can search and pull public repos, and create and manage their own
|
||||
repositories.
|
||||
* Team member: Everything a user can do, plus the permissions granted by the teams the user is member of.
|
||||
* Team admin: Everything a team member can do, and can also add members to the team.
|
||||
* Organization admin: Everything a team admin can do, can create new teams, and add members to the organization.
|
||||
* DDC admin: Can manage anything across UCP and DTR.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Authentication and authorization](index.md)
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
description: Learn how to monitor your DTR installation.
|
||||
keywords: docker, registry, monitor, troubleshoot
|
||||
title: Monitor Docker Trusted Registry
|
||||
---
|
||||
|
||||
Docker Trusted Registry is a Dockerized application. To monitor it, you can
|
||||
use the same tools and techniques you're already using to monitor other
|
||||
containerized applications running on your cluster. One way to monitor
|
||||
DTR is using the monitoring capabilities of Docker Universal Control Plane.
|
||||
|
||||
In your browser, log in to **Docker Universal Control Plane** (UCP), and
|
||||
navigate to the **Applications** page.
|
||||
|
||||
To make it easier to find DTR, use the search box to **search for the
|
||||
DTR application**. If you have DTR set up for high-availability, then all the
|
||||
DTR nodes are displayed.
|
||||
|
||||

|
||||
|
||||
**Click on the DTR application** to see all of its containers, and if they're
|
||||
running. **Click on a container** to see its details, like configurations,
|
||||
resources, and logs.
|
||||
|
||||

|
||||
|
||||
## Health checks
|
||||
|
||||
DTR also exposes several endpoints you can use to assess if a DTR replica
|
||||
is healthy or not:
|
||||
|
||||
* `/health`: Checks if the several components of a DTR replica are healthy, and
|
||||
returns a simple json response. This is useful for load balancing or other
|
||||
automated health check tasks.
|
||||
* `/nginx_status`: Returns the number of connections being handled by the
|
||||
NGINX front-end used by DTR.
|
||||
* `/api/v0/meta/cluster_status`: Returns extensive information about all DTR
|
||||
replicas.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Troubleshoot with logs](troubleshoot-with-logs.md)
|
|
@ -0,0 +1,231 @@
|
|||
---
|
||||
title: Troubleshoot batch jobs
|
||||
description: Learn how Docker Trusted Registry run batch jobs, so that you can troubleshoot when something goes wrong
|
||||
keywords: docker, dtr, troubleshoot
|
||||
---
|
||||
|
||||
DTR uses a job queue to schedule batch jobs. A job is placed on this work queue,
|
||||
and a job runner component of DTR consumes work from this cluster-wide job
|
||||
queue and executes it.
|
||||
|
||||

|
||||
|
||||
All DTR replicas have access to the job queue, and have a job runner component
|
||||
that can get and execute work.
|
||||
|
||||
## How it works
|
||||
|
||||
When a job is created, it is added to a cluster-wide job queue with the
|
||||
`waiting` status.
|
||||
When one of the DTR replicas is ready to claim, it waits a random time of up
|
||||
to 3 seconds, giving the opportunity to every replica to claim the task.
|
||||
|
||||
A replica gets a job by adding it's replica ID to the job. That way, other
|
||||
replicas know the job has been claimed. Once a replica claims a job it adds
|
||||
it to an internal queue of jobs, that is sorted by their `scheduledAt` time.
|
||||
When that time happens, the replica updates the job status to `running`, and
|
||||
starts executing it.
|
||||
|
||||
The job runner component of each DTR replica keeps an `heartbeatExpiration`
|
||||
entry on the database shared by all replicas. If a replica becomes
|
||||
unhealthy, other replicas notice this and update that worker status to `dead`.
|
||||
Also, all the jobs that replica had claimed are updated to the status `worker_dead`,
|
||||
so that other replicas can claim the job.
|
||||
|
||||
## Job types
|
||||
|
||||
DTR has several types of jobs.
|
||||
|
||||
| Job | Description |
|
||||
|:---------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| gc | Garbage collection job that deletes layers associated with deleted images |
|
||||
| sleep | Sleep is used to test the correctness of the jobrunner. It sleeps for 60 seconds |
|
||||
| false | False is used to test the correctness of the jobrunner. It runs the `false` command and immediately fails |
|
||||
| tagmigration | Tag migration is used to sync tag and manifest information from the blobstore into the database. This information is used to for information in the API, UI, and also for GC |
|
||||
| bloblinkmigration | bloblinkmigration is a 2.1 to 2.1 upgrade process that adds references for blobs to repositories in the database |
|
||||
| license_update | License update checks for license expiration extensions if online license updates are enabled |
|
||||
| nautilus_scan_check | An image security scanning job. This job does not perform the actual scanning, rather it spawns `nautilus_scan_check_single` jobs (one for each layer in the image). Once all of the `nautilus_scan_check_single` jobs are complete, this job will terminate |
|
||||
| nautilus_scan_check_single | A security scanning job for a particular layer given by the `parameter: SHA256SUM`. This job breaks up the layer into components and checks each component for vulnerabilities |
|
||||
| nautilus_update_db | A job that is created to update DTR's vulnerability database. It uses an Internet connection to check for database updates through `https://dss-cve-updates.docker.com/` and updates the `dtr-scanningstore` container if there is a new update available |
|
||||
| webhook | A job that is used to dispatch a webhook payload to a single endpoint |
|
||||
|
||||
## Job status
|
||||
|
||||
Jobs can be in one of the following status:
|
||||
|
||||
| Status | Description |
|
||||
|:----------------|:------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| waiting | The job is unclaimed and waiting to be picked up by a worker |
|
||||
| running | The worker defined by `workerID` is currently running the job |
|
||||
| done | The job has successfully completed |
|
||||
| error | The job has completed with errors |
|
||||
| cancel_request | The worker monitors the job statuses in the database. If the status for a job changes to `cancel_request`, the worker will cancel the job |
|
||||
| cancel | The job has been cancelled and not fully executed |
|
||||
| deleted | The job and logs have been removed |
|
||||
| worker_dead | The worker for this job has been declared `dead` and the job will not continue |
|
||||
| worker_shutdown | The worker that was running this job has been gracefully stopped |
|
||||
| worker | resurrection| The worker for this job has reconnected to the database and will cancel these jobs |
|
||||
|
||||
## Job capacity
|
||||
|
||||
Each job runner has a limited capacity and won't claim jobs that require an
|
||||
higher capacity. You can see the capacity of a job runner using the
|
||||
`GET /api/v0/workers` endpoint:
|
||||
|
||||
```json
|
||||
{
|
||||
"workers": [
|
||||
{
|
||||
"id": "000000000000",
|
||||
"status": "running",
|
||||
"capacityMap": {
|
||||
"scan": 1,
|
||||
"scanCheck": 1
|
||||
},
|
||||
"heartbeatExpiration": "2017-02-18T00:51:02Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
This means that the worker with replica ID `000000000000` has a capacity of 1
|
||||
`scan` and 1 `scanCheck`. If this worker notices that the following jobs
|
||||
are available:
|
||||
|
||||
```json
|
||||
{
|
||||
"jobs": [
|
||||
{
|
||||
"id": "0",
|
||||
"workerID": "",
|
||||
"status": "waiting",
|
||||
"capacityMap": {
|
||||
"scan": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"workerID": "",
|
||||
"status": "waiting",
|
||||
"capacityMap": {
|
||||
"scan": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"workerID": "",
|
||||
"status": "waiting",
|
||||
"capacityMap": {
|
||||
"scanCheck": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Our worker will be able to pick up job id `0` and `2` since it has the capacity
|
||||
for both, while id `1` will have to wait until the previous scan job is complete:
|
||||
|
||||
```json
|
||||
{
|
||||
"jobs": [
|
||||
{
|
||||
"id": "0",
|
||||
"workerID": "000000000000",
|
||||
"status": "running",
|
||||
"capacityMap": {
|
||||
"scan": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"workerID": "",
|
||||
"status": "waiting",
|
||||
"capacityMap": {
|
||||
"scan": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"workerID": "000000000000",
|
||||
"status": "running",
|
||||
"capacityMap": {
|
||||
"scanCheck": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshoot jobs
|
||||
|
||||
You can get the list of jobs, using the `GET /api/v0/jobs/` endpoint. Each job
|
||||
looks like this:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "1fcf4c0f-ff3b-471a-8839-5dcb631b2f7b",
|
||||
"retryFromID": "1fcf4c0f-ff3b-471a-8839-5dcb631b2f7b",
|
||||
"workerID": "000000000000",
|
||||
"status": "done",
|
||||
"scheduledAt": "2017-02-17T01:09:47.771Z",
|
||||
"lastUpdated": "2017-02-17T01:10:14.117Z",
|
||||
"action": "nautilus_scan_check_single",
|
||||
"retriesLeft": 0,
|
||||
"retriesTotal": 0,
|
||||
"capacityMap": {
|
||||
"scan": 1
|
||||
},
|
||||
"parameters": {
|
||||
"SHA256SUM": "1bacd3c8ccb1f15609a10bd4a403831d0ec0b354438ddbf644c95c5d54f8eb13"
|
||||
},
|
||||
"deadline": "",
|
||||
"stopTimeout": ""
|
||||
}
|
||||
```
|
||||
|
||||
The fields of interest here are:
|
||||
|
||||
* `id`: the ID of the job
|
||||
* `workerID`: the ID of the worker in a DTR replica that is running this job
|
||||
* `status`: the current state of the job
|
||||
* `action`: what job the worker will actually perform
|
||||
* `capacityMap`: the available capacity a worker needs for this job to run
|
||||
|
||||
|
||||
## Cron jobs
|
||||
|
||||
Several of the jobs performed by DTR are run in a recurrent schedule. You can
|
||||
see those jobs using the `GET /api/v0/crons` endpoint:
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"crons": [
|
||||
{
|
||||
"id": "48875b1b-5006-48f5-9f3c-af9fbdd82255",
|
||||
"action": "license_update",
|
||||
"schedule": "57 54 3 * * *",
|
||||
"retries": 2,
|
||||
"capacityMap": null,
|
||||
"parameters": null,
|
||||
"deadline": "",
|
||||
"stopTimeout": "",
|
||||
"nextRun": "2017-02-22T03:54:57Z"
|
||||
},
|
||||
{
|
||||
"id": "b1c1e61e-1e74-4677-8e4a-2a7dacefffdc",
|
||||
"action": "nautilus_update_db",
|
||||
"schedule": "0 0 3 * * *",
|
||||
"retries": 0,
|
||||
"capacityMap": null,
|
||||
"parameters": null,
|
||||
"deadline": "",
|
||||
"stopTimeout": "",
|
||||
"nextRun": "2017-02-22T03:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
The `schedule` uses a Unix crontab syntax.
|
|
@ -0,0 +1,88 @@
|
|||
---
|
||||
description: Learn how to troubleshoot your DTR installation.
|
||||
keywords: docker, registry, monitor, troubleshoot
|
||||
title: Troubleshoot Docker Trusted Registry
|
||||
---
|
||||
|
||||
This guide contains tips and tricks for troubleshooting DTR problems.
|
||||
|
||||
## Troubleshoot overlay networks
|
||||
|
||||
High availability in DTR depends on having overlay networking working in UCP.
|
||||
One way to test if overlay networks are working correctly you can deploy
|
||||
containers in different nodes, that are attached to the same overlay network
|
||||
and see if they can ping one another.
|
||||
|
||||
Use SSH to log into a UCP node, and run:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
--net dtr-ol --name overlay-test1 \
|
||||
--entrypoint sh docker/dtr
|
||||
```
|
||||
|
||||
Then use SSH to log into another UCP node and run:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
--net dtr-ol --name overlay-test2 \
|
||||
--entrypoint ping docker/dtr -c 3 overlay-test1
|
||||
```
|
||||
|
||||
If the second command succeeds, it means that overlay networking is working
|
||||
correctly.
|
||||
|
||||
You can run this test with any overlay network, and any Docker image that has
|
||||
`sh` and `ping`.
|
||||
|
||||
|
||||
## Access RethinkDB directly
|
||||
|
||||
DTR uses RethinkDB for persisting data and replicating it across replicas.
|
||||
It might be helpful to connect directly to the RethinkDB instance running on a
|
||||
DTR replica to check the DTR internal state.
|
||||
|
||||
Use SSH to log into a node that is running a DTR replica, and run the following
|
||||
command, replacing `$REPLICA_ID` by the id of the DTR replica running on that
|
||||
node:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
--net dtr-ol \
|
||||
-v dtr-ca-$REPLICA_ID:/ca dockerhubenterprise/rethinkcli:v2.2.0 \
|
||||
$REPLICA_ID
|
||||
```
|
||||
|
||||
This starts an interactive prompt where you can run RethinkDB queries like:
|
||||
|
||||
```none
|
||||
> r.db('dtr2').table('repositories')
|
||||
```
|
||||
|
||||
[Learn more about RethinkDB queries](https://www.rethinkdb.com/docs/guide/javascript/).
|
||||
|
||||
## Recover from an unhealthy replica
|
||||
|
||||
When a DTR replica is unhealthy or down, the DTR web UI displays a warning:
|
||||
|
||||
```none
|
||||
Warning: The following replicas are unhealthy: 59e4e9b0a254; Reasons: Replica reported health too long ago: 2017-02-18T01:11:20Z; Replicas 000000000000, 563f02aba617 are still healthy.
|
||||
```
|
||||
|
||||
To fix this, you should remove the unhealthy replica from the DTR cluster,
|
||||
and join a new one. Start by running:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} remove \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
And then:
|
||||
|
||||
```none
|
||||
docker run -it --rm \
|
||||
{{ page.docker_image }} join \
|
||||
--ucp-node <ucp-node-name> \
|
||||
--ucp-insecure-tls
|
||||
```
|
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
description: Learn how to upgrade your Docker Trusted Registry
|
||||
keywords: docker, dtr, upgrade, install
|
||||
title: Upgrade DTR
|
||||
---
|
||||
|
||||
DTR uses [semantic versioning](http://semver.org/) and we aim to achieve specific
|
||||
guarantees while upgrading between versions. We never support downgrading. We
|
||||
support upgrades according to the following rules:
|
||||
|
||||
* When upgrading from one patch version to another you can skip patch versions
|
||||
because no data migration is done for patch versions.
|
||||
* When upgrading between minor versions, you can't skip versions, but you can
|
||||
upgrade from any patch versions of the previous minor version to any patch
|
||||
version of the current minor version.
|
||||
* When upgrading between major versions you also have to upgrade one major
|
||||
version at a time, but you have to upgrade to the earliest available minor
|
||||
version. We also strongly recommend upgrading to the latest minor/patch
|
||||
version for your major version first.
|
||||
|
||||
| Description | From | To | Supported |
|
||||
|:-------------------------------------|:------|:----------|:----------|
|
||||
| patch upgrade | x.y.0 | x.y.1 | yes |
|
||||
| skip patch version | x.y.0 | x.y.2 | yes |
|
||||
| patch downgrade | x.y.2 | x.y.1 | no |
|
||||
| minor upgrade | x.y.* | x.y+1.* | yes |
|
||||
| skip minor version | x.y.* | x.y+2.* | no |
|
||||
| minor downgrade | x.y.* | x.y-1.* | no |
|
||||
| skip major version | x.*.* | x+2.*.* | no |
|
||||
| major downgrade | x.*.* | x-1.*.* | no |
|
||||
| major upgrade | x.y.z | x+1.0.0 | yes |
|
||||
| major upgrade skipping minor version | x.y.z | x+1.y+1.z | no |
|
||||
|
||||
There may be at most a few seconds of interruption during the upgrade of a
|
||||
DTR cluster. Schedule the upgrade to take place outside business peak hours
|
||||
to ensure the impact on your business is close to none.
|
||||
|
||||
## Minor upgrade
|
||||
|
||||
Before starting your upgrade planning, make sure that the version of UCP you are
|
||||
using is supported by the version of DTR you are trying to upgrade to. <!--(TODO:
|
||||
link to the compatibility matrix)-->
|
||||
|
||||
> **Warning**
|
||||
>
|
||||
> Before performing any upgrade it’s important to backup. See
|
||||
> [DTR backups and recovery](/datacenter/dtr/2.2/guides/admin/backups-and-disaster-recovery.md).
|
||||
{: .warning}
|
||||
|
||||
### Step 1. Upgrade DTR to 2.1 if necessary
|
||||
|
||||
Make sure you're running DTR 2.1. If that's not the case, [upgrade your installation to the 2.1 version](/datacenter/dtr/2.1/guides/install/upgrade/.md).
|
||||
|
||||
### Step 2. Upgrade DTR
|
||||
|
||||
Then pull the latest version of DTR:
|
||||
|
||||
```none
|
||||
$ docker pull {{ page.docker_image }}
|
||||
```
|
||||
|
||||
If the node you're upgrading doesn't have access to the internet, you can
|
||||
follow the [offline installation documentation](../install/install-offline.md)
|
||||
to get the images.
|
||||
|
||||
Once you have the latest image on your machine (and the images on the target
|
||||
nodes if upgrading offline), run the upgrade command:
|
||||
|
||||
```none
|
||||
$ docker run -it --rm \
|
||||
{{ page.docker_image }} upgrade \
|
||||
--ucp-insecure-tls
|
||||
```
|
||||
|
||||
By default the upgrade command runs in interactive mode and prompts you for
|
||||
any necessary information. You can also check the
|
||||
[reference documentation](../../../reference/cli/index.md) for other existing flags.
|
||||
|
||||
The upgrade command will start replacing every container in your DTR cluster,
|
||||
one replica at a time. It will also perform certain data migrations. If anything
|
||||
fails or the upgrade is interrupted for any reason, you can re-run the upgrade
|
||||
command and it will resume from where it left off.
|
||||
|
||||
## Patch upgrade
|
||||
|
||||
A patch upgrade changes only the DTR containers and it's always safer than a minor
|
||||
upgrade. The command is the same as for a minor upgrade.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [Release notes](release-notes.md)
|
|
@ -0,0 +1,102 @@
|
|||
---
|
||||
description: Learn about the architecture of Docker Trusted Registry.
|
||||
keywords: docker, registry, dtr, architecture
|
||||
title: DTR architecture
|
||||
---
|
||||
|
||||
Docker Trusted Registry (DTR) is a containerized application that runs on a
|
||||
Docker Universal Control Plane cluster.
|
||||
|
||||

|
||||
|
||||
Once you have DTR deployed, you use your Docker CLI client to login, push, and
|
||||
pull images.
|
||||
|
||||
## Under the hood
|
||||
|
||||
For high-availability you can deploy multiple DTR replicas, one on each UCP
|
||||
worker node.
|
||||
|
||||

|
||||
|
||||
All DTR replicas run the same set of services and changes to their configuration
|
||||
are automatically propagated to other replicas.
|
||||
|
||||
## DTR internal components
|
||||
|
||||
When you install DTR on a node, the following containers are started:
|
||||
|
||||
| Name | Description |
|
||||
|:-------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------|
|
||||
| dtr-api-<replica_id> | Executes the DTR business logic. It serves the DTR web application, and API |
|
||||
| dtr-garant-<replica_id> | Manages DTR authentication |
|
||||
| dtr-jobrunner-<replica_id> | Runs cleanup jobs in the background |
|
||||
| dtr-nautilusstore-<replica_id> | Stores security scanning data |
|
||||
| dtr-nginx-<replica_id> | Receives http and https requests and proxies them to other DTR components. By default it listens to ports 80 and 443 of the host |
|
||||
| dtr-notary-server-<replica_id> | Receives, validates, and serves content trust metadata, and is consulted when pushing or pulling to DTR with content trust enabled |
|
||||
| dtr-notary-signer-<replica_id> | Performs server-side timestamp and snapshot signing for content trust metadata |
|
||||
| dtr-registry-<replica_id> | Implements the functionality for pulling and pushing Docker images. It also handles how images are stored |
|
||||
| dtr-rethinkdb-<replica_id> | A database for persisting repository metadata |
|
||||
|
||||
All these components are for internal use of DTR. Don't use them in your applications.
|
||||
|
||||
## Networks used by DTR
|
||||
|
||||
To allow containers to communicate, when installing DTR the following networks
|
||||
are created:
|
||||
|
||||
| Name | Type | Description |
|
||||
|:-------|:--------|:---------------------------------------------------------------------------------------|
|
||||
| dtr-ol | overlay | Allows DTR components running on different nodes to communicate, to replicate DTR data |
|
||||
|
||||
|
||||
## Volumes used by DTR
|
||||
|
||||
DTR uses these named volumes for persisting data:
|
||||
|
||||
| Volume name | Description |
|
||||
|:--------------------------------------|:---------------------------------------------------------------------------------|
|
||||
| dtr-ca-<replica_id> | Root key material for the DTR root CA that issues certificates |
|
||||
| dtr-notary-<replica_id> | Certificate and keys for the Notary components |
|
||||
| dtr-nautilus-store-<replica_id> | Vulnerability scans data |
|
||||
| dtr-registry-<replica_id> | Docker images data, if DTR is configured to store images on the local filesystem |
|
||||
| dtr-rethink-<replica_id> | Repository metadata |
|
||||
| dtr-nfs-registry-<replica_id> | Docker images data, if DTR is configured to store images on NFS |
|
||||
|
||||
You can customize the volume driver used for these volumes, by creating the
|
||||
volumes before installing DTR. During the installation, DTR checks which volumes
|
||||
don't exist in the node, and creates them using the default volume driver.
|
||||
|
||||
By default, the data for these volumes can be found at
|
||||
`/var/lib/docker/volumes/<volume-name>/_data`.
|
||||
|
||||
## Image storage
|
||||
|
||||
By default, Docker Trusted Registry stores images on the filesystem of the node
|
||||
where it is running, but you should configure it to use a centralized storage
|
||||
backend.
|
||||
|
||||

|
||||
|
||||
DTR supports these storage backends:
|
||||
|
||||
* NFS
|
||||
* Amazon S3
|
||||
* Cleversafe
|
||||
* Google Cloud Storage
|
||||
* OpenStack Swift
|
||||
* Microsoft Azure
|
||||
|
||||
## How to interact with DTR
|
||||
|
||||
DTR has a web UI where you can manage settings and user permissions.
|
||||
|
||||

|
||||
|
||||
You can push and pull images using the standard Docker CLI client or other tools
|
||||
that can interact with a Docker registry.
|
||||
|
||||
## Where to go next
|
||||
|
||||
* [System requirements](admin/install/system-requirements.md)
|
||||
* [Install DTR](admin/install/index.md)
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
SIZE="1280px"
|
||||
HOST=dtr.domain.com
|
||||
HOSTIP:=192.168.18.131
|
||||
HOSTURL=https://$(HOST)
|
||||
IMAGE=svendowideit/screenshot
|
||||
#IMAGE=screenshot
|
||||
RUNOPTS=docker run --rm -v $(CURDIR):/srv --add-host $(HOST):$(HOSTIP)
|
||||
RUN=$(RUNOPTS) $(IMAGE)
|
||||
|
||||
all:
|
||||
# Needs to be run with no authentication
|
||||
$(RUN) $(HOSTURL)/admin/ admin-metrics.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/logs/ admin-logs.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/settings/auth/ admin-settings-authentication.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/settings/general admin-settings.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/settings/security admin-settings-security.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/settings/storage admin-settings-storage.png $(SIZE)
|
||||
$(RUN) $(HOSTURL)/admin/settings/license admin-settings-license.png $(SIZE)
|
||||
|
||||
manual:
|
||||
# --env-file=passwords.env
|
||||
$(RUNOPTS) --env-file=passwords.env \
|
||||
$(IMAGE) \
|
||||
$(HOSTURL)/admin/settings#auth admin-settings-authentication-basic.png $(SIZE)
|
||||
|
||||
#admin-settings-authentication-ldap.png
|
||||
|
||||
|
||||
# TODO: needs manual intervention atm
|
||||
qs1:
|
||||
# this requires the hostname to resolve.
|
||||
echo "$HOST $HOSTIP" >> /etc/hosts
|
||||
# and requires that host to be added to the docker daemon's insecure registry settings
|
||||
# maybe use a dind daemon?
|
||||
|
||||
docker pull jenkins
|
||||
docker tag -f jenkins t400s.home.org.au/ci-infrastructure/jnkns-img
|
||||
docker push t400s.home.org.au/ci-infrastructure/jnkns-img
|
||||
sleep 1
|
||||
$(RUN) $(HOSTURL)/admin/ console-push.png $(SIZE)
|
||||
sleep 10
|
||||
qs2:
|
||||
docker rmi jenkins t400s.home.org.au/ci-infrastructure/jnkns-img
|
||||
docker pull t400s.home.org.au/ci-infrastructure/jnkns-img
|
||||
sleep 1
|
||||
$(RUN) $(HOSTURL)/admin/ console-pull.png $(SIZE)
|
After Width: | Height: | Size: 161 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 161 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 57 KiB |
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-1">
|
||||
<g id="Group" transform="translate(33.000000, 51.000000)">
|
||||
<g id="stack" transform="translate(150.000000, 0.000000)">
|
||||
<g id="servers" transform="translate(0.000000, 114.000000)">
|
||||
<g id="cloud">
|
||||
<rect id="Rectangle-138" fill="#82949E" x="0" y="0" width="172" height="34" rx="2"></rect>
|
||||
<text id="cloud-servers" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="42.5097656" y="23">cloud servers</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="virtual" transform="translate(176.000000, 0.000000)">
|
||||
<rect id="Rectangle-138" fill="#82949E" x="0" y="0" width="172" height="34" rx="2"></rect>
|
||||
<text id="virtual-servers" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="39.8608398" y="23">virtual servers</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="physical" transform="translate(352.000000, 0.000000)">
|
||||
<rect id="Rectangle-138" fill="#82949E" x="0" y="0" width="172" height="34" rx="2"></rect>
|
||||
<text id="physical-servers" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="34.2075195" y="23">physical servers</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="docker" transform="translate(0.000000, 76.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="524" height="34" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="205.464355" y="23">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(0.000000, 38.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="524" height="34" rx="2"></rect>
|
||||
<text id="Universal-Control-Pl" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="185.536621" y="23">Universal Control Plane</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="172" height="34" rx="2"></rect>
|
||||
<text id="Docker-Trusted-Regis" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="8.13183594" y="23">Docker Trusted Registry</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="your-apps" transform="translate(176.000000, 0.000000)">
|
||||
<rect id="Rectangle-138" fill="#00B6B5" x="0" y="0" width="348" height="34" rx="2"></rect>
|
||||
<text id="your-applications" font-family="OpenSans, Open Sans" font-size="14" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="118.428223" y="23">your applications</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="commands" transform="translate(0.000000, 7.000000)">
|
||||
<g id="command-2" transform="translate(0.000000, 38.000000)">
|
||||
<path d="M101,10 L136,10" id="Line" stroke="#82949E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<circle id="Oval" fill="#8F9EA8" cx="138" cy="10" r="5"></circle>
|
||||
<text id="docker-run" font-family="CourierNewPS-BoldMT, Courier New" font-size="14" font-weight="bold" fill="#637986">
|
||||
<tspan x="0" y="12">docker run</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="command-1">
|
||||
<path d="M101,9 L136,9" id="Line" stroke="#82949E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<circle id="Oval" fill="#82949E" cx="138" cy="9" r="5"></circle>
|
||||
<text id="docker-push" font-family="CourierNewPS-BoldMT, Courier New" font-size="14" font-weight="bold" fill="#637986">
|
||||
<tspan x="0" y="12">docker push</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
|
@ -0,0 +1,225 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-2</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-2">
|
||||
<text id="UCP-cluster" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||
<tspan x="28.025" y="239.009524">UCP cluster</tspan>
|
||||
</text>
|
||||
<g id="nodes" transform="translate(36.000000, 15.000000)">
|
||||
<g id="workers" transform="translate(233.000000, 116.000000)">
|
||||
<g id="node-1-copy">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="worker-dtr" transform="translate(347.000000, 0.000000)">
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="manager-ucp">
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="group" stroke="#82949E" stroke-width="2" stroke-dasharray="5,5,5,5" x="21" y="3" width="687" height="245" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,160 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-3</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-1" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-3" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-3" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-5" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-5" fill="black"></use>
|
||||
</mask>
|
||||
</defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-3">
|
||||
<g id="group" transform="translate(93.000000, 3.000000)">
|
||||
<g id="dtr">
|
||||
<text id="DTR-cluster" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||
<tspan x="7.025" y="236.009524">DTR cluster</tspan>
|
||||
</text>
|
||||
<g id="network" transform="translate(33.000000, 178.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="366" height="22" rx="2"></rect>
|
||||
<text id="overlay-network" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="146.05127" y="15">overlay network</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="arrows" transform="translate(104.000000, 147.000000)">
|
||||
<g id="arrow-copy-2" transform="translate(218.500000, 17.000000) rotate(-90.000000) translate(-218.500000, -17.000000) translate(202.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-3" transform="translate(111.500000, 17.000000) rotate(-90.000000) translate(-111.500000, -17.000000) translate(95.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-4" transform="translate(4.500000, 17.000000) rotate(-90.000000) translate(-4.500000, -17.000000) translate(-12.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="nodes" transform="translate(60.000000, 45.000000)">
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="group" stroke="#82949E" stroke-width="2" stroke-dasharray="5,5,5,5" x="0" y="0" width="433" height="245" rx="2"></rect>
|
||||
</g>
|
||||
<g id="object-storage" transform="translate(457.000000, 45.000000)">
|
||||
<rect id="node-border" fill="#445D6E" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
<text font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#F7F8F9">
|
||||
<tspan x="34.7006836" y="48">object</tspan>
|
||||
<tspan x="31.4633789" y="62">storage</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,356 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="350px" viewBox="0 0 740 350" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-4</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-1" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-3" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-3" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-5" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-5" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-7" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-8" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-7" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-9" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-10" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-9" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-11" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-12" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-11" fill="black"></use>
|
||||
</mask>
|
||||
</defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-4">
|
||||
<g id="ddc" transform="translate(30.000000, 56.000000)">
|
||||
<g id="swarm-group" transform="translate(0.000000, 42.000000)">
|
||||
<text id="Docker-swarm" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#E0E4E7">
|
||||
<tspan x="15.8218828" y="236.009524">Docker swarm</tspan>
|
||||
</text>
|
||||
<rect id="group" stroke="#E0E4E7" stroke-width="2" stroke-dasharray="5,5,5,5" x="0" y="0" width="703" height="245" rx="2"></rect>
|
||||
</g>
|
||||
<g id="load-balancers" transform="translate(23.000000, 0.000000)">
|
||||
<g id="right" transform="translate(347.000000, 0.000000)">
|
||||
<g id="main">
|
||||
<rect id="Rectangle-138" fill="#445D6E" x="0" y="0" width="309" height="22" rx="2"></rect>
|
||||
<text id="your-load-balancer" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="111.437988" y="15">your load balancer</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="arrows" transform="translate(43.000000, 21.000000)">
|
||||
<g id="arrow-copy-3" transform="translate(218.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-218.500000, -17.000000) translate(202.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy" transform="translate(111.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-111.500000, -17.000000) translate(95.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-2" transform="translate(4.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-4.500000, -17.000000) translate(-12.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="left">
|
||||
<g id="main">
|
||||
<rect id="Rectangle-138" fill="#445D6E" x="0" y="0" width="309" height="22" rx="2"></rect>
|
||||
<text id="your-load-balancer" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="111.437988" y="15">your load balancer</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="arrows" transform="translate(43.000000, 21.000000)">
|
||||
<g id="arrow-copy-3" transform="translate(218.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-218.500000, -17.000000) translate(202.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-7"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-8)" stroke-width="4" xlink:href="#path-7"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy" transform="translate(111.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-111.500000, -17.000000) translate(95.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-9"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-10)" stroke-width="4" xlink:href="#path-9"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-2" transform="translate(4.500000, 17.000000) scale(1, -1) rotate(-90.000000) translate(-4.500000, -17.000000) translate(-12.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#445D6E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#445D6E" fill-rule="evenodd" xlink:href="#path-11"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-12)" stroke-width="4" xlink:href="#path-11"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="swam" transform="translate(22.000000, 54.000000)">
|
||||
<g id="nodes">
|
||||
<g id="workers" transform="translate(216.000000, 118.000000)">
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-3" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#E0E4E7"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#A1CFE8" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#E0E4E7" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="workers-dtr" transform="translate(347.000000, 0.000000)">
|
||||
<g id="node-1-copy-4">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp-copy" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-5" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp-copy" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-6" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp-copy" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="managers-ucp">
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-2" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="users" transform="translate(174.000000, 5.000000)" fill="#82949E">
|
||||
<g id="right" transform="translate(347.000000, 0.000000)">
|
||||
<g id="user">
|
||||
<text id="UI" font-family="OpenSans, Open Sans" font-size="12" font-weight="normal">
|
||||
<tspan x="7" y="41">UI</tspan>
|
||||
</text>
|
||||
<path d="M13,13 C16.59125,13 19.5,10.083125 19.5,6.5 C19.5,2.90875 16.59125,0 13,0 C9.40875,0 6.5,2.90875 6.5,6.5 C6.5,10.083125 9.40875,13 13,13 L13,13 Z M13,16.25 C8.669375,16.25 0,18.419375 0,22.75 L0,26 L26,26 L26,22.75 C26,18.419375 17.330625,16.25 13,16.25 L13,16.25 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="user-copy" transform="translate(42.000000, 0.000000)">
|
||||
<text id="CLI" font-family="OpenSans, Open Sans" font-size="12" font-weight="normal">
|
||||
<tspan x="4" y="41">CLI</tspan>
|
||||
</text>
|
||||
<path d="M13,13 C16.59125,13 19.5,10.083125 19.5,6.5 C19.5,2.90875 16.59125,0 13,0 C9.40875,0 6.5,2.90875 6.5,6.5 C6.5,10.083125 9.40875,13 13,13 L13,13 Z M13,16.25 C8.669375,16.25 0,18.419375 0,22.75 L0,26 L26,26 L26,22.75 C26,18.419375 17.330625,16.25 13,16.25 L13,16.25 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="left">
|
||||
<g id="user">
|
||||
<text id="UI" font-family="OpenSans, Open Sans" font-size="12" font-weight="normal">
|
||||
<tspan x="7" y="41">UI</tspan>
|
||||
</text>
|
||||
<path d="M13,13 C16.59125,13 19.5,10.083125 19.5,6.5 C19.5,2.90875 16.59125,0 13,0 C9.40875,0 6.5,2.90875 6.5,6.5 C6.5,10.083125 9.40875,13 13,13 L13,13 Z M13,16.25 C8.669375,16.25 0,18.419375 0,22.75 L0,26 L26,26 L26,22.75 C26,18.419375 17.330625,16.25 13,16.25 L13,16.25 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="user-copy" transform="translate(42.000000, 0.000000)">
|
||||
<text id="CLI" font-family="OpenSans, Open Sans" font-size="12" font-weight="normal">
|
||||
<tspan x="4" y="41">CLI</tspan>
|
||||
</text>
|
||||
<path d="M13,13 C16.59125,13 19.5,10.083125 19.5,6.5 C19.5,2.90875 16.59125,0 13,0 C9.40875,0 6.5,2.90875 6.5,6.5 C6.5,10.083125 9.40875,13 13,13 L13,13 Z M13,16.25 C8.669375,16.25 0,18.419375 0,22.75 L0,26 L26,26 L26,22.75 C26,18.419375 17.330625,16.25 13,16.25 L13,16.25 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 29 KiB |
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="690px" height="282px" viewBox="0 0 690 282" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 3.8.3 (29802) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>dtr-authorization-1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<rect id="path-1" x="0" y="0" width="690" height="282"></rect>
|
||||
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="690" height="282" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
</defs>
|
||||
<g id="Apps" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="dtr-authorization-1">
|
||||
<g id="all" transform="translate(175.000000, 62.000000)">
|
||||
<g id="Group" transform="translate(168.000000, 0.000000)">
|
||||
<g id="teams">
|
||||
<g id="billing-team" transform="translate(100.000000, 0.000000)">
|
||||
<path d="M34.5,26.5 C41.820625,26.5 47.75,20.5540625 47.75,13.25 C47.75,5.929375 41.820625,0 34.5,0 C27.179375,0 21.25,5.929375 21.25,13.25 C21.25,20.5540625 27.179375,26.5 34.5,26.5 L34.5,26.5 Z M34.5,33.125 C25.6721875,33.125 8,37.5471875 8,46.375 L8,53 L61,53 L61,46.375 C61,37.5471875 43.3278125,33.125 34.5,33.125 L34.5,33.125 Z" id="Shape-Copy" fill="#9967FF"></path>
|
||||
<text font-family="OpenSans-Semibold, Open Sans" font-size="12" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="0" y="68">billing team</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="blog-team">
|
||||
<text font-family="OpenSans-Semibold, Open Sans" font-size="12" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="0" y="68">blog team</tspan>
|
||||
</text>
|
||||
<path d="M29.5,26.5 C36.820625,26.5 42.75,20.5540625 42.75,13.25 C42.75,5.929375 36.820625,0 29.5,0 C22.179375,0 16.25,5.929375 16.25,13.25 C16.25,20.5540625 22.179375,26.5 29.5,26.5 L29.5,26.5 Z M29.5,33.125 C20.6721875,33.125 3,37.5471875 3,46.375 L3,53 L56,53 L56,46.375 C56,37.5471875 38.3278125,33.125 29.5,33.125 L29.5,33.125 Z" id="Shape-Copy-2" fill="#00CBCA"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="permissions" transform="translate(160.000000, 101.000000)">
|
||||
<g id="6" transform="translate(105.000000, 84.000000)" fill="#C0C9CE">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="5" transform="translate(0.000000, 84.000000)" fill="#C0C9CE">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="4" transform="translate(105.000000, 42.000000)">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings" fill="#C0C9CE"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape" fill="#445D6E"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape" fill="#445D6E"></path>
|
||||
</g>
|
||||
<g id="3" transform="translate(0.000000, 42.000000)">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings" fill="#C0C9CE"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape" fill="#445D6E"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape" fill="#C0C9CE"></path>
|
||||
</g>
|
||||
<g id="2" transform="translate(105.000000, 0.000000)" fill="#445D6E">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="1" fill="#C0C9CE">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="repos" transform="translate(0.000000, 98.000000)">
|
||||
<g id="node" transform="translate(0.000000, 84.000000)">
|
||||
<text id="whale/node" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="33" y="19">whale/node</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#1AAAF8"></path>
|
||||
</g>
|
||||
<g id="java" transform="translate(0.000000, 42.000000)">
|
||||
<text id="whale/java" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="33" y="19">whale/java</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#1AAAF8"></path>
|
||||
</g>
|
||||
<g id="golang">
|
||||
<text id="whale/golang" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="33" y="19">whale/golang</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#1AAAF8"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<text id="Whale-organization" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="270" y="19">Whale organization</tspan>
|
||||
</text>
|
||||
<use id="border" stroke="#C0C9CE" mask="url(#mask-2)" stroke-width="2" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 52 KiB |
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="178px" viewBox="0 0 740 178" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>content-cache-1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="content-cache-1">
|
||||
<g id="Group" transform="translate(263.000000, 15.000000)">
|
||||
<g id="lines" transform="translate(29.000000, 36.000000)" stroke="#E0E4E7" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M151.042505,74.0425047 L77.5,0.5" id="Line"></path>
|
||||
<path d="M77.5,77.5 L77.5,0.5" id="Line-Copy-3"></path>
|
||||
<path d="M0.440812521,76.5591875 L76.5,0.5" id="Line-Copy"></path>
|
||||
</g>
|
||||
<g id="L1" transform="translate(0.000000, 88.000000)">
|
||||
<g id="cache-3" transform="translate(155.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-AS" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.74023437" y="34">cache AS</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="cache-2" transform="translate(77.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-EU" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.29345703" y="34">cache EU</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="cache-1">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-US" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.33496094" y="34">cache US</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(71.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="36" cy="36" r="36"></circle>
|
||||
<text id="DTR" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="26.3051758" y="40">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 221 KiB |
|
@ -0,0 +1,166 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>content-cache-2</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="content-cache-2">
|
||||
<text id="UCP-cluster" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||
<tspan x="145.025" y="239.009524">UCP cluster</tspan>
|
||||
</text>
|
||||
<g id="nodes" transform="translate(215.000000, 15.000000)">
|
||||
<g id="cache" transform="translate(53.000000, 112.000000)">
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="Docker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="31.4838867" y="15">Docker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-agent" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7373047" y="15">UCP agent</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#00B6B5" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR-cache" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7836914" y="15">DTR cache</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="Docker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="31.4838867" y="15">Docker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-agent" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7373047" y="15">UCP agent</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#00B6B5" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR-cache" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7836914" y="15">DTR cache</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="dtr">
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="Docker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="31.4838867" y="15">Docker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-agent" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7373047" y="15">UCP agent</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="Docker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="31.4838867" y="15">Docker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-agent" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7373047" y="15">UCP agent</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="Docker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="31.4838867" y="15">Docker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-agent" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="23.7373047" y="15">UCP agent</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="group" stroke="#82949E" stroke-width="2" stroke-dasharray="5,5,5,5" x="140" y="3" width="460" height="245" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 271 KiB |
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>chaining-1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="chaining-1">
|
||||
<g id="Group" transform="translate(263.000000, 13.000000)">
|
||||
<g id="lines" transform="translate(29.000000, 36.000000)" stroke="#E0E4E7" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M157.5,187.5 L157.5,110.5" id="Line-Copy-2"></path>
|
||||
<path d="M151.042505,74.0425047 L77.5,0.5" id="Line"></path>
|
||||
<path d="M77.5,77.5 L77.5,0.5" id="Line-Copy-3"></path>
|
||||
<path d="M0.440812521,76.5591875 L76.5,0.5" id="Line-Copy"></path>
|
||||
</g>
|
||||
<g id="L2" transform="translate(155.000000, 164.000000)">
|
||||
<g id="cache-1">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-CH" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="7.87109375" y="34">cache CH</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="L1" transform="translate(0.000000, 88.000000)">
|
||||
<g id="cache-3" transform="translate(155.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-AS" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.74023437" y="34">cache AS</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="cache-2" transform="translate(77.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-EU" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.29345703" y="34">cache EU</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="cache-1">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="30" cy="30" r="30"></circle>
|
||||
<text id="cache-US" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="8.33496094" y="34">cache US</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(71.000000, 0.000000)">
|
||||
<circle id="Oval-2" fill="#1488C6" cx="36" cy="36" r="36"></circle>
|
||||
<text id="DTR" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#FFFFFF">
|
||||
<tspan x="26.3051758" y="40">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
|
@ -0,0 +1,160 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-3</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<circle id="path-1" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-1" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-3" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-3" fill="black"></use>
|
||||
</mask>
|
||||
<circle id="path-5" cx="4" cy="4" r="4"></circle>
|
||||
<mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="-2" y="-2" width="12" height="12">
|
||||
<rect x="-2" y="-2" width="12" height="12" fill="white"></rect>
|
||||
<use xlink:href="#path-5" fill="black"></use>
|
||||
</mask>
|
||||
</defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-3">
|
||||
<g id="group" transform="translate(93.000000, 3.000000)">
|
||||
<g id="dtr">
|
||||
<text id="DTR-cluster" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||
<tspan x="7.025" y="236.009524">DTR cluster</tspan>
|
||||
</text>
|
||||
<g id="network" transform="translate(33.000000, 178.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="366" height="22" rx="2"></rect>
|
||||
<text id="overlay-network" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="146.05127" y="15">overlay network</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="arrows" transform="translate(104.000000, 147.000000)">
|
||||
<g id="arrow-copy-2" transform="translate(218.500000, 17.000000) rotate(-90.000000) translate(-218.500000, -17.000000) translate(202.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-3" transform="translate(111.500000, 17.000000) rotate(-90.000000) translate(-111.500000, -17.000000) translate(95.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="arrow-copy-4" transform="translate(4.500000, 17.000000) rotate(-90.000000) translate(-4.500000, -17.000000) translate(-12.000000, 13.000000)">
|
||||
<path d="M2,4 L33,4" id="Line" stroke="#FFB463" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<g id="Oval">
|
||||
<use fill="#FFB463" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
<use stroke="#F7F8F9" mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="nodes" transform="translate(60.000000, 45.000000)">
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="group" stroke="#82949E" stroke-width="2" stroke-dasharray="5,5,5,5" x="0" y="0" width="433" height="245" rx="2"></rect>
|
||||
</g>
|
||||
<g id="object-storage" transform="translate(457.000000, 45.000000)">
|
||||
<rect id="node-border" fill="#445D6E" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
<text font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#F7F8F9">
|
||||
<tspan x="34.7006836" y="48">object</tspan>
|
||||
<tspan x="31.4633789" y="62">storage</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 268 KiB |
After Width: | Height: | Size: 144 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 307 KiB |
After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 76 KiB |
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="690px" height="250px" viewBox="0 0 690 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>delegate-image-signing-1</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="delegate-image-signing-1">
|
||||
<g id="all" transform="translate(175.000000, 11.000000)">
|
||||
<g id="Group" transform="translate(171.000000, 0.000000)">
|
||||
<g id="teams">
|
||||
<g id="billing-team" transform="translate(97.000000, 0.000000)">
|
||||
<path d="M34.5,26.5 C41.820625,26.5 47.75,20.5540625 47.75,13.25 C47.75,5.929375 41.820625,0 34.5,0 C27.179375,0 21.25,5.929375 21.25,13.25 C21.25,20.5540625 27.179375,26.5 34.5,26.5 L34.5,26.5 Z M34.5,33.125 C25.6721875,33.125 8,37.5471875 8,46.375 L8,53 L61,53 L61,46.375 C61,37.5471875 43.3278125,33.125 34.5,33.125 L34.5,33.125 Z" id="Shape-Copy" fill="#FFB463"></path>
|
||||
<text id="IT-ops-team" font-family="OpenSans-Semibold, Open Sans" font-size="12" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="0.799804688" y="70">IT ops team</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="blog-team">
|
||||
<text id="QA-team" font-family="OpenSans-Semibold, Open Sans" font-size="12" font-weight="500" fill="#C0C9CE">
|
||||
<tspan x="1.71972656" y="70">QA team</tspan>
|
||||
</text>
|
||||
<path d="M26.5,26.5 C33.820625,26.5 39.75,20.5540625 39.75,13.25 C39.75,5.929375 33.820625,0 26.5,0 C19.179375,0 13.25,5.929375 13.25,13.25 C13.25,20.5540625 19.179375,26.5 26.5,26.5 L26.5,26.5 Z M26.5,33.125 C17.6721875,33.125 3.55271368e-15,37.5471875 3.55271368e-15,46.375 L3.55271368e-15,53 L53,53 L53,46.375 C53,37.5471875 35.3278125,33.125 26.5,33.125 L26.5,33.125 Z" id="Shape-Copy-2" fill="#00B6B5"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="permissions" transform="translate(160.000000, 101.000000)">
|
||||
<g id="6" transform="translate(105.000000, 84.000000)" fill="#445D6E">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="5" transform="translate(0.000000, 84.000000)" fill="#C0C9CE">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="4" transform="translate(105.000000, 42.000000)" fill="#445D6E">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="3" transform="translate(0.000000, 42.000000)" fill="#C0C9CE">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="2" transform="translate(105.000000, 0.000000)" fill="#445D6E">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape"></path>
|
||||
</g>
|
||||
<g id="1">
|
||||
<path d="M75,11.3466667 L75,8.65333333 C73.6241667,8.16416667 72.755,8.02666667 72.3175,6.97083333 L72.3175,6.97 C71.8783333,5.91083333 72.4008333,5.19166667 73.0233333,3.88083333 L71.1191667,1.97666667 C69.8183333,2.595 69.0916667,3.1225 68.03,2.6825 L68.0291667,2.6825 C66.9716667,2.24416667 66.8333333,1.36916667 66.3466667,0 L63.6533333,0 C63.1683333,1.3625 63.0291667,2.24333333 61.9708333,2.6825 L61.97,2.6825 C60.9108333,3.1225 60.1933333,2.60083333 58.8808333,1.97666667 L56.9766667,3.88083333 C57.5975,5.1875 58.1225,5.90916667 57.6825,6.97 C57.2433333,8.02916667 56.3625,8.16833333 55,8.65333333 L55,11.3466667 C56.36,11.83 57.2433333,11.9708333 57.6825,13.0291667 C58.1241667,14.0975 57.5875,14.8341667 56.9766667,16.1183333 L58.8808333,18.0233333 C60.1825,17.4041667 60.9091667,16.8775 61.97,17.3175 L61.9708333,17.3175 C63.0291667,17.7558333 63.1675,18.6333333 63.6533333,20 L66.3466667,20 C66.8316667,18.6366667 66.9716667,17.7583333 68.0358333,17.315 L68.0366667,17.315 C69.0883333,16.8783333 69.8033333,17.3991667 71.1183333,18.0241667 L73.0225,16.1191667 C72.4025,14.8166667 71.8766667,14.0916667 72.3158333,13.0308333 C72.755,11.9716667 73.6391667,11.8308333 75,11.3466667 L75,11.3466667 Z M65,13.3333333 C63.1591667,13.3333333 61.6666667,11.8408333 61.6666667,10 C61.6666667,8.15916667 63.1591667,6.66666667 65,6.66666667 C66.8408333,6.66666667 68.3333333,8.15916667 68.3333333,10 C68.3333333,11.8408333 66.8408333,13.3333333 65,13.3333333 L65,13.3333333 Z" id="settings" fill="#C0C9CE"></path>
|
||||
<path d="M12.09,1 C4.5,1 0,10 0,10 C0,10 4.5,19 12.09,19 C19.5,19 24,10 24,10 C24,10 19.5,1 12.09,1 L12.09,1 Z M12,16 C8.7,16 6,13.33 6,10 C6,6.7 8.7,4 12,4 C15.33,4 18,6.7 18,10 C18,13.33 15.33,16 12,16 L12,16 Z M15,10 C15,11.665 13.665,13 12,13 C10.335,13 9,11.665 9,10 C9,8.335 10.335,7 12,7 C13.665,7 15,8.335 15,10 L15,10 Z" id="Shape" fill="#445D6E"></path>
|
||||
<path d="M31,15.0272045 L31,19 L34.9727791,19 L45.5668567,8.40587876 L41.5940776,4.4330833 L31,15.0272045 L31,15.0272045 Z M34.9727791,17.6757348 L32.3242597,17.6757348 L32.3242597,15.0272045 L33.6485194,15.0272045 L33.6485194,16.3514697 L34.9727791,16.3514697 L34.9727791,17.6757348 L34.9727791,17.6757348 Z M48.612654,5.36006891 L46.8911164,7.08161361 L42.9183373,3.10881814 L44.6398749,1.38727344 C44.8873057,1.13933381 45.2231988,1 45.573478,1 C45.9237573,1 46.2596503,1.13933381 46.5070811,1.38727344 L48.612654,3.49285504 C49.1291153,4.00931845 49.1291153,4.8436055 48.612654,5.36006891 L48.612654,5.36006891 Z" id="Shape" fill="#445D6E"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="repos" transform="translate(0.000000, 98.000000)">
|
||||
<g id="node" transform="translate(0.000000, 84.000000)">
|
||||
<text id="dev/node" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#82949E">
|
||||
<tspan x="33" y="19">dev/node</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#E0E4E7"></path>
|
||||
</g>
|
||||
<g id="java" transform="translate(0.000000, 42.000000)">
|
||||
<text id="dev/java" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#82949E">
|
||||
<tspan x="33" y="19">dev/java</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#E0E4E7"></path>
|
||||
</g>
|
||||
<g id="golang">
|
||||
<text id="dev/nginx" font-family="OpenSans-Semibold, Open Sans" font-size="16" font-weight="500" fill="#82949E">
|
||||
<tspan x="33" y="19">dev/nginx</tspan>
|
||||
</text>
|
||||
<path d="M27.5661032,5.88472594 C28.0144632,6.52363904 28.1153442,7.24661966 27.8687462,8.05366778 L23.245033,23.2867012 C23.0320619,24.0040773 22.6033176,24.6065612 21.9588,25.0941528 C21.3142824,25.5817443 20.6277311,25.8255401 19.8991459,25.8255401 L4.38028296,25.8255401 C3.51718982,25.8255401 2.68492144,25.5256993 1.88347781,24.9260177 C1.08203418,24.3263361 0.524386344,23.5893443 0.210534294,22.7150421 C-0.0584817485,21.964039 -0.0696907502,21.2522674 0.176907289,20.5797273 C0.176907289,20.5348913 0.193720792,20.3835698 0.227347797,20.1257627 C0.260974802,19.8679557 0.283392806,19.6605891 0.294601808,19.5036631 C0.30581081,19.4139911 0.288997307,19.2934943 0.2441613,19.1421728 C0.199325293,18.9908513 0.18251179,18.8815635 0.193720792,18.8143095 C0.216138795,18.6910105 0.260974802,18.573316 0.328228813,18.4612259 C0.395482824,18.3491359 0.487957089,18.2174302 0.605651607,18.0661086 C0.723346126,17.9147871 0.815820391,17.7830813 0.883074402,17.6709913 C1.14088144,17.2450492 1.39308398,16.7322374 1.63968202,16.1325558 C1.88628006,15.5328742 2.05441509,15.0200624 2.1440871,14.5941203 C2.17771411,14.4820303 2.18051636,14.3138953 2.15249385,14.0897152 C2.12447135,13.8655352 2.1216691,13.7086092 2.1440871,13.6189372 C2.17771411,13.4956382 2.27299062,13.3387121 2.42991665,13.1481591 C2.58684267,12.9576061 2.68211919,12.8287025 2.71574619,12.7614485 C2.95113523,12.3579245 3.18652427,11.8423104 3.42191331,11.2146063 C3.65730234,10.5869022 3.79741487,10.0824971 3.84225087,9.70139105 C3.85345988,9.60051003 3.83944862,9.421166 3.80021712,9.16335896 C3.76098561,8.90555192 3.76378786,8.7486259 3.80862387,8.69258089 C3.85345988,8.54686386 3.9767589,8.37592659 4.17852093,8.17976905 C4.38028296,7.98361152 4.50358198,7.85751025 4.54841799,7.80146524 C4.76138902,7.5100312 4.99958031,7.03645087 5.26299185,6.38072427 C5.52640339,5.72499766 5.68052717,5.18416333 5.72536317,4.75822126 C5.73657218,4.66854924 5.71975867,4.52563447 5.67492267,4.32947694 C5.63008666,4.13331941 5.61887766,3.98480014 5.64129566,3.88391912 C5.66371366,3.79424711 5.71415417,3.69336609 5.79261718,3.58127607 C5.8710802,3.46918605 5.97196121,3.34028253 6.09526023,3.19456551 C6.21855925,3.04884849 6.31383577,2.93115397 6.38108978,2.84148195 C6.47076179,2.70697393 6.56323606,2.53603665 6.65851257,2.32867012 C6.75378909,2.12130359 6.8378566,1.92514606 6.91071511,1.74019753 C6.98357362,1.555249 7.07324564,1.35348697 7.17973116,1.13491143 C7.28621667,0.916335896 7.39550444,0.736991868 7.50759446,0.596879345 C7.61968448,0.456766823 7.76820375,0.325061052 7.95315228,0.201762032 C8.13810081,0.0784630125 8.33986284,0.0140112522 8.55843838,0.00840675134 C8.77701391,0.00280225045 9.0432277,0.0336270054 9.35707975,0.100881016 L9.34026625,0.151321524 C9.76620832,0.050440508 10.0520379,0 10.1977549,0 L22.9928304,0 C23.8222966,0 24.4612097,0.31385205 24.9095697,0.94155615 C25.3579298,1.56926025 25.4588108,2.29784537 25.2122128,3.1273115 L20.605313,18.3603449 C20.201789,19.6942161 19.8010672,20.554507 19.4031476,20.9412176 C19.005228,21.3279282 18.2850497,21.5212834 17.2426125,21.5212834 L2.63167868,21.5212834 C2.32903563,21.5212834 2.1160646,21.6053509 1.99276558,21.773486 C1.86946656,21.95283 1.86386206,22.1938235 1.97595208,22.4964666 C2.24496812,23.2810967 3.05201625,23.6734118 4.39709646,23.6734118 L19.9159594,23.6734118 C20.2410205,23.6734118 20.5548725,23.586542 20.8575156,23.4128025 C21.1601586,23.239063 21.3563162,23.0064762 21.4459882,22.7150421 L26.490039,6.12011498 C26.568502,5.87351694 26.5965245,5.55406039 26.5741065,5.16174532 C27.0000486,5.32988035 27.3307141,5.57087389 27.5661032,5.88472594 L27.5661032,5.88472594 Z M9.6765363,5.91835294 C9.6317003,6.06406997 9.6429093,6.19017124 9.71016331,6.29665675 C9.77741732,6.40314227 9.88950734,6.45638503 10.0464334,6.45638503 L20.269043,6.45638503 C20.41476,6.45638503 20.5576748,6.40314227 20.6977873,6.29665675 C20.8378998,6.19017124 20.9303741,6.06406997 20.9752101,5.91835294 L21.3282937,4.84228877 C21.3731297,4.69657175 21.3619207,4.57047048 21.2946667,4.46398496 C21.2274126,4.35749944 21.1153226,4.30425669 20.9583966,4.30425669 L10.735787,4.30425669 C10.5900699,4.30425669 10.4471552,4.35749944 10.3070427,4.46398496 C10.1669301,4.57047048 10.0744559,4.69657175 10.0296199,4.84228877 L9.6765363,5.91835294 Z M8.28101558,10.2226096 C8.23617957,10.3683267 8.24738858,10.4944279 8.31464259,10.6009134 C8.3818966,10.707399 8.49398662,10.7606417 8.65091264,10.7606417 L18.8735223,10.7606417 C19.0192393,10.7606417 19.1621541,10.707399 19.3022666,10.6009134 C19.4423791,10.4944279 19.5348534,10.3683267 19.5796894,10.2226096 L19.9327729,9.14654546 C19.9776089,9.00082844 19.9663999,8.87472717 19.8991459,8.76824165 C19.8318919,8.66175613 19.7198019,8.60851337 19.5628759,8.60851337 L9.34026625,8.60851337 C9.19454923,8.60851337 9.05163445,8.66175613 8.91152193,8.76824165 C8.77140941,8.87472717 8.67893514,9.00082844 8.63409914,9.14654546 L8.28101558,10.2226096 Z" id="Shape" fill="#E0E4E7"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 328 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 232 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 51 KiB |
|
@ -0,0 +1,225 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="740px" height="250px" viewBox="0 0 740 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>architecture-2</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="dtr-diagrams" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="architecture-2">
|
||||
<text id="UCP-cluster" font-family="OpenSans-Semibold, Open Sans" font-size="10" font-weight="500" fill="#82949E">
|
||||
<tspan x="28.025" y="239.009524">UCP cluster</tspan>
|
||||
</text>
|
||||
<g id="nodes" transform="translate(36.000000, 15.000000)">
|
||||
<g id="workers" transform="translate(233.000000, 116.000000)">
|
||||
<g id="node-1-copy">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1-copy-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="worker-dtr" transform="translate(347.000000, 0.000000)">
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="worker-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">worker node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-worker" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="20.4755859" y="15">UCP worker</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="dtr" transform="translate(1.000000, 33.000000)">
|
||||
<rect id="Rectangle-138" fill="#FFB463" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="DTR" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="38.4980469" y="15">DTR</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
<g id="manager-ucp">
|
||||
<g id="node-3" transform="translate(214.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-2" transform="translate(107.000000, 0.000000)">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
<g id="node-1">
|
||||
<g id="node">
|
||||
<g id="node-label">
|
||||
<path d="M0,2.00295631 C0,0.896754086 0.897702336,0 1.99174577,0 L71,0 L71,10.6452381 C71,16.5244408 66.2312425,21.2904762 60.3513837,21.2904762 L0,21.2904762 L0,2.00295631 Z" id="Rectangle-127" fill="#445D6E"></path>
|
||||
<text id="manager-node" font-family="OpenSans, Open Sans" font-size="8" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="6" y="14">manager node</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<g id="engine" transform="translate(1.000000, 79.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="CS-Docker-Engine" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="7.26025391" y="15">CS Docker Engine</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g id="ucp" transform="translate(1.000000, 56.000000)">
|
||||
<rect id="Rectangle-138" fill="#1488C6" x="0" y="0" width="95" height="22" rx="2"></rect>
|
||||
<text id="UCP-manager" font-family="OpenSans, Open Sans" font-size="10" font-weight="normal" fill="#FFFFFF">
|
||||
<tspan x="16.0297852" y="15">UCP manager</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<rect id="node-border" stroke="#445D6E" stroke-width="2" x="0" y="0" width="97" height="102" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<rect id="group" stroke="#82949E" stroke-width="2" stroke-dasharray="5,5,5,5" x="21" y="3" width="687" height="245" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 300 KiB |
After Width: | Height: | Size: 266 KiB |
After Width: | Height: | Size: 296 KiB |
After Width: | Height: | Size: 318 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 169 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 285 KiB |
After Width: | Height: | Size: 502 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 259 KiB |