~drscream
Run Docker images on SmartOS
This feature is available on the SkyLime SmartOS Version because we merged the changes from an existing issue into our branch to support the Docker Registry Version 2. This has been done because most of the existing Docker images only using version 2, which result in less usable images if you only support version 1. With this change no docker version 1 is supported any more, which is the biggest drawback if you’ve already version 1 images.
Usage
Configure imgadm
to add docker hub sources:
$ imgadm sources --add-docker-hub
imgadm avail
doesn’t work against the Hub, so you’ll have to search the Hub manually. But you could import images simple via the imgadm import
command:
$ imgadm import busybox
Show installed docker images:
$ imgadm list --docker
UUID REPOSITORY TAG IMAGE_ID CREATED
6357e9ab-0e79-5a0d-697b-b528d925026a konradkleine/docker-registry-frontend - sha256:9976b 2017-10-11T23:50:25Z
5de66518-05f1-1ca2-34ee-6c8750a7a4bb busybox - sha256:0ffad 2017-11-03T22:39:17Z
1a99421d-7df8-23ec-1758-0b46b730aa1f registry - sha256:f792f 2017-12-01T22:15:41Z
Configure personal docker registry
Import the official image for the docker registry:
$ imgadm import registry
Install and activate docker registry with the vmadm
command. For that store the following file on your SmartOS machine for example in /opt/docker-registry.json
:
{
"alias": "docker-registry",
"hostname": "docker-registry.dev.example.com",
"image_uuid": "1a99421d-7df8-23ec-1758-0b46b730aa1f",
"nics": [
{
"nic_tag": "admin",
"primary": true,
"ips": [ "172.22.175.100/25" ],
"gateways": [ "172.22.175.1" ]
}
],
"brand": "lx",
"docker": "true",
"kernel_version": "3.13.0",
"max_physical_memory": 1024,
"maintain_resolvers": true,
"resolvers": [
"8.8.8.8"
],
"quota": 10,
"internal_metadata": {
"docker:cmd": "[\"/bin/sh\", \"/entrypoint.sh\", \"/etc/docker/registry/config.yml\"]"
}
}
Please modify the ips
, gateways
and resolvers
field in the JSON manifest.
The docker:cmd
is based on the Dockerfile from the repository. The image_uuid
need to be set to the latest version you’ve downloaded via imgadm
. If you need to verify it run:
$ imgadm list --docker
Create and run the container:
$ vmadm create -f /opt/docker-registry.json
At the moment the configuration file described in the docker container show us that it will listen on port 5000
.
Provide web interface for personal docker registry
This could be easily done with an image provided on Docker Hub.
$ imgadm import konradkleine/docker-registry-frontend:v2
Save the following manifest which describe the setup of the zone, for example in /opt/registry-web.json
:
{
"alias": "docker-registry-web",
"hostname": "docker-registry-web.dev.example.com",
"image_uuid": "6357e9ab-0e79-5a0d-697b-b528d925026a",
"nics": [
{
"nic_tag": "admin",
"primary": true,
"ips": [ "172.22.175.101/25" ],
"gateways": [ "172.22.175.1" ]
}
],
"brand": "lx",
"docker": "true",
"kernel_version": "3.13.0",
"max_physical_memory": 1024,
"maintain_resolvers": true,
"resolvers": [
"8.8.8.8"
],
"quota": 10,
"internal_metadata": {
"docker:cmd": "[\"/root/start-apache.sh\"]",
"docker:tty": true,
"docker:attach_stdin": true,
"docker:attach_stdout": true,
"docker:attach_stderr": true,
"docker:open_stdin": true,
"docker:env": "[ \"ENV_DOCKER_REGISTRY_HOST=172.22.175.100\",\"ENV_DOCKER_REGISTRY_PORT=5000\"]",
"docker:noipmgmtd": true
}
}
You should be able to access the web service via http://172.22.175.101, or whatever IP you’re using.
Tipps
Logfiles for docker images are stored in the zone so you need to look there:
$ cat /zones/${UUID}/logs/stdio.log
You may like to login with a shell for some debugging:
$ zlogin -i ${UUID} /native/usr/vm/sbin/dockerexec /bin/sh
Send your comment by mail.