boatyard
boatyard copied to clipboard
[DEPRECATED] Web UI to docker build
A Go web service which provides a HTTP API and a web UI for building, pushing, and deleting docker images.
Deprecation notice
This repository has been deprecated in favour of Tutum's new Automated Build functionality which uses the open source tutum/builder image for repository building.
Running
With docker and fig installed, and with docker listening in tcp://localhost:4243, simply run:
fig up -d
Run docker ps and check the allocated port for boatyard. Then point your browser to http://localhost:49XXX/ to open the web UI.
Configuration options
You can specify any of the following environment variables in the fig.yml to configure it:
DOCKER_HOST(default:tcp://localhost:4243): the endpoint where a Docker server is listening toCACHE_1_PORT_6379_TCP_ADDR(default: none): the hostname to connect to a Redis cacheCACHE_1_PORT_6379_TCP_PORT(default:6379): the port to connect to a Redis cacheCACHE_PASSWORD(default: none): an optional password to authenticate with the Redis cache
Usage
The primary inputs to create an image are:
- Image name (i.e.
user/myimage) - Username (to be used when pushing, i.e.
user) - Password (to be used when pushing, i.e.
password) - Email (to be used when pushing, i.e.
[email protected])
Any of the following inputs can be passed to boatyard to create the image:
- A
Dockerfile - A URL to a tarball containing a
Dockerfileon the root folder and any required files - A GitHub repository (combination of GitHub username, repo name and tag)
- A tarball sent as part of the request
API specification
Building
Requests
From Dockerfile:
POST /api/v1/build
{
"image_name": "user/image",
"username": "user",
"password": "password",
"email": "[email protected]",
"dockerfile": "FROM ubuntu:saucy\nCMD echo \"Hello world\""
}
From a tarball URL:
POST /api/v1/build
{
"image_name": "user/image",
"username": "user",
"password": "password",
"email": "[email protected]",
"tar_url": "https://github.com/tutumcloud/docker-hello-world/archive/v1.0.tar.gz"
}
From GitHub repository:
POST /api/v1/build
{
"image_name": "user/image",
"username": "user",
"password": "password",
"email": "[email protected]",
"github_username": "tutumcloud",
"github_reponame": "docker-hello-world",
"github_tag": "v1.0"
}
From a tarball sent with the request:
POST /api/v1/build
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="TarFile"; filename="dockertarexample.tar.gz"
Content-Type: application/x-gzip
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="Json"; filename="manifest.json"
Content-Type: application/json
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Where manifest.json has the following format.
{
"image_name": "user/image",
"username": "user",
"password": "password",
"email": "[email protected]"
}
### Response
{
"JobIdentifier": "ef0c7a10-31a5-4140-6087-df97c2bebcb2"
}
The JobIdentifier can be used to check the status and logs with the following GET requests.
Checking job status
### Request
Issue the following request:
GET /api/v1/:jobid/status
where :jobid is the job ID returned in the build request (i.e. ef0c7a10-31a5-4140-6087-df97c2bebcb2)
Response
{
"Status": "Pushing"
}
The status will show errors, and on a successful call the job status has three stages: "Building", "Pushing", and "Finished".
Checking job logs
### Request
Issue the following request:
GET /api/v1/:jobid/logs
where :jobid is the job ID returned in the build request (i.e. ef0c7a10-31a5-4140-6087-df97c2bebcb2)
Response
{
"Logs": "Logs are returned as one string."
}
The logs catch the build logs and any errors returned from the docker host.