As a personal exercise I am trying to build an extended catalog item for Rancher.
I’d like to build a catalog item for Harbor (VMware Enterprise registry). More here: https://github.com/vmware/harbor
.
I have looked into some other existing Rancher catalog items and they all seem to assume that you can just pass environment variables to docker-compose / rancher-compose (that Rancher presumably gather during the configuration phase of the item).
Harbor is a little bit more complex. At the high level the setup works like this:
- You grab a release (which is essentially the docker-compose file + a few other things).
- you configure the (user-friendly) file harbor.cfg
- you run the
prepare
script (which essentially disseminate all the info in harbor.cfg in different configuration files (in the./common
directory) - you run docker-compose up which includes proper mapping of various configuration files in the
./common
directory.
For reference, this is the docker-compose file:
version: '2'
services:
log:
image: vmware/harbor-log:0.5.0-rc2
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor/:/var/log/docker/
ports:
- 1514:514
registry:
image: library/registry:2.5.0
container_name: registry
restart: always
volumes:
- /data/registry:/storage
- ./common/config/registry/:/etc/registry/
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
mysql:
image: vmware/harbor-db:0.5.0-rc2
container_name: harbor-db
restart: always
volumes:
- /data/database:/var/lib/mysql
env_file:
- ./common/config/db/env
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
ui:
image: vmware/harbor-ui:0.5.0-rc2
container_name: harbor-ui
env_file:
- ./common/config/ui/env
restart: always
volumes:
- ./common/config/ui/app.conf:/etc/ui/app.conf
- ./common/config/ui/private_key.pem:/etc/ui/private_key.pem
- /data:/harbor_storage
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
jobservice:
image: vmware/harbor-jobservice:0.5.0-rc2
container_name: harbor-jobservice
env_file:
- ./common/config/jobservice/env
restart: always
volumes:
- /data/job_logs:/var/log/jobs
- ./common/config/jobservice/app.conf:/etc/jobservice/app.conf
depends_on:
- ui
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
proxy:
image: nginx:1.11.5
container_name: nginx
restart: always
volumes:
- ./common/config/nginx:/etc/nginx
ports:
- 80:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
Is it even possible to create a rancher catalog item for a service like this? If so, how would one go about it? Does it involve creating Rancher volumes (pre-populated with such information) to satisfy the mappings in the compose project?
How would one populate such files at catalog item configuration time?
Thanks.