139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
# Docker Registry Integration Testing
 | 
						|
 | 
						|
These integration tests cover interactions between the Docker daemon and the
 | 
						|
registry server. All tests are run using the docker cli.
 | 
						|
 | 
						|
The compose configuration is intended to setup a testing environment for Docker
 | 
						|
using multiple registry configurations. These configurations include different
 | 
						|
combinations of a v1 and v2 registry as well as TLS configurations.
 | 
						|
 | 
						|
## Running inside of Docker
 | 
						|
### Get integration container
 | 
						|
The container image to run the integation tests will need to be pulled or built
 | 
						|
locally.
 | 
						|
 | 
						|
*Building locally*
 | 
						|
```
 | 
						|
$ docker build -t distribution/docker-integration .
 | 
						|
```
 | 
						|
 | 
						|
### Run script
 | 
						|
 | 
						|
Invoke the tests within Docker through the `run.sh` script.
 | 
						|
 | 
						|
```
 | 
						|
$ ./run.sh
 | 
						|
```
 | 
						|
 | 
						|
Run with aufs driver and tmp volume
 | 
						|
**NOTE: Using a volume will prevent multiple runs from needing to
 | 
						|
re-pull images**
 | 
						|
```
 | 
						|
$ DOCKER_GRAPHDRIVER=aufs DOCKER_VOLUME=/tmp/volume ./run.sh
 | 
						|
```
 | 
						|
 | 
						|
### Example developer flow 
 | 
						|
 | 
						|
These tests are useful for developing both as a registry and docker
 | 
						|
core developer. The following setup may be used to do integration
 | 
						|
testing between development versions
 | 
						|
 | 
						|
Insert into your `.zshrc` or `.bashrc`
 | 
						|
 | 
						|
```
 | 
						|
# /usr/lib/docker for Docker-in-Docker
 | 
						|
# Set this directory to make each invocation run much faster, without
 | 
						|
# the need to repull images.
 | 
						|
export DOCKER_VOLUME=$HOME/.docker-test-volume
 | 
						|
 | 
						|
# Use overlay for all Docker testing, try aufs if overlay not supported
 | 
						|
export DOCKER_GRAPHDRIVER=overlay
 | 
						|
 | 
						|
# Name this according to personal preference
 | 
						|
function rdtest() {
 | 
						|
  if [ "$1" != "" ]; then
 | 
						|
    DOCKER_BINARY=$GOPATH/src/github.com/docker/docker/bundles/$1/binary/docker
 | 
						|
    if [ ! -f $DOCKER_BINARY ]; then
 | 
						|
      current_version=`cat $GOPATH/src/github.com/docker/docker/VERSION`
 | 
						|
      echo "$DOCKER_BINARY does not exist"
 | 
						|
      echo "Current checked out docker version: $current_version"
 | 
						|
      echo "Checkout desired version and run 'make binary' from $GOPATH/src/github.com/docker/docker"
 | 
						|
      return 1
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
 | 
						|
  $GOPATH/src/github.com/docker/distribution/contrib/docker-integration/run.sh
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Run with Docker release version
 | 
						|
```
 | 
						|
$ rdtest
 | 
						|
```
 | 
						|
 | 
						|
Run using local development version of docker
 | 
						|
```
 | 
						|
$ cd $GOPATH/src/github.com/docker/docker
 | 
						|
$ make binary
 | 
						|
$ rdtest `cat VERSION`
 | 
						|
```
 | 
						|
 | 
						|
## Running manually outside of Docker
 | 
						|
 | 
						|
### Install Docker Compose
 | 
						|
 | 
						|
[Docker Compose Installation Guide](http://docs.docker.com/compose/install/)
 | 
						|
 | 
						|
### Start compose setup
 | 
						|
```
 | 
						|
docker-compose up
 | 
						|
```
 | 
						|
 | 
						|
### Install Certificates
 | 
						|
The certificates must be installed in /etc/docker/cert.d in order to use TLS
 | 
						|
client auth and use the CA certificate.
 | 
						|
```
 | 
						|
sudo sh ./install_certs.sh
 | 
						|
```
 | 
						|
 | 
						|
### Test with Docker
 | 
						|
Tag an image as with any other private registry. Attempt to push the image.
 | 
						|
 | 
						|
```
 | 
						|
docker pull hello-world
 | 
						|
docker tag hello-world localhost:5440/hello-world
 | 
						|
docker push localhost:5440/hello-world
 | 
						|
 | 
						|
docker tag hello-world localhost:5441/hello-world
 | 
						|
docker push localhost:5441/hello-world
 | 
						|
# Perform login using user `testuser` and password `passpassword`
 | 
						|
```
 | 
						|
 | 
						|
### Set /etc/hosts entry
 | 
						|
Find the non-localhost ip address of local machine
 | 
						|
 | 
						|
### Run bats
 | 
						|
Run the bats tests after updating /etc/hosts, installing the certificates, and
 | 
						|
running the `docker-compose` script.
 | 
						|
```
 | 
						|
bats -p .
 | 
						|
```
 | 
						|
 | 
						|
## Configurations
 | 
						|
 | 
						|
Port | V2 | V1 | TLS | Authentication
 | 
						|
--- | --- | --- | --- | ---
 | 
						|
5000 | yes | yes | no | none
 | 
						|
5001 | no | yes | no | none
 | 
						|
5002 | yes | no | no | none
 | 
						|
5011 | no | yes | yes | none
 | 
						|
5440 | yes | yes | yes | none
 | 
						|
5441 | yes | yes | yes | basic (testuser/passpassword)
 | 
						|
5442 | yes | yes | yes | TLS client
 | 
						|
5443 | yes | yes | yes | TLS client (no CA)
 | 
						|
5444 | yes | yes | yes | TLS client + basic (testuser/passpassword)
 | 
						|
5445 | yes | yes | yes (no CA) | none
 | 
						|
5446 | yes | yes | yes (no CA) | basic (testuser/passpassword)
 | 
						|
5447 | yes | yes | yes (no CA) | TLS client
 | 
						|
5448 | yes | yes | yes (SSLv3) | none
 |