mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-22 19:52:03 +00:00
172 lines
5.2 KiB
ReStructuredText
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`` .
|
|
|
|
|