From 1fdfe678e35998fdd4a48ef901814d60f2311d0e Mon Sep 17 00:00:00 2001 From: Joao Fernandes Date: Mon, 3 Oct 2016 13:30:15 -0700 Subject: [PATCH] Updates installation docs --- architecture.md | 66 +++++++++++++++++---------------- images/architecture-1.png | Bin 32520 -> 44362 bytes install/index.md | 58 +++++++++-------------------- install/install-dtr-offline.md | 2 +- install/system-requirements.md | 21 ++++------- 5 files changed, 60 insertions(+), 87 deletions(-) diff --git a/architecture.md b/architecture.md index e84f5da686..a612b6b1ff 100644 --- a/architecture.md +++ b/architecture.md @@ -22,62 +22,64 @@ Universal Control Plane cluster. When you install DTR on a node, the following containers are started: -| Name | Description | -|:------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------| -| 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-api-<replica_id> | Executes the DTR business logic. It serves the DTR web application, and API. | -| dtr-registry-<replica_id> | Implements the functionality for pulling and pushing Docker images. It also handles how images are stored. | -| dtr-etcd-<replica_id> | A key-value store for persisting DTR configuration settings. Don't use it in your applications, since it's for internal use only. | -| dtr-jobrunner-<replica_id> | Runs cleanup jobs in the background. It is not exposed to DTR, and is for internal use only. | -| dtr-rethinkdb-<replica_id> | A database for persisting repository metadata. Don't use it in your applications, since it's for internal use only. | -| 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. Is not exposed to DTR, and is for internal use only. | +| Name | Description | +|:-------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------| +| dtr-api-<replica_id> | Executes the DTR business logic. It serves the DTR web application, and API | +| dtr-etcd-<replica_id> | A key-value store for persisting DTR configuration settings | +| dtr-jobrunner-<replica_id> | Runs cleanup jobs in the background | +| 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 To allow containers to communicate, when installing DTR the following networks are created: -| Name | Type | Description | -|:-------|:--------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| dtr-br | bridge | Allows containers on the same node to communicate with each other in a secure way. | -| dtr-ol | overlay | Allows containers running on different nodes to communicate. This network is used in high-availability installations, to allow Etcd and RethinkDB containers to replicate their data. | +| Name | Type | Description | +|:-------|:--------|:---------------------------------------------------------------------------------------| +| dtr-br | bridge | Allows DTR components on the same node to communicate with each other in a secure way | +| dtr-ol | overlay | Allows DTR components running on different nodes to communicate, to replicate DTR data | -The communication between all DTR components is secured using TLS. Also, when -installing DTR, two Certificate Authorities (CAs) are created. These CAs are -used to create the certificates used by Etcd and RethinkDB when communicating -across nodes. ## Volumes DTR uses these named volumes for persisting data: -| Volume name | Location on host (/var/lib/docker/volumes/) | Description | -|:--------------------------------|:--------------------------------------------|:-------------------------------------------------------------------------------------------------------------| -| dtr-ca-<replica_id> | dtr-ca/_data | The volume where the private keys and certificates are stored so that containers can use TLS to communicate. | -| dtr-etcd-<replica_id> | dtr-etcd/_data | The volume used by etcd to persist DTR configurations. | -| dtr-registry-<replica_id> | dtr-registry/_data | The volume where images are stored, if DTR is configured to store images on the local filesystem. | -| dtr-rethink-<replica_id> | dtr-rethink/_data | The volume used by RethinkDB to persist DTR data, like users and repositories. | -| dtr-notary-<replica_id> | dtr-notary/_data | The volume where the Notary private TLS keys and certificates are stored so that the Notary containers can use TLS to communicate. | +| Volume name | Description | +|:--------------------------------|:---------------------------------------------------------------------------------| +| dtr-ca-<replica_id> | Root key material for the DTR root CA that issues certificates | +| dtr-etcd-<replica_id> | DTR configuration data | +| dtr-notary-<replica_id> | Certificate and keys for the Notary components | +| dtr-registry-<replica_id> | Docker images data, if DTR is configured to store images on the local filesystem | +| dtr-rethink-<replica_id> | Repository metadata | -If you don’t create these volumes, when installing DTR they are created with -the default volume driver and flags. +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//_data`. ## Image storage -By default, Docker Trusted Registry stores images on the filesystem of the host +By default, Docker Trusted Registry stores images on the filesystem of the node where it is running. -You can also configure DTR to using these cloud storage backends: +You can also configure DTR to use these storage backends: +* NFS * Amazon S3 +* Cleversafe * OpenStack Swift * Microsoft Azure -For highly available installations, configure DTR to use a cloud storage -backend or a network filesystem like NFS. - +For highly available installations, you should use a cloud storage system +instead of an NFS mount, since they usually have better performance. ## High-availability support diff --git a/images/architecture-1.png b/images/architecture-1.png index 5d20fc7970abbe7a8902d4044c15967941926969..1528ddecf1a29ced239e615723fc84bd235fa9bd 100644 GIT binary patch literal 44362 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

