Docker Advanced registry usage

  • Published on

  • View

  • Download

Embed Size (px)


Docker Advanced registry usage by Joffrey Fuhrer at the Docker Freiburg meetup #1


<ul><li> 1. Docker: Advanced registry usage September 17th, 2014 in Freiburg </li> <li> 2. Contents 1. Whats a registry? 2. Advanced configuration a. Search index b. Mirroring c. Adding a redis cache d. More! 3. Extending the code </li> <li> 3. Whats a registry? Storage component for docker images Open-source python app docker/docker-registry on github Current stable version: 0.8.1 Available as an official image docker run -d -p 5000:5000 registry:0.8.1 </li> <li> 4. Whats a registry? Several storage backends supported Filesystem Boto (S3, Google Compute, ...) OpenStack Swift </li> <li> 5. Advanced configuration The registry image is great for quick setup and testing, but we can make it even better with some tinkering! Enabling search Mirroring another registry (even the official one!) Adding a redis cache And more! </li> <li> 6. Search index Enabling a basic search index is easy! docker run -d -p 5000:5000 -e SEARCH_BACKEND=sqlalchemy registry:0.8.1 </li> <li> 7. Search index Lets put our SQLite database in a volume. docker run -d -p 5000:5000 -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////opt/sqlitedb/reg.db -v /opt/sqlitedb:/opt/sqlitedb registry:0.8.1 </li> <li> 8. Search index Also, we want to keep our image store persistent across restarts! docker run -d -p 5000:5000 -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////opt/sqlitedb/reg.db -e STORAGE_PATH=/opt/registry -v /opt/registry/storage:/opt/registry -v /opt/sqlitedb:/opt/sqlitedb registry:0.8.1 </li> <li> 9. Search index This is quite a mouthful... Lets make a Dockerfile instead. $ docker build -t myregistry . $ docker run -d -p 5000:5000 -v /opt/registry/storage:/opt/registry -v /opt/registry/index:/opt/sqlitedb myregistry Thats better! </li> <li> 10. Search index Dont like SQLite? Thats fine too! </li> <li> 11. Mirroring Having a local copy of commonly used images can be very helpful! </li> <li> 12. Mirroring Standard method: $ docker pull busybox:latest $ docker tag busybox:latest myregistry. com/busybox:latest $ docker push $ docker pull busybox:buildroot-2014.02 ... </li> <li> 13. Mirroring Better method: Enable mirroring on your registry! ENV MIRROR_SOURCE ENV MIRROR_SOURCE_INDEX </li> <li> 14. Mirroring On the first pull, immutable data (metadata, layers, image ancestry) is stored locally on the mirror. The source is always contacted to retrieve mutable data (list of tags, mappings)... ... unless you enable the redis cache, then tag data is kept for some time. Set MIRROR_TAGS_CACHE_TTL accordingly! </li> <li> 15. Adding a redis cache First lets start up a redis container. $ docker run --name rediscache -d redis:2.8.13 Then were going to edit config/config_sample.yml cache: host: _env:REDISCACHE_PORT_6379_TCP_ADDR port: _env:REDISCACHE_PORT_6379_TCP_PORT db: 0 cache_lru: host: _env:REDISCACHE_PORT_6379_TCP_ADDR port: _env:REDISCACHE_PORT_6379_TCP_PORT db: 1 </li> <li> 16. Adding a redis cache Copy the config_sample.yml file where our Dockerfile from before is. Add the following line to our Dockerfile: ADD ./config_sample.yml /docker-registry/ config/config_sample.yml Create a link with our rediscache container when starting up the registry docker run -d -p 5000:5000 --link rediscache:rediscache -v /opt/registry/storage:/opt/registry -v /opt/registry/index:/opt/sqlitedb myregistry </li> <li> 17. Adding a redis cache Create a link with our rediscache container when starting up the registry docker run -d -p 5000:5000 --link rediscache:rediscache -v /opt/registry/storage:/opt/registry -v /opt/registry/index:/opt/sqlitedb myregistry All set! </li> <li> 18. More configuration! Use an nginx or Apache frontend to enforce basic auth. You can then do: docker login Only works over HTTPS! Enable e-mail notifications when an exception is encountered See the email_notifications section of the configuration </li> <li> 19. Extending the code Youll need time and some Python proficiency. But for advanced usage, it can be worth it! If you make something cool, think about giving back to the community! We accept pull requests. </li> <li> 20. Extending the code You can implement a new storage driver by inheriting docker_registry.core.driver.Base Leverage the signals API in docker_registry.lib.signals Implement a new search backend by inheriting docker_registry.lib.index.Index Other ideas? Talk to us, let us know if we can help! </li> <li> 21. Code: DockerHub: Contact me: Twitter @j0ffrey GitHub @shin- E-mail THANK YOU! Resources </li> </ul>