{ "info": { "author": "Mark Aikens", "author_email": "markadev@primeletters.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python", "Topic :: System :: Installation/Setup", "Topic :: Utilities" ], "description": "========\ndockalot\n========\n\n*Building Docker images for the real world*\n\n|build-status| |docs|\n\nIntroduction\n============\n\n``dockalot`` is a tool to build Docker images using Ansible playbooks for\napplication and configuration installation. It addresses several shortcomings\nwith the default Docker toolkit to make building non-trivial images easier.\n\nUsing a Dockerfile is fine if you are repackaging an open source or other\npublicly available package. But if you aren't, you might have one or more\nof these problems:\n\n* Building your image requires credentials to a private source code or\n package repository\n* Building your image requires a custom package installation procedure more\n complicated than ``apt-get install``\n\nBecause of the way ``docker build`` works by building your image in layers\non top of layers, you may find that your super-secret private repository\ncredentials gets trapped in one of those layers. Go ahead, export an image\nusing ``docker save`` and poke around the layers of an image you've already\nbuilt. Is that *your* access token in there? Well, it's everyone's access\ntoken now...\n\nTemporary files part of any non-trivial package installation also get\ntrapped in those middle layers causing your final Docker image to be much\nlarger than they need to be. Workarounds for this problem include ``&&``-itis;\njoining dozens of shell commands together with ``&&`` in an attempt to keep\nthem all on the same layer. When you do this you lose the ability to add\ncomments in-line and your Dockerfile becomes a mess.\n\nIt doesn't have to be this way.\n\n``dockalot`` solves these problems by executing all of the installation\ncommands in one Docker layer. There are no hidden layers for credentials or\ntemporary files to hide in. You can focus on just installing software into\nyour Docker image using high-level Ansible modules and let the tools handle\nthe low-level details.\n\n\nFeatures\n========\n\n- Build smaller images without having to think about Docker layers.\n- Pass your API keys into the build process and don't worry about them\n getting stuck in any hidden Docker layers.\n- Take advantage of purpose-built `Ansible modules\n `_. Never\n run ``sed`` again!\n- Use variables and templates in Ansible instead of clunky environment\n variables.\n- Support for most of the important Dockerfile commands. Goal is to\n have feature-parity with Dockerfiles.\n\n\nInstallation\n============\n\nRequirements:\n * Python 2.7\n * Docker >= 1.12\n\nInstall ``dockalot`` using *pip*::\n\n ubuntu@ubuntu-vm:~$ sudo pip install dockalot\n\nOr, to install without root access you can use a\n`virtual environment `_::\n\n ubuntu@ubuntu-vm:~$ mkvirtualenv dockalot\n ubuntu@ubuntu-vm:~$ . dockalot/bin/activate\n (dockalot) ubuntu@ubuntu-vm:~$ pip install dockalot\n\n\nExample Usage\n=============\n\nA simple configuration file (``example1.yml``) to build an image looks like\nthis::\n\n ---\n docker:\n base_image: \"python:2.7\"\n entrypoint: [ \"/entrypoint.py\" ]\n tags:\n - myapp\n ---\n - name: Provision the container\n hosts: all\n tasks:\n - name: Install the thing\n copy: \n dest: /entrypoint.py\n content: |\n #!/usr/bin/env python\n print(\"I'm a Python script\")\n print(\"Wheeeeee!!!!\")\n mode: 0755\n\nBuild the image::\n\n ubuntu@ubuntu-vm:~$ dockalot example1.yml \n INFO:Creating the container to provision\n ...\n INFO:Committing the image\n INFO:Created sha256:662a2be8c1215de09fc410f2c5c7fb2e8b6ed00b125c4cd27fe8a28972f8542c\n INFO:Tagging image myapp:latest\n ubuntu@ubuntu-vm:~$\n\nThen run your shiny new image::\n\n ubuntu@ubuntu-vm:~$ docker run myapp\n I'm a Python script\n Wheeeeee!!!!\n ubuntu@ubuntu-vm:~$\n\nAlso take a look at some more `complex examples\n`_.\n\n\nLicense\n=======\n\nThe project is licensed under the MIT license.\n\n\n.. |docs| image:: https://readthedocs.org/projects/dockalot/badge/?version=latest\n :alt: Documentation Status\n :scale: 100%\n :target: https://dockalot.readthedocs.io/en/latest/?badge=latest\n\n.. |build-status| image:: https://travis-ci.org/markadev/dockalot.svg?branch=master\n :alt: build status\n :target: https://travis-ci.org/markadev/dockalot", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/markadev/dockalot", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "dockalot", "package_url": "https://pypi.org/project/dockalot/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dockalot/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/markadev/dockalot" }, "release_url": "https://pypi.org/project/dockalot/0.7.1/", "requires_dist": null, "requires_python": null, "summary": "Build Docker images for the real world using ansible playbooks", "version": "0.7.1" }, "last_serial": 2560747, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "8accd34e6181df73d499ab3ef8bbcc12", "sha256": "a4eec351173e0e7ea323a6cdeb1351c481ccb898379094b1c730bd511dc23e66" }, "downloads": -1, "filename": "dockalot-0.5.0.tar.gz", "has_sig": false, "md5_digest": "8accd34e6181df73d499ab3ef8bbcc12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15910, "upload_time": "2016-10-09T21:09:17", "url": "https://files.pythonhosted.org/packages/c9/ae/a990e672466c32d2aa2bb0c147e1a99a5c277edd875d616251e2428c14cc/dockalot-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "e3e687f508ca4930ba240e9e1bc81830", "sha256": "07ab4b1f1ecad1e8b813fa998f6044e0a4d4099d5dad5b70f79f364dd9da5dd6" }, "downloads": -1, "filename": "dockalot-0.6.0.tar.gz", "has_sig": false, "md5_digest": "e3e687f508ca4930ba240e9e1bc81830", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24903, "upload_time": "2016-10-23T19:21:19", "url": "https://files.pythonhosted.org/packages/9e/f6/8b186c2ef908f42aa9eaddede869df577918afb6a39fd279ecaae6c5dc4e/dockalot-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "33df1454220956377df8ef0b7e96c685", "sha256": "d9ebe58aae28364888aabe57239213ff268f44d32164f78c040abc94c026e1db" }, "downloads": -1, "filename": "dockalot-0.7.0.tar.gz", "has_sig": false, "md5_digest": "33df1454220956377df8ef0b7e96c685", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25720, "upload_time": "2016-10-28T00:54:40", "url": "https://files.pythonhosted.org/packages/02/1b/ffbab6b53827a760be6f9c64bcea73273a3d0152badd3e1cd3af6983ee4b/dockalot-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "e23f76c38383ec407fc473a694331a97", "sha256": "59bfacabd69a5814e0e6dfce561c9969a2bfe969f369dbddb102a33f6570954b" }, "downloads": -1, "filename": "dockalot-0.7.1.tar.gz", "has_sig": false, "md5_digest": "e23f76c38383ec407fc473a694331a97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25797, "upload_time": "2017-01-08T15:36:37", "url": "https://files.pythonhosted.org/packages/55/2f/e5c468b7ff347782e931406d647997a3a23707f90e0bf1ae14334eb9bd89/dockalot-0.7.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e23f76c38383ec407fc473a694331a97", "sha256": "59bfacabd69a5814e0e6dfce561c9969a2bfe969f369dbddb102a33f6570954b" }, "downloads": -1, "filename": "dockalot-0.7.1.tar.gz", "has_sig": false, "md5_digest": "e23f76c38383ec407fc473a694331a97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25797, "upload_time": "2017-01-08T15:36:37", "url": "https://files.pythonhosted.org/packages/55/2f/e5c468b7ff347782e931406d647997a3a23707f90e0bf1ae14334eb9bd89/dockalot-0.7.1.tar.gz" } ] }