vW=|=x7oKO(t4|f=E@KW>*D^!Oce%*%J3DUR zQ44jq-2TIkuF#RDZO6^+W;Ig znq+_N<=m6aT^ilxf}pA#1?|n=0T!Z-I_dOd_M-1Qh0R~X9?iB7NbP4hi~sy}NM3S9 zO>2^Jnqh8GX7pS4<-OxfvM0DJqln5Vh4I3tAL!SdJ^4^zr`2Uu_{jfEU(q>7cE%)E z;KX5N#l*L@nfb&DS}h~azNX#Ftr`woGH855V|ZM5%ZalO&I`ImrMN{`lUlj?+jeH@ zJBkgCR`@*iwA(!Yg%VA??N)|jqS(R8QncRGuuf8AH23uVv3mlKWzO@Q4eRdG!XHu- z)WF#XS0BCjVxZ9#U}0T${wHtY5?tS{L#meyK7V5sUr0SSq`0kjk!SRQZ7X~<1bUt+ zaZ_8Fh8=DE1$*bpO7<5yhw&(W%ar&R$@DEA*&jQby!Z=h+Y)kH=5%DUH;4F&4LxqG8b8UKDID4rp>I(e9!b4Rmgv)R~ITb6B`^GePZ@7bXN) z?ueQ6_Y|kdBvdgf6C8M)!m)Vv& zAD?0^Je#4>9V@U(5YTG<7(uZYC(07rU6U){L^;T`)c7~WS_$JSDyU3B$TUACVM>z~ zQe5|alHdLGXIids&{URdXz2a1yItY}QTj++KKDcFSSBm0USvv9k+kqAL3^e#$1_SN zW4*R1LqB;un4lWgM?22D zDWF;1nbvizPS!P~tKoAXzdx{MiRN_m*2r+pn~%ceR#bdz48GPL#x<@R#noJ&+;7pS z_gEwE)`F!AXm;e=dhW@RE_aVI5z57E6!LSAPkzvx?&oDt+r8?x4Zo9Ohuq7))nEB7 z?_AuJB6E)Lbf>&s0()Y0$U*jiVuo7xJZ{-iX|5stU8L+C)hc-l6>6-rqfqRwqM~_n zO4RAI);lEFe`G;(yCB59VlpSRga2#6ctGyQRiCDw<)ps%DAA75d>2rlv4zzh_uEuX zlEwQ+gpM*e6~W6e@O{?Wn31EZILy^nac4`oW~=mG`DY7%JU^p>L*oZ-Gqu(?y5MoG zeq4WD)7CvAuelzb6Kb};yIE$TtEf@EzQGTjPh*&_C50_z#U-qT|BBJ84ZYE3$C}IS zGcjx07%6Nh!($wNEN7rtc852GM*XY11miV5mm%>obvDkf;w(nbMR}<&#bYiU&Ck4g+ z-OX)@s%7<#y`AbsQ>t6adm64s!b55HzQM+9F%w`E`zu6Jw6?b@tHQ^CtP|Jp>y-I8l_Qbd+GacBJo|XkeV#z*^WC|nbPqqy-h2- zoXu`|@3Fp}?Ug&x!w(#&t0=r@&1^jKSR-U8MQ{EK2d?Iu=CPo)!|j5-4J+mbNA(Wk zlt76GYBvR46Tva#dmP0ZrxzMc7+5&adfe`0&>r_?dowS_#SVELcbvb2DloKGtoqK6 zkp1Ppi)!z>Ma}eUQIkc7*QK51Wq+bcGKOWViiQGDG?=&z+%D2^R_)Tu$a~DIr1cc6 z%*m^+U-TX>BaY5e@fI16jn3+09sM~6ZA9x|_mvl}8@4t#Kf4#(?Qxm%#7LcVce|}s z2Dcw}+JSYvWfUDN+jFBro}Xve-k3Q2N@-Y_EyofMB}9y;1eXlu`8qhNV2yCXm}MR6 zT>XRNof_V`uldY#?dqLd=cJYhWH-9AXnu!8LDs5+y+4Lk$WO#aSZ|%wSzDRl@iJp^QQhP(j$p26~&3?<;;qd#v0m`$eL;wH) diff --git a/install/index.md b/install/index.md index b4e2e0329b..2b5b67b525 100644 --- a/install/index.md +++ b/install/index.md @@ -18,8 +18,8 @@ weight=20 # Install Docker Trusted Registry Docker Trusted Registry (DTR) is a containerized application that runs on a -Docker Universal Control Plane (UCP) cluster. It can be installed on-premises -or on a cloud infrastructure. +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. @@ -30,10 +30,11 @@ infrastructure has all the [requirements DTR needs to run](system-requirements.m ## Step 2. Install UCP -Since DTR requires a Docker Universal Control Plane (UCP) cluster -to run, you need to install UCP first. -[Learn how to install UCP](https://docs.docker.com/ucp/installation/install-production/). Make sure that the node you install DTR on is already joined to the UCP cluster. +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](https://docs.docker.com/ucp/installation/install-production/). +Make sure all the nodes you plan on installing DTR are being managed by UCP. ## Step 3. Install DTR @@ -44,34 +45,25 @@ To install DTR: 1. Download a UCP client bundle. - Having a UCP client bundle allows you to run Docker commands on a UCP - cluster. + Having a UCP client bundle allows you to run Docker commands on a swarm + being managed by UCP. [Download a UCP client bundle](https://docs.docker.com/ucp/access-ucp/cli-based-access/) and set up your CLI client to use it. -2. Run the following command to install DTR. +2. Run the following commands to install DTR. ```bash # Get the certificates used by UCP - $ curl -k https://$UCP_HOST/ca > ucp-ca.pem + $ curl -k https:///ca > ucp-ca.pem # Install DTR $ docker run -it --rm \ docker/dtr install \ - --ucp-url $UCP_URL \ - --ucp-node $NODE_HOSTNAME \ - --dtr-external-url $DTR_PUBLIC_IP \ - --ucp-username $USER --ucp-password $PASSWORD \ --ucp-ca "$(cat ucp-ca.pem)" ``` - Where: - - * ucp-url, is the URL of the UCP controller, - * ucp-node, is the hostname of the UCP node where DTR will be installed, - * dtr-external-url, is the public IP or domain name where DTR can be reached, - * ucp-username, and ucp-password are the credentials of a UCP administrator, - * ucp-ca, is the certificate authority used by UCP. + The install command has other flags for customizing DTR at install time. + Check the [reference documentation to learn more](../reference/install.md). 3. Check that DTR is running. @@ -113,12 +105,14 @@ This step is optional. To set up DTR for [high availability](../high-availability/index.md), 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. Each replica must be located on a node already joined to the UCP cluster. +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. To add replicas: - 1. Load you UCP user bundle. 2. Run the join command. @@ -131,25 +125,13 @@ replicas: ```bash # Get the certificates used by UCP - $ curl -k https://$UCP_HOST/ca > ucp-ca.pem + $ curl -k https:///ca > ucp-ca.pem $ docker run -it --rm \ docker/dtr join \ - --ucp-url $UCP_URL \ - --ucp-node $UCP_NODE \ - --existing-replica-id $REPLICA_TO_JOIN \ - --ucp-username $USER --ucp-password $PASSWORD \ --ucp-ca "$(cat ucp-ca.pem)" ``` - Where: - - * ucp-url, is the URL of the UCP controller, - * ucp-node, is the node on the ucp cluster where the DTR replica will be installed, - * existing-replica-id, is the ID of the DTR replica you want to replicate, - * ucp-username, and ucp-password are the credentials of a UCP administrator, - * ucp-ca, is the certificate used by UCP. - 3. Check that all replicas are running. In your browser, navigate to the the Docker **Universal Control Plane** @@ -158,12 +140,6 @@ replicas: ![](../images/install-dtr-4.png) -4. Follow steps 1 to 3, to add more replicas to the DTR cluster. - - When configuring your DTR cluster for high-availability, you should install - 3, 5, or 7 replicas. - [Learn more about high availability](../high-availability/index.md) - ## See also * [Install DTR offline](install-dtr-offline.md) diff --git a/install/install-dtr-offline.md b/install/install-dtr-offline.md index 0cfc57ad57..0076404ac6 100644 --- a/install/install-dtr-offline.md +++ b/install/install-dtr-offline.md @@ -42,7 +42,7 @@ copy that package to the nodes where you’ll install DTR. 3. Login into the host where you transferred the images. -4. Load the UCP images. +4. Load the images. Once the package is on the node where you want to install DTR, you can use the `docker load` command, to load the images from the .tar file. diff --git a/install/system-requirements.md b/install/system-requirements.md index 367acb3fa2..5b8ed80f7f 100644 --- a/install/system-requirements.md +++ b/install/system-requirements.md @@ -18,26 +18,21 @@ Before installing, be sure your infrastructure has these requirements. ## Software requirements -To install DTR on a node, that node node must be part of a Docker Universal -Control Plane 1.1 cluster. +You can only install DTR on a node that is being managed by Docker Universal +Control Plane 2.0. + ## Ports used When installing DTR on a node, make sure the following ports are open on that node: -| Direction | Port | Purpose | -|:---------:|:-----|:---------------------------------------------------------------------------------| -| in | 80 | Web app and API client access to DTR. | -| in | 443 | Web app and API client access to DTR. | -| out | 443 | Check if new versions are available, and send anonymous usage reports to Docker. | +| Direction | Port | Purpose | +|:---------:|:-----|:--------------------------------------| +| in | 80 | Web app and API client access to DTR. | +| in | 443 | Web app and API client access to DTR. | -The inbound ports are configurable. - -DTR collects anonymous usage metrics, to help us improve it. These metrics -are entirely anonymous, don’t identify your company, users, applications, -or any other sensitive information. You can disable this on the DTR settings -page. +These ports are configurable when installing DTR. ## Compatibility and maintenance lifecycle