:orphan:


Creating Docker Images
======================

The Docker containers we recommend using for getting started (see
:doc:`Getting Started <../Getting-Started>` ) as a default gets its
configuration, app code to run and instructions what to run from the
respective repository in the starter repository.

You may want to package all of this into a new Docker image, so that you
can distribute everything necessary for deployment in one image.

Create new image with node directory embedded
---------------------------------------------

Say you have a Crossbar.io node directory with configuration, embedded
backend components and static Web assets:

.. code:: console

    ubuntu@ip-172-31-2-14:~/crossbar-examples/docker/disclose$ ls -la crossbar/
    total 20
    drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 25 22:00 .
    drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 25 22:14 ..
    -rw-rw-r-- 1 ubuntu ubuntu  151 Feb 25 21:25 backend.py
    drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 25 22:00 .crossbar
    -rw-rw-r-- 1 ubuntu ubuntu 3076 Feb 25 21:04 index.html
    ubuntu@ip-172-31-2-14:~/crossbar-examples/docker/disclose$ ls -la crossbar/.crossbar/
    total 12
    drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 25 22:00 .
    drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 25 22:00 ..
    -rw-rw-r-- 1 ubuntu ubuntu 1571 Feb 25 21:24 config.json

To bundle that into a Docker image, create a new ``Dockerfile``:

::

    FROM crossbario/crossbar

    # copy over our own node directory from the host into the image
    # set user "root" before copy and change owner afterwards
    USER root
    COPY ./crossbar /mynode
    RUN chown -R crossbar:crossbar /mynode

    ENTRYPOINT ["crossbar", "start", "--cbdir", "/mynode/.crossbar"]

Then do

.. code:: console

    sudo docker build -t myimage -f Dockerfile .

To start the image:

.. code:: console

    sudo docker run --rm -it -p 8080:8080 myimage
