mirror of
git://git.yoctoproject.org/meta-virtualization.git
synced 2025-07-19 12:50:22 +02:00
docker: remove obsolete docker-registry recipe
The docker v1 registry has long been depreciated and moved into the docker distribution library. The registry is run via the docker CLI and not through a standalone server. This change removes the old registry and adds a .service file + package for docker registry in the main docker recipe. Anyone that wants to run a local registry can install the docker-registry package and the service will start. Note: No full config.yml file is provided, since the default are sane. If tweaks are required, we can use ENV vars or consider adding a config overlay. Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
This commit is contained in:
parent
c85b181e7e
commit
c5cd21af5f
|
@ -1,93 +0,0 @@
|
|||
HOMEPAGE = "https://github.com/docker/docker-registry"
|
||||
SUMMARY = "Registry server for Docker"
|
||||
DESCRIPTION = "\
|
||||
This is the classic python docker-registry. \
|
||||
. \
|
||||
hosting/delivering of repositories and images \
|
||||
"
|
||||
|
||||
SRCREV = "fd8c0c114985547b69088e0f1526e58bfe2ff914"
|
||||
SRC_URI = "\
|
||||
git://github.com/docker/docker-registry.git \
|
||||
file://docker-registry.conf \
|
||||
file://docker-registry.service \
|
||||
file://config.yml \
|
||||
file://change_sqlalchemy_rqt.patch \
|
||||
"
|
||||
|
||||
LICENSE = "Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE;md5=35e8e5305c1b7b4a5761f9de5d44e5f4"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
PV = "0.9.1+git${SRCREV}"
|
||||
|
||||
RDEPENDS_${PN} += "\
|
||||
docker \
|
||||
gunicorn (>= 19.1.1) \
|
||||
python-pip \
|
||||
python-distribute \
|
||||
python-m2crypto (>= 0.22.3) \
|
||||
python-pyyaml (>= 3.11) \
|
||||
python-flask (>= 0.10.1) \
|
||||
python-gevent (>= 1.0.1) \
|
||||
python-requests \
|
||||
python-sqlalchemy (>= 0.9.4) \
|
||||
python-blinker (>= 1.3) \
|
||||
python-backports-lzma (>= 0.0.3) \
|
||||
python-flask-cors (>= 1.10.3) \
|
||||
python-bugsnag (>= 2.0.2) \
|
||||
python-docker-registry-core (>= 2.0.3) \
|
||||
python-newrelic (>= 2.22.0.19) \
|
||||
python-itsdangerous (>= 0.21) \
|
||||
python-jinja2 (>= 2.4) \
|
||||
python-werkzeug (>= 0.7) \
|
||||
python-simplejson (>= 3.6.2) \
|
||||
python-redis (>= 2.10.3) \
|
||||
python-boto (>= 2.34.0) \
|
||||
python-webob \
|
||||
"
|
||||
# OFFICIAL REQ:
|
||||
# docker-registry-core>=2,<3
|
||||
# blinker==1.3
|
||||
# backports.lzma==0.0.3,!=0.0.4
|
||||
|
||||
# Flask==0.10.1
|
||||
# gevent==1.0.1
|
||||
# gunicorn==19.1.1
|
||||
# PyYAML==3.11
|
||||
# requests==2.3.0
|
||||
# M2Crypto==0.22.3
|
||||
# sqlalchemy==0.9.4
|
||||
# setuptools==5.8
|
||||
#
|
||||
# [bugsnag]
|
||||
# bugsnag>=2.0,<2.1
|
||||
#
|
||||
# [cors]
|
||||
# Flask-cors>=1.8,<2.0
|
||||
#
|
||||
# [newrelic]
|
||||
# newrelic>=2.22,<2.23
|
||||
|
||||
|
||||
inherit setuptools systemd
|
||||
|
||||
SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}"
|
||||
SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker-registry.service','',d)}"
|
||||
|
||||
do_install_append() {
|
||||
mkdir -p ${D}/etc/default/
|
||||
cp ${WORKDIR}/docker-registry.conf ${D}/etc/default/docker-registry
|
||||
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
|
||||
install -d ${D}${systemd_unitdir}/system
|
||||
install -m 644 ${WORKDIR}/docker-registry.service ${D}/${systemd_unitdir}/system
|
||||
sed -i "s|#WORKDIR#|${PYTHON_SITEPACKAGES_DIR}/docker_registry|" ${D}/${systemd_unitdir}/system/docker-registry.service
|
||||
fi
|
||||
# based on config_mirror.yml - uses /var/docker-registry instead of /tmp for files
|
||||
install ${WORKDIR}/config.yml ${D}/etc/docker-registry.yml
|
||||
mkdir -p ${D}/var/docker-registry
|
||||
}
|
||||
|
||||
FILES_${PN} += "/etc/default /var/docker-registry /etc/ /etc/default/volatiles"
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
requirements/main.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/requirements/main.txt
|
||||
+++ b/requirements/main.txt
|
||||
@@ -5,5 +5,5 @@
|
||||
PyYAML==3.11
|
||||
requests==2.3.0
|
||||
M2Crypto==0.22.3
|
||||
-sqlalchemy==0.9.4
|
||||
+sqlalchemy>=0.9.4
|
||||
setuptools==5.8
|
|
@ -1,228 +0,0 @@
|
|||
# All other flavors inherit the `common' config snippet
|
||||
common: &common
|
||||
issue: '"docker-registry server"'
|
||||
# Default log level is info
|
||||
loglevel: _env:LOGLEVEL:info
|
||||
# Enable debugging (additional informations in the output of the _ping endpoint)
|
||||
debug: _env:DEBUG:false
|
||||
# By default, the registry acts standalone (eg: doesn't query the index)
|
||||
standalone: _env:STANDALONE:true
|
||||
# The default endpoint to use (if NOT standalone) is index.docker.io
|
||||
index_endpoint: _env:INDEX_ENDPOINT:https://index.docker.io
|
||||
# Storage redirect is disabled
|
||||
storage_redirect: _env:STORAGE_REDIRECT
|
||||
# Token auth is enabled (if NOT standalone)
|
||||
disable_token_auth: _env:DISABLE_TOKEN_AUTH
|
||||
# No priv key
|
||||
privileged_key: _env:PRIVILEGED_KEY
|
||||
# No search backend
|
||||
search_backend: _env:SEARCH_BACKEND
|
||||
# SQLite search backend
|
||||
sqlalchemy_index_database: _env:SQLALCHEMY_INDEX_DATABASE:sqlite:////var/docker-registry/docker-registry.db
|
||||
|
||||
# Mirroring is not enabled
|
||||
mirroring:
|
||||
source: _env:MIRROR_SOURCE # https://registry-1.docker.io
|
||||
source_index: _env:MIRROR_SOURCE_INDEX # https://index.docker.io
|
||||
tags_cache_ttl: _env:MIRROR_TAGS_CACHE_TTL:172800 # seconds
|
||||
|
||||
cache:
|
||||
host: _env:CACHE_REDIS_HOST
|
||||
port: _env:CACHE_REDIS_PORT
|
||||
db: _env:CACHE_REDIS_DB:0
|
||||
password: _env:CACHE_REDIS_PASSWORD
|
||||
|
||||
# Enabling LRU cache for small files
|
||||
# This speeds up read/write on small files
|
||||
# when using a remote storage backend (like S3).
|
||||
cache_lru:
|
||||
host: _env:CACHE_LRU_REDIS_HOST
|
||||
port: _env:CACHE_LRU_REDIS_PORT
|
||||
db: _env:CACHE_LRU_REDIS_DB:0
|
||||
password: _env:CACHE_LRU_REDIS_PASSWORD
|
||||
|
||||
# Enabling these options makes the Registry send an email on each code Exception
|
||||
email_exceptions:
|
||||
smtp_host: _env:SMTP_HOST
|
||||
smtp_port: _env:SMTP_PORT:25
|
||||
smtp_login: _env:SMTP_LOGIN
|
||||
smtp_password: _env:SMTP_PASSWORD
|
||||
smtp_secure: _env:SMTP_SECURE:false
|
||||
from_addr: _env:SMTP_FROM_ADDR:docker-registry@localdomain.local
|
||||
to_addr: _env:SMTP_TO_ADDR:noise+dockerregistry@localdomain.local
|
||||
|
||||
# Enable bugsnag (set the API key)
|
||||
bugsnag: _env:BUGSNAG
|
||||
|
||||
# CORS support is not enabled by default
|
||||
cors:
|
||||
origins: _env:CORS_ORIGINS
|
||||
methods: _env:CORS_METHODS
|
||||
headers: _env:CORS_HEADERS:[Content-Type]
|
||||
expose_headers: _env:CORS_EXPOSE_HEADERS
|
||||
supports_credentials: _env:CORS_SUPPORTS_CREDENTIALS
|
||||
max_age: _env:CORS_MAX_AGE
|
||||
send_wildcard: _env:CORS_SEND_WILDCARD
|
||||
always_send: _env:CORS_ALWAYS_SEND
|
||||
automatic_options: _env:CORS_AUTOMATIC_OPTIONS
|
||||
vary_header: _env:CORS_VARY_HEADER
|
||||
resources: _env:CORS_RESOURCES
|
||||
|
||||
local: &local
|
||||
<<: *common
|
||||
storage: local
|
||||
storage_path: _env:STORAGE_PATH:/var/docker-registry
|
||||
|
||||
|
||||
s3: &s3
|
||||
<<: *common
|
||||
storage: s3
|
||||
s3_region: _env:AWS_REGION
|
||||
s3_bucket: _env:AWS_BUCKET
|
||||
boto_bucket: _env:AWS_BUCKET
|
||||
storage_path: _env:STORAGE_PATH:/registry
|
||||
s3_encrypt: _env:AWS_ENCRYPT:true
|
||||
s3_secure: _env:AWS_SECURE:true
|
||||
s3_access_key: _env:AWS_KEY
|
||||
s3_secret_key: _env:AWS_SECRET
|
||||
s3_use_sigv4: _env:AWS_USE_SIGV4
|
||||
boto_host: _env:AWS_HOST
|
||||
boto_port: _env:AWS_PORT
|
||||
boto_calling_format: _env:AWS_CALLING_FORMAT
|
||||
|
||||
cloudfronts3: &cloudfronts3
|
||||
<<: *s3
|
||||
cloudfront:
|
||||
base: _env:CF_BASE_URL
|
||||
keyid: _env:CF_KEYID
|
||||
keysecret: _env:CF_KEYSECRET
|
||||
|
||||
azureblob: &azureblob
|
||||
<<: *common
|
||||
storage: azureblob
|
||||
azure_storage_account_name: _env:AZURE_STORAGE_ACCOUNT_NAME
|
||||
azure_storage_account_key: _env:AZURE_STORAGE_ACCOUNT_KEY
|
||||
azure_storage_container: _env:AZURE_STORAGE_CONTAINER:registry
|
||||
azure_use_https: _env:AZURE_USE_HTTPS:true
|
||||
|
||||
# Ceph Object Gateway Configuration
|
||||
# See http://ceph.com/docs/master/radosgw/ for details on installing this service.
|
||||
ceph-s3: &ceph-s3
|
||||
<<: *common
|
||||
storage: s3
|
||||
s3_region: ~
|
||||
s3_bucket: _env:AWS_BUCKET
|
||||
s3_encrypt: _env:AWS_ENCRYPT:false
|
||||
s3_secure: _env:AWS_SECURE:false
|
||||
storage_path: _env:STORAGE_PATH:/registry
|
||||
s3_access_key: _env:AWS_KEY
|
||||
s3_secret_key: _env:AWS_SECRET
|
||||
boto_bucket: _env:AWS_BUCKET
|
||||
boto_host: _env:AWS_HOST
|
||||
boto_port: _env:AWS_PORT
|
||||
boto_debug: _env:AWS_DEBUG:0
|
||||
boto_calling_format: _env:AWS_CALLING_FORMAT
|
||||
|
||||
# Google Cloud Storage Configuration
|
||||
# See:
|
||||
# https://developers.google.com/storage/docs/reference/v1/getting-startedv1#keys
|
||||
# for details on access and secret keys.
|
||||
gcs:
|
||||
<<: *common
|
||||
storage: gcs
|
||||
boto_bucket: _env:GCS_BUCKET
|
||||
storage_path: _env:STORAGE_PATH:/registry
|
||||
gs_secure: _env:GCS_SECURE:true
|
||||
gs_access_key: _env:GCS_KEY
|
||||
gs_secret_key: _env:GCS_SECRET
|
||||
# OAuth 2.0 authentication with the storage.
|
||||
# oauth2 can be set to true or false. If it is set to true, gs_access_key,
|
||||
# gs_secret_key and gs_secure are not needed.
|
||||
# Client ID and Client Secret must be set into OAUTH2_CLIENT_ID and
|
||||
# OAUTH2_CLIENT_SECRET environment variables.
|
||||
# See: https://developers.google.com/accounts/docs/OAuth2.
|
||||
oauth2: _env:GCS_OAUTH2:false
|
||||
|
||||
# This flavor is for storing images in Openstack Swift
|
||||
swift: &swift
|
||||
<<: *common
|
||||
storage: swift
|
||||
storage_path: _env:STORAGE_PATH:/registry
|
||||
# keystone authorization
|
||||
swift_authurl: _env:OS_AUTH_URL
|
||||
swift_container: _env:OS_CONTAINER
|
||||
swift_user: _env:OS_USERNAME
|
||||
swift_password: _env:OS_PASSWORD
|
||||
swift_tenant_name: _env:OS_TENANT_NAME
|
||||
swift_region_name: _env:OS_REGION_NAME
|
||||
|
||||
# This flavor stores the images in Glance (to integrate with openstack)
|
||||
# See also: https://github.com/docker/openstack-docker
|
||||
glance: &glance
|
||||
<<: *common
|
||||
storage: glance
|
||||
storage_alternate: _env:GLANCE_STORAGE_ALTERNATE:file
|
||||
storage_path: _env:STORAGE_PATH:/var/docker-registry
|
||||
|
||||
openstack:
|
||||
<<: *glance
|
||||
|
||||
# This flavor stores the images in Glance (to integrate with openstack)
|
||||
# and tags in Swift.
|
||||
glance-swift: &glance-swift
|
||||
<<: *swift
|
||||
storage: glance
|
||||
storage_alternate: swift
|
||||
|
||||
openstack-swift:
|
||||
<<: *glance-swift
|
||||
|
||||
elliptics:
|
||||
<<: *common
|
||||
storage: elliptics
|
||||
elliptics_nodes: _env:ELLIPTICS_NODES
|
||||
elliptics_wait_timeout: _env:ELLIPTICS_WAIT_TIMEOUT:60
|
||||
elliptics_check_timeout: _env:ELLIPTICS_CHECK_TIMEOUT:60
|
||||
elliptics_io_thread_num: _env:ELLIPTICS_IO_THREAD_NUM:2
|
||||
elliptics_net_thread_num: _env:ELLIPTICS_NET_THREAD_NUM:2
|
||||
elliptics_nonblocking_io_thread_num: _env:ELLIPTICS_NONBLOCKING_IO_THREAD_NUM:2
|
||||
elliptics_groups: _env:ELLIPTICS_GROUPS
|
||||
elliptics_verbosity: _env:ELLIPTICS_VERBOSITY:4
|
||||
elliptics_logfile: _env:ELLIPTICS_LOGFILE:/dev/stderr
|
||||
elliptics_addr_family: _env:ELLIPTICS_ADDR_FAMILY:2
|
||||
|
||||
# This flavor stores the images in Aliyun OSS
|
||||
# See:
|
||||
# https://i.aliyun.com/access_key/
|
||||
# for details on access and secret keys.
|
||||
oss: &oss
|
||||
<<: *common
|
||||
storage: oss
|
||||
storage_path: _env:STORAGE_PATH:/registry/
|
||||
oss_host: _env:OSS_HOST
|
||||
oss_bucket: _env:OSS_BUCKET
|
||||
oss_accessid: _env:OSS_KEY
|
||||
oss_accesskey: _env:OSS_SECRET
|
||||
|
||||
|
||||
|
||||
# This is the default configuration when no flavor is specified
|
||||
dev: &dev
|
||||
<<: *local
|
||||
loglevel: _env:LOGLEVEL:debug
|
||||
debug: _env:DEBUG:true
|
||||
search_backend: _env:SEARCH_BACKEND:sqlalchemy
|
||||
|
||||
# This flavor is used by unit tests
|
||||
test:
|
||||
<<: *dev
|
||||
index_endpoint: https://registry-stage.hub.docker.com
|
||||
standalone: true
|
||||
storage_path: _env:STORAGE_PATH:./tmp/test
|
||||
|
||||
# To specify another flavor, set the environment variable SETTINGS_FLAVOR
|
||||
# $ export SETTINGS_FLAVOR=prod
|
||||
prod:
|
||||
<<: *s3
|
||||
storage_path: _env:STORAGE_PATH:/prod
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
# The Docker registry configuration file
|
||||
DOCKER_REGISTRY_CONFIG=/etc/docker-registry.yml
|
||||
|
||||
# The configuration to use from DOCKER_REGISTRY_CONFIG file
|
||||
SETTINGS_FLAVOR=local
|
||||
|
||||
# Address to bind the registry to
|
||||
REGISTRY_ADDRESS=0.0.0.0
|
||||
|
||||
# Port to bind the registry to
|
||||
REGISTRY_PORT=5000
|
||||
|
||||
# Number of workers to handle the connections
|
||||
GUNICORN_WORKERS=4
|
||||
|
||||
STANDALONE=true
|
||||
|
||||
MIRROR_SOURCE=https://registry-1.docker.io
|
||||
MIRROR_SOURCE_INDEX=https://index.docker.io
|
|
@ -1,15 +0,0 @@
|
|||
[Unit]
|
||||
Description=Registry server for Docker
|
||||
After=docker.service
|
||||
Requires=docker.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Environment=DOCKER_REGISTRY_CONFIG=/etc/docker-registry.yml
|
||||
EnvironmentFile=-/etc/default/docker-registry
|
||||
WorkingDirectory=#WORKDIR#
|
||||
ExecStart=/usr/bin/gunicorn --access-logfile /var/log/docker-registry-access.log --error-logfile /var/log/docker-registry-error.log --debug --max-requests 100 --graceful-timeout 3600 -t 3600 -k gevent -b ${REGISTRY_ADDRESS}:${REGISTRY_PORT} -w ${GUNICORN_WORKERS} docker_registry.wsgi:application
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -24,6 +24,7 @@ SRC_URI = "\
|
|||
git://github.com/docker/docker.git;nobranch=1;name=docker \
|
||||
git://github.com/docker/libnetwork.git;branch=master;name=libnetwork;destsuffix=libnetwork \
|
||||
file://docker.init \
|
||||
file://docker-registry.service \
|
||||
file://hi.Dockerfile \
|
||||
file://context-use-golang.org-x-net-pkg-until-we-move-to-go.patch \
|
||||
"
|
||||
|
@ -59,7 +60,7 @@ DEPENDS = " \
|
|||
grpc-go \
|
||||
"
|
||||
|
||||
PACKAGES =+ "${PN}-contrib"
|
||||
PACKAGES =+ "${PN}-contrib ${PN}-registry"
|
||||
|
||||
DEPENDS_append_class-target = "lvm2"
|
||||
RDEPENDS_${PN} = "curl aufs-util git util-linux iptables \
|
||||
|
@ -135,6 +136,10 @@ inherit systemd update-rc.d
|
|||
|
||||
SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}"
|
||||
SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker.service','',d)}"
|
||||
SYSTEMD_SERVICE_${PN}-registry = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker-registry.service','',d)}"
|
||||
|
||||
SYSTEMD_AUTO_ENABLE_${PN}-registry = "enable"
|
||||
SYSTEMD_AUTO_ENABLE_${PN} = "enable"
|
||||
|
||||
INITSCRIPT_PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${PN}','',d)}"
|
||||
INITSCRIPT_NAME_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','docker.init','',d)}"
|
||||
|
@ -151,6 +156,8 @@ do_install() {
|
|||
install -m 644 ${S}/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system
|
||||
# replaces one copied from above with one that uses the local registry for a mirror
|
||||
install -m 644 ${S}/contrib/init/systemd/docker.service ${D}/${systemd_unitdir}/system
|
||||
|
||||
install -m 644 ${WORKDIR}/docker-registry.service ${D}/${systemd_unitdir}/system
|
||||
else
|
||||
install -d ${D}${sysconfdir}/init.d
|
||||
install -m 0755 ${WORKDIR}/docker.init ${D}${sysconfdir}/init.d/docker.init
|
||||
|
@ -165,6 +172,9 @@ inherit useradd
|
|||
USERADD_PACKAGES = "${PN}"
|
||||
GROUPADD_PARAM_${PN} = "-r docker"
|
||||
|
||||
FILES_${PN}-registry += "${systemd_unitdir}/system/docker-registry.service"
|
||||
RDEPENDS_${PN}-registry += "docker"
|
||||
|
||||
FILES_${PN} += "${systemd_unitdir}/system/*"
|
||||
|
||||
FILES_${PN}-contrib += "${datadir}/docker/check-config.sh"
|
||||
|
|
19
recipes-containers/docker/files/docker-registry.service
Normal file
19
recipes-containers/docker/files/docker-registry.service
Normal file
|
@ -0,0 +1,19 @@
|
|||
[Unit]
|
||||
Description=docker private registry service
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
ExecStartPre=-/usr/bin/docker kill registry
|
||||
ExecStartPre=-/usr/bin/docker rm registry
|
||||
ExecStart=/usr/bin/docker run --name registry -v /mirror/registry:/tmp/ -p 5000:5000 \
|
||||
-e "STANDALONE=true" \
|
||||
-e "MIRROR_SOURCE=https://registry-1.docker.io" \
|
||||
-e "MIRROR_SOURCE_INDEX=https://index.docker.io" \
|
||||
-e "SETTINGS_FLAVOR=local" \
|
||||
registry
|
||||
ExecStop=-/usr/bin/docker stop registry
|
||||
Restart=always
|
||||
RestartSec=10s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
Loading…
Reference in New Issue
Block a user