159 lines
4.8 KiB
Markdown
159 lines
4.8 KiB
Markdown
# quay
|
|
|
|
![Docker Repository on Quay](https://quay.io/repository/quay/quay/status?token=7bffbc13-8bb0-4fb4-8a70-684a0cf485d3 "Docker Repository on Quay")
|
|
|
|
**Note**: The `master` branch may be in an *unstable or even broken state* during development.
|
|
Please use [releases] instead of the `master` branch in order to get stable binaries.
|
|
|
|
![Quay Logo](static/img/quay_preview.png)
|
|
|
|
Quay is project to build, store, and distribute container images.
|
|
|
|
High-level features include:
|
|
|
|
- Docker Registry Protocol [v1], [v2.1]
|
|
- [AppC Image Discovery]
|
|
- Authentication provided by [LDAP], [Keystone], [Dex], [Google], [GitHub]
|
|
- ACLs, team management, and auditability logs
|
|
- Geo-replicated storage provided by local filesystems, [S3], [GCS], [Swift], [Ceph]
|
|
- Continuous Integration integrated with [GitHub], [Bitbucket], [GitLab], and [git]
|
|
- Security Vulnerability Analysis via [Clair]
|
|
- [Swagger]-compliant HTTP API
|
|
|
|
[releases]: https://github.com/coreos-inc/quay/releases
|
|
[v1]: https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-1.md
|
|
[v2.1]: https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md
|
|
[AppC Image Discovery]: https://github.com/appc/spec/blob/master/spec/discovery.md
|
|
[LDAP]: https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
|
|
[Keystone]: http://docs.openstack.org/developer/keystone
|
|
[Dex]: https://github.com/coreos/dex
|
|
[Google]: https://developers.google.com/identity/sign-in/web/sign-in
|
|
[GitHub]: https://developer.github.com/v3/oauth
|
|
[S3]: https://aws.amazon.com/s3
|
|
[GCS]: https://cloud.google.com/storage
|
|
[Swift]: http://swift.openstack.org
|
|
[Ceph]: http://docs.ceph.com/docs/master/radosgw/config
|
|
[GitHub]: https://github.com
|
|
[Bitbucket]: https://bitbucket.com
|
|
[GitLab]: https://gitlab.com
|
|
[git]: https://git-scm.com
|
|
[Clair]: https://github.com/coreos/clair
|
|
[Swagger]: http://swagger.io
|
|
|
|
## Getting Started
|
|
|
|
### macOS
|
|
|
|
macOS developers will need:
|
|
|
|
* [command line tools] or [xcode]
|
|
* [brew]
|
|
* [Docker For Mac] or [Docker Machine]
|
|
* [pyenv] with [pyenv-virtualenv]
|
|
|
|
[command line tools]: https://developer.apple.com/downloads
|
|
[xcode]: https://developer.apple.com/downloads
|
|
[brew]: https://github.com/Homebrew/brew
|
|
[Docker For Mac]: https://beta.docker.com/docs/mac/getting-started://beta.docker.com/docs/mac/getting-started
|
|
[Docker Machine]: https://docs.docker.com/machine/install-machine://docs.docker.com/machine/install-machine
|
|
[pyenv]: https://github.com/yyuu/pyenv
|
|
[pyenv-virtualenv]: https://github.com/yyuu/pyenv-virtualenv
|
|
|
|
```
|
|
# Download the code
|
|
git clone git@github.com:coreos-inc/quay.git && cd quay
|
|
|
|
# Install the system dependencies
|
|
brew install libevent libmagic postgresql gpgme
|
|
|
|
# Some installs don't have /usr/include, required for finding SASL header files
|
|
if [ ! -e /usr/include ]; then sudo ln -s `xcrun --show-sdk-path`/usr/include /usr/include; fi
|
|
|
|
# Install the Python dependencies
|
|
pyenv virtualenv 2.7.11 quay
|
|
pyenv activate quay
|
|
pip install -r requirements.txt
|
|
pip install -r requirements-dev.txt
|
|
|
|
# Setup a local config
|
|
git clone git@github.com:coreos-inc/quay-config.git ../quay-config
|
|
ln -s ../../quay-config/local conf/stack
|
|
```
|
|
|
|
#### clang errors
|
|
|
|
Some packages may fail to build with clang (which now defaults to C11).
|
|
|
|
They can be installed with C99 with:
|
|
|
|
```
|
|
CFLAGS='-std=c99' pip install --no-cache --no-binary :all: gevent
|
|
CFLAGS='-std=c99' pip install --no-cache --no-binary :all: cffi
|
|
CFLAGS='-std=c99' pip install --no-cache --no-binary :all: cryptography
|
|
```
|
|
|
|
### Linux
|
|
|
|
TODO
|
|
|
|
## Running and Testing
|
|
|
|
### Test Data
|
|
|
|
A SQLite database full of test data is committed to this git repository at `test/data/test.db`.
|
|
This database is generated by executing `python initdb.py`.
|
|
The username and password of the admin test account is `devtable` and `password`, respectively.
|
|
|
|
### Local Scripts
|
|
|
|
* `local-run` runs the web server for testing
|
|
* `local-test` runs the unit test suite
|
|
|
|
### Development inside Docker
|
|
|
|
To build and run a development container, pass one argument to local-docker.sh:
|
|
|
|
- `buildman`: run the buildmanager
|
|
- `dev`: run web server on port 5000
|
|
- `initdb`: clear and initialize the test database
|
|
- `notifications`: run the notification worker
|
|
- `test`: run the unit test suite
|
|
|
|
### Adding a Python Dependency
|
|
|
|
```
|
|
# Create a new virtualenv and activate it
|
|
pyenv virtualenv 2.7.11 quay-deps
|
|
pyenv activate quay-deps
|
|
|
|
# Install unversioned dependencies with your changes
|
|
pip install -r requirements-nover.txt
|
|
|
|
# Run the unit test suite
|
|
./local-test.sh
|
|
|
|
# Freeze the versions of all of the dependencies
|
|
pip freeze > requirements.txt
|
|
```
|
|
|
|
### Running the Build System
|
|
|
|
TODO
|
|
|
|
```
|
|
# Run an instance of redis
|
|
docker run -d -p 6379:6379 quay.io/quay/redis
|
|
```
|
|
|
|
## Documentation
|
|
|
|
* [Quay Enterprise Documentation](https://tectonic.com/quay-enterprise/docs/latest)
|
|
* [Quay.io Documentation](https://docs.quay.io)
|
|
|
|
### Architecture at a Glance
|
|
|
|
TODO
|
|
|
|
### Terminology
|
|
|
|
TODO
|