mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Update links and host integration documentation
This commit is contained in:
parent
3362aaa4df
commit
a4d97a4e80
2 changed files with 57 additions and 117 deletions
|
@ -14,12 +14,16 @@ Building a redis container to link as a child of our web application.
|
||||||
Building the redis container
|
Building the redis container
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
We will use a pre-build version of redis from the index under
|
Lets build a redis image with the following Dockerfile.
|
||||||
the name ``crosbymichael/redis``. If you are interested in the
|
|
||||||
Dockerfile that was used to build this container here it is.
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
git clone https://github.com/antirez/redis.git
|
||||||
|
cd redis
|
||||||
|
git checkout 2.6
|
||||||
|
|
||||||
|
# Save this Dockerfile to the root of the redis repository.
|
||||||
|
|
||||||
# Build redis from source
|
# Build redis from source
|
||||||
# Make sure you have the redis source code checked out in
|
# Make sure you have the redis source code checked out in
|
||||||
# the same directory as this Dockerfile
|
# the same directory as this Dockerfile
|
||||||
|
@ -34,7 +38,6 @@ Dockerfile that was used to build this container here it is.
|
||||||
ADD . /redis
|
ADD . /redis
|
||||||
|
|
||||||
RUN (cd /redis && make)
|
RUN (cd /redis && make)
|
||||||
RUN (cd /redis && make test)
|
|
||||||
|
|
||||||
RUN mkdir -p /redis-data
|
RUN mkdir -p /redis-data
|
||||||
VOLUME ["/redis-data"]
|
VOLUME ["/redis-data"]
|
||||||
|
@ -43,6 +46,9 @@ Dockerfile that was used to build this container here it is.
|
||||||
ENTRYPOINT ["/redis/src/redis-server"]
|
ENTRYPOINT ["/redis/src/redis-server"]
|
||||||
CMD ["--dir", "/redis-data"]
|
CMD ["--dir", "/redis-data"]
|
||||||
|
|
||||||
|
# docker build our new redis image from source
|
||||||
|
docker build -t redis-2.6 .
|
||||||
|
|
||||||
|
|
||||||
We need to ``EXPOSE`` the default port of 6379 so that our link knows what ports
|
We need to ``EXPOSE`` the default port of 6379 so that our link knows what ports
|
||||||
to connect to our redis container on. If you do not expose any ports for the
|
to connect to our redis container on. If you do not expose any ports for the
|
||||||
|
@ -54,31 +60,28 @@ Run the redis container
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
docker run -d -e PASSWORD=docker -name redis crosbymichael/redis --requirepass=docker
|
docker run -d -e PASSWORD=docker -name redis redis-2.6 --requirepass docker
|
||||||
|
|
||||||
This will run our redis container using the default port of 6379 and using docker
|
This will run our redis container wit the password docker
|
||||||
as password to secure our service. By specifying the ``-name`` flag on run
|
to secure our service. By specifying the ``-name`` flag on run
|
||||||
we will assign the name ``redis`` to this container.
|
we will assign the name ``redis`` to this container. If we do not specify a name for
|
||||||
We can issue all the commands that you would expect; start, stop, attach, using the name.
|
our container via the ``-name`` flag docker will automatically generate a name for us.
|
||||||
The name also allows us to link other containers into this one. If you do not specify a
|
We can issue all the commands that you would expect; start, stop, attach, using the name for our container.
|
||||||
name on docker run, docker will automatically generate a name for your container.
|
The name also allows us to link other containers into this one.
|
||||||
|
|
||||||
Linking redis as a child
|
Linking redis as a child
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
Next we can start a new web application that has a dependency on redis and apply a link
|
Next we can start a new web application that has a dependency on redis and apply a link
|
||||||
to connect both containers. If you noticed when running our redis service we did not use
|
to connect both containers. If you noticed when running our redis server we did not use
|
||||||
the ``-p`` option to publish the redis port to the host system. Redis exposed port 6379
|
the ``-p`` flag to publish the redis port to the host system. Redis exposed port 6379 via the Dockerfile
|
||||||
but we did not publish the port. This allows docker to prevent all network traffic to
|
and this is all we need to establish a link.
|
||||||
the redis container except when explicitly specified within a link. This is a big win
|
|
||||||
for security.
|
|
||||||
|
|
||||||
|
|
||||||
Now lets start our web application with a link into redis.
|
Now lets start our web application with a link into redis.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
docker run -t -i -link /redis:db -name webapp ubuntu bash
|
docker run -t -i -link redis:db -name webapp ubuntu bash
|
||||||
|
|
||||||
root@4c01db0b339c:/# env
|
root@4c01db0b339c:/# env
|
||||||
|
|
||||||
|
@ -101,22 +104,25 @@ Now lets start our web application with a link into redis.
|
||||||
|
|
||||||
|
|
||||||
When we inspect the environment of the linked container we can see a few extra environment
|
When we inspect the environment of the linked container we can see a few extra environment
|
||||||
variables have been added. When you specified ``-link /redis:db`` you are telling docker
|
variables have been added. When you specified ``-link redis:db`` you are telling docker
|
||||||
to link the container named ``/redis`` into this new container with the alias ``db``.
|
to link the container named ``redis`` into this new container with the alias ``db``.
|
||||||
Environment variables are prefixed with the alias so that the parent container can access
|
Environment variables are prefixed with the alias so that the parent container can access
|
||||||
network and environment information from the child.
|
network and environment information from the containers that are linked into it.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# The name of the child container
|
# The name of the child container
|
||||||
DB_NAME=/webapp/db
|
DB_NAME=/webapp/db
|
||||||
|
|
||||||
# The default protocol, ip, and port of the service running in the container
|
# The default protocol, ip, and port of the service running in the container
|
||||||
DB_PORT=tcp://172.17.0.8:6379
|
DB_PORT=tcp://172.17.0.8:6379
|
||||||
|
|
||||||
# A specific protocol, ip, and port of various services
|
# A specific protocol, ip, and port of various services
|
||||||
DB_PORT_6379_TCP=tcp://172.17.0.8:6379
|
DB_PORT_6379_TCP=tcp://172.17.0.8:6379
|
||||||
DB_PORT_6379_TCP_PROTO=tcp
|
DB_PORT_6379_TCP_PROTO=tcp
|
||||||
DB_PORT_6379_TCP_ADDR=172.17.0.8
|
DB_PORT_6379_TCP_ADDR=172.17.0.8
|
||||||
DB_PORT_6379_TCP_PORT=6379
|
DB_PORT_6379_TCP_PORT=6379
|
||||||
|
|
||||||
# Get environment variables of the container
|
# Get environment variables of the container
|
||||||
DB_ENV_PASSWORD=dockerpass
|
DB_ENV_PASSWORD=dockerpass
|
||||||
|
|
||||||
|
|
|
@ -13,113 +13,47 @@ You can use your Docker containers with process managers like ``upstart``,
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
If you want a process manager to manage your containers you will need to run
|
||||||
|
the docker daemon with the ``-r=false`` so that docker will not automatically
|
||||||
|
restart your containers when the host is restarted.
|
||||||
|
|
||||||
When you have finished setting up your image and are happy with your
|
When you have finished setting up your image and are happy with your
|
||||||
running container, you may want to use a process manager to manage
|
running container, you may want to use a process manager to manage
|
||||||
it. To help with this, we provide a simple image: ``creack/manager:min``
|
it. When your run ``docker start -a`` docker will automatically attach
|
||||||
|
to the process and forward all signals so that the process manager can
|
||||||
|
detect when a container stops and correctly restart it.
|
||||||
|
|
||||||
This image takes the container ID as parameter. We also can specify
|
Here are a few sample scripts for systemd and upstart to integrate with docker.
|
||||||
the kind of process manager and metadata like *Author* and
|
|
||||||
*Description*. The output will will be text suitable for a
|
|
||||||
configuration file, echoed to stdout. It is up to you to create the
|
|
||||||
.conf file (for `upstart
|
|
||||||
<http://upstart.ubuntu.com/cookbook/#job-configuration-file>`_) or
|
|
||||||
.service file (for `systemd
|
|
||||||
<http://0pointer.de/public/systemd-man/systemd.service.html>`_) and
|
|
||||||
put it in the right place for your system.
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
Sample Upstart Script
|
||||||
|
---------------------
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
docker run creack/manager:min [OPTIONS] <container id>
|
description "Redis container"
|
||||||
|
author "Me"
|
||||||
|
start on filesystem and started lxc-net and started docker
|
||||||
|
stop on runlevel [!2345]
|
||||||
|
respawn
|
||||||
|
exec docker start -a 0a7e070b698b
|
||||||
|
|
||||||
.. program:: docker run creack/manager:min
|
|
||||||
|
|
||||||
.. cmdoption:: -a="<none>"
|
Sample systemd Script
|
||||||
|
---------------------
|
||||||
Author of the image
|
|
||||||
|
|
||||||
.. cmdoption:: -d="<none>"
|
|
||||||
|
|
||||||
Description of the image
|
|
||||||
|
|
||||||
.. cmdoption:: -t="upstart"
|
|
||||||
|
|
||||||
Type of manager requested: ``upstart`` or ``systemd``
|
|
||||||
|
|
||||||
Example Output
|
|
||||||
..............
|
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
docker run creack/manager:min -t="systemd" b28605f2f9a4
|
[Unit]
|
||||||
[Unit]
|
Description=Redis container
|
||||||
Description=<none>
|
Author=Me
|
||||||
Author=<none>
|
After=docker.service
|
||||||
After=docker.service
|
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Restart=always
|
Restart=always
|
||||||
ExecStart=/usr/bin/docker start -a b28605f2f9a4
|
ExecStart=/usr/bin/docker start -a 0a7e070b698b
|
||||||
ExecStop=/usr/bin/docker stop -t 2 b28605f2f9a4
|
ExecStop=/usr/bin/docker stop -t 2 0a7e070b698b
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=local.target
|
WantedBy=local.target
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Development
|
|
||||||
-----------
|
|
||||||
|
|
||||||
The image ``creack/manager:min`` is a ``busybox`` base with the
|
|
||||||
compiled binary of ``manager.go`` as the :ref:`Entrypoint
|
|
||||||
<entrypoint_def>`. It is meant to be light and fast to download.
|
|
||||||
|
|
||||||
If you would like to change or add things, you can download the full
|
|
||||||
``creack/manager`` repository that contains ``creack/manager:min`` and
|
|
||||||
``creack/manager:dev``.
|
|
||||||
|
|
||||||
The Dockerfiles and the sources are available in
|
|
||||||
`/contrib/host_integration
|
|
||||||
<https://github.com/dotcloud/docker/tree/master/contrib/host_integration>`_.
|
|
||||||
|
|
||||||
|
|
||||||
Upstart
|
|
||||||
-------
|
|
||||||
|
|
||||||
Upstart is the default process manager. The generated script will
|
|
||||||
start the container after the ``docker`` daemon. If the container
|
|
||||||
dies, it will respawn. Start/Restart/Stop/Reload are
|
|
||||||
supported. Reload will send a SIGHUP to the container.
|
|
||||||
|
|
||||||
Example (``upstart`` on Debian)
|
|
||||||
...............................
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
CID=$(docker run -d creack/firefo-vnc)
|
|
||||||
docker run creack/manager:min -a 'Guillaume J. Charmes <guillaume@dotcloud.com>' -d 'Awesome Firefox in VLC' $CID > /etc/init/firefoxvnc.conf
|
|
||||||
|
|
||||||
You can now ``start firefoxvnc`` or ``stop firefoxvnc`` and if the container
|
|
||||||
dies for some reason, upstart will restart it.
|
|
||||||
|
|
||||||
Systemd
|
|
||||||
-------
|
|
||||||
|
|
||||||
In order to generate a systemd script, we need to use the ``-t``
|
|
||||||
option. The generated script will start the container after docker
|
|
||||||
daemon. If the container dies, it will respawn.
|
|
||||||
``Start/Restart/Reload/Stop`` are supported.
|
|
||||||
|
|
||||||
Example (``systemd`` on Fedora)
|
|
||||||
...............................
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
CID=$(docker run -d creack/firefo-vnc)
|
|
||||||
docker run creack/manager:min -t systemd -a 'Guillaume J. Charmes <guillaume@dotcloud.com>' -d 'Awesome Firefox in VLC' $CID > /usr/lib/systemd/system/firefoxvnc.service
|
|
||||||
|
|
||||||
You can now run ``systemctl start firefoxvnc`` or ``systemctl stop
|
|
||||||
firefoxvnc`` and if the container dies for some reason, ``systemd``
|
|
||||||
will restart it.
|
|
||||||
|
|
Loading…
Reference in a new issue