The Docker Registry comes with a sample configuration file,
config_sample.yml
. Copy this to config.yml
to provide a basic
configuration:
cp config_sample.yml config.yml
Docker Registry can run in several flavors. This enables you to run it in development mode, production mode or your own predefined mode.
In the config yaml file, you'll see a few sample flavors:
common
: used by all other flavors as base settingsdev
: used for developmentprod
: used for productiontest
: used by unit testsopenstack
: to integrate with openstack
You can define your own flavors by adding a new top-level yaml key.
You can specify which flavor to run by setting SETTINGS_FLAVOR
in your
environment: export SETTINGS_FLAVOR=dev
The default environment is dev
.
common:
loglevel: info
prod:
loglevel: warn
storage: local
storage_path: /srv/docker
smtp_host: localhost
from_addr: [email protected]
to_addr: [email protected]
dev:
loglevel: debug
storage: local
storage_path: /home/myself/docker
test:
storage: local
storage_path: /tmp/tmpdockertmp
Specify the config file to be used by setting DOCKER_REGISTRY_CONFIG
in your
environment: export DOCKER_REGISTRY_CONFIG=config.yml
The location of the yaml file should be relative to the source directory. Absolute paths are not yet supported.
The default location of the config file is config.yml
, located in the source
directory.
secret_key
: 64 character string, this key should be unique and secret. It is used by the Registry to sign secret things. If you leave this blank, the Registry will generate a random string.loglevel
: string, level of debugging. Any of python's logging module levels:debug
,info
,warn
,error
orcritical
-
standalone
: boolean, run the server in stand-alone mode. This means that the Index service on index.docker.io will not be used for anything. This impliesdisable_token_auth
. -
index_endpoint
: string, configures the hostname of the Index endpoint. This is used to verify passwords of users that log in. It defaults to https://index.docker.io. You should probably leave this to its default. -
disable_token_auth
: boolean, disable checking of tokens with the Docker index. You should provide your own method of authentication (such as Basic auth).
These options configure your S3 storage. These are used when storage
is set
to s3
.
s3_access_key
: string, S3 access keys3_secret_key
: string, S3 secret keys3_bucket
: string, S3 bucker name
Settings these options makes the Registry send an email on each code Exception:
email_exceptions
:smtp_host
: hostname to connect to using SMTPsmtp_login
: username to use when connecting to authenticated SMTPsmtp_password
: password to use when connecting to authenticated SMTPfrom_addr
: email address to use when sending emailto_addr
: email address to send exceptions to
Example:
test:
email_exceptions:
smtp_host: localhost
storage
: can be one of:
local
: store images on local storagestorage_path
local path to the image stores3
: store images on S3storage_path
is a subdir in your S3 bucker- remember to set all
s3_*
options (see above) glance
: store images on Glance (OpenStack)storage_alternate
: storage engine to use when Glance storage fails, e.g.local
- If you use
storage_alternate
local, remeber to setstorage_path
docker run samalba/docker-registry
NOTE: The container will try to allocate the port 5000 by default, if the port is already taken, find out which one has been taken by running "docker ps"
Install the system requirements for building a Python library:
sudo apt-get install build-essential python-dev libevent-dev python-pip
Then install the Registry app:
sudo pip install -r requirements.txt
sudo yum install python-devel libevent-devel python-pip
NOTE: On RHEL and CentOS you will need the EPEL repostitories enabled. Fedora should not require the additional repositories.
Then install the Registry app:
sudo python-pip install -r requirements.txt
gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 wsgi:application
The first time someone tries to push to your registry, it will prompt them for a username, password, and email.
The recommended setting to run the Registry in a prod environment is gunicorn behind a nginx server which supports chunked transfer-encoding (nginx >= 1.3.9).
You could use for instance supervisord to spawn the registry with 8 workers using this command:
gunicorn -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:5000 -w 8 wsgi:application
Note that when using multiple workers, the secret_key for the Flask session must be set explicitly in config.yml. Otherwise each worker will use its own random secret key, leading to unpredictable behavior.
The nginx configuration will look like:
location / {
proxy_pass http://localhost:5000;
proxy_set_header X-Real-IP $remote_addr;
}
And you might want to add Basic auth on Nginx to protect it (if you're not using it on your local network):
Enable mod_proxy using a2enmod proxy_http
, then use this snippet forward
requests to the Docker Registry:
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
The central Registry runs on the dotCloud platform:
cd docker-registry/
dotcloud create myregistry
dotcloud push
If you want to submit a pull request, please run the unit tests using tox before submitting anything to the repos:
pip install tox
cd docker-registry/
tox