2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-22 11:42:05 +00:00
xcat-core/docs/source/advanced/docker/docker_registry.rst

172 lines
5.2 KiB
ReStructuredText

Docker Registry in xCAT
=======================
Docker Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images.
This document describes how to set up a local private docker registry on Ubuntu 15.04 on x86_64.
.. note:: Ensure that docker registry is not already set up on this docker host.
Setting Up Docker Host
----------------------
Install Docker version 1.6.0 or newer.
Setting Up Docker Registry Manually
-----------------------------------
Docker registry needed to be set up on xCAT's MN.
This section describes two methods of setting up docker registry manually.
First, create some folders where files for this tutorial will live. ::
mkdir /docker-registry && cd $_
mkdir certs
Copy xCAT server certificate and key to certs folder. ::
cp /etc/xcat/cert/server-cert.pem certs/domain.crt
cp /etc/xcat/cert/server-key.pem certs/domain.key
Method 1: Start Docker Registry Directly
````````````````````````````````````````
Create Configuration File
'''''''''''''''''''''''''
Define configuration file ``docker-registry`` under ``/docker-registry/`` folder as below. ::
#!/bin/bash
docker_command=$1
if [ $docker_command = "start" ]; then
docker_ps_result=$(docker ps -a | grep "registry")
if [ -z $docker_ps_result ]; then
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/data:/data \
-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
else
docker start registry
fi
elif [ $docker_command = "stop" ]; then
docker stop registry
else
echo "The parameter is wrong."
fi
Starting Docker Registry as a Service
'''''''''''''''''''''''''''''''''''''
Create ``docker-registry.service`` file in ``/etc/systemd/system/``, add the following contents to it. ::
[Unit]
Description=Docker Registry
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/docker-registry
ExecStart=/bin/bash docker-registry start
ExecStop=/bin/bash docker-registry stop
[Install]
WantedBy=default.target
Start registry service: ::
service docker-registry start
Method 2: Managing Docker Registry with Compose
```````````````````````````````````````````````
Docker Compose it is a tool for defining and running Docker applications. It could help setting up registry.
Install Docker Compose
''''''''''''''''''''''
Compose can also be run inside a container, from a small bash script wrapper. To install compose as a container run: ::
curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Create Configuration File
'''''''''''''''''''''''''
Define configuration file ``docker-compose.yml`` under ``/docker-registry/`` folder as below. ::
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
volumes:
- ./data:/data
- ./certs:/certs
The environment section sets environment variables in the Docker registry container. The Docker registry app knows to check this environment variable when it starts up and to start saving its data to the ``/data`` folder as a result.
Starting Docker Registry as a Service
'''''''''''''''''''''''''''''''''''''
Create ``docker-registry.service`` file in ``/etc/systemd/system/``, add the following contents to it. ::
[Uint]
Description=Docker Registry
[Service]
Type=simple
Restart=on-failure
RestartSec=30s
WorkingDirectory=/docker-registry
ExecStart=/usr/local/bin/docker-compose up
[Install]
WantedBy=default.target
Start registry service: ::
service docker-registry start
Accessing Docker Registry from other docker host
------------------------------------------------
Copy ca.crt file from xCAT MN to a client machine. Client machine must be a docker host. ::
scp username@xCAT_MN_ip:/etc/xcat/cert/ca.pem /etc/docker/certs.d/domainname:5000/ca.crt
List Available Images in Registry
`````````````````````````````````````
::
curl -k https://domainname:5000/v2/_catalog
Pull Images from Registry
`````````````````````````
Just use the "tag" image name, which includes the domain name, port, and image name. ::
docker pull domainname:5000/imagename
Push Images to Registry
```````````````````````
Before the image can be pushed to the registry, it must be tagged with the location of the private registry. ::
docker tag imagename domainname:5000/imagename
Now we can push that image to our registry. ::
docker push domainname:5000/imagename
**note:** If there is a problem with the CA certificate, edit the file ``/etc/default/docker`` so that there is a line that reads: ``DOCKER_OPTS="--insecure-registry domianname:5000"`` . Then restart Docker daemon ``service docker restart`` .