|
@@ -1,137 +0,0 @@
|
|
|
-:title: Linking to an Redis container
|
|
|
-:description: Running redis linked into your web app
|
|
|
-:keywords: docker, example, networking, redis, link
|
|
|
-
|
|
|
-.. _linking_redis:
|
|
|
-
|
|
|
-Linking Redis
|
|
|
-=============
|
|
|
-
|
|
|
-.. include:: example_header.inc
|
|
|
-
|
|
|
-Building a Redis container to link as a child of our web application.
|
|
|
-
|
|
|
-Building the Redis container
|
|
|
-----------------------------
|
|
|
-
|
|
|
-Lets build a Redis image with the following Dockerfile.
|
|
|
-
|
|
|
-First checkout the Redis source code.
|
|
|
-
|
|
|
-.. code-block:: bash
|
|
|
-
|
|
|
- git clone https://github.com/antirez/redis.git
|
|
|
- cd redis
|
|
|
- git checkout 2.6
|
|
|
-
|
|
|
-
|
|
|
-Now let's create a Dockerfile in the root of the Redis repository.
|
|
|
-
|
|
|
-.. code-block:: bash
|
|
|
-
|
|
|
- # Build redis from source
|
|
|
- # Make sure you have the redis source code checked out in
|
|
|
- # the same directory as this Dockerfile
|
|
|
- FROM ubuntu
|
|
|
-
|
|
|
- RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
|
|
|
- RUN apt-get update
|
|
|
- RUN apt-get upgrade -y
|
|
|
-
|
|
|
- RUN apt-get install -y gcc make g++ build-essential libc6-dev tcl
|
|
|
-
|
|
|
- ADD . /redis
|
|
|
-
|
|
|
- RUN (cd /redis && make)
|
|
|
-
|
|
|
- RUN mkdir -p /redis-data
|
|
|
- VOLUME ["/redis-data"]
|
|
|
- EXPOSE 6379
|
|
|
-
|
|
|
- ENTRYPOINT ["/redis/src/redis-server"]
|
|
|
- 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
|
|
|
-to connect to our Redis container on. If you do not expose any ports for the
|
|
|
-image then docker will not be able to establish the link between containers.
|
|
|
-
|
|
|
-
|
|
|
-Run the Redis container
|
|
|
------------------------
|
|
|
-
|
|
|
-.. code-block:: bash
|
|
|
-
|
|
|
- sudo docker run -d -e PASSWORD=docker -name redis redis-2.6 --requirepass docker
|
|
|
-
|
|
|
-This will run our Redis container with the password docker
|
|
|
-to secure our service. By specifying the ``-name`` flag on run
|
|
|
-we will assign the name ``redis`` to this container. If we do not specify a name for
|
|
|
-our container via the ``-name`` flag docker will automatically generate a name for us.
|
|
|
-We can issue all the commands that you would expect; start, stop, attach, using the name for our container.
|
|
|
-The name also allows us to link other containers into this one.
|
|
|
-
|
|
|
-Linking Redis as a child
|
|
|
-------------------------
|
|
|
-
|
|
|
-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 server we did not use
|
|
|
-the ``-p`` flag to publish the Redis port to the host system. Redis exposed port 6379 via the Dockerfile
|
|
|
-and this is all we need to establish a link.
|
|
|
-
|
|
|
-Now let's start our web application with a link into Redis.
|
|
|
-
|
|
|
-.. code-block:: bash
|
|
|
-
|
|
|
- sudo docker run -t -i -link redis:db -name webapp ubuntu bash
|
|
|
-
|
|
|
- root@4c01db0b339c:/# env
|
|
|
-
|
|
|
- HOSTNAME=4c01db0b339c
|
|
|
- DB_NAME=/webapp/db
|
|
|
- TERM=xterm
|
|
|
- DB_PORT=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_ADDR=172.17.0.8
|
|
|
- DB_PORT_6379_TCP_PORT=6379
|
|
|
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
- PWD=/
|
|
|
- DB_ENV_PASSWORD=docker
|
|
|
- SHLVL=1
|
|
|
- HOME=/
|
|
|
- container=lxc
|
|
|
- _=/usr/bin/env
|
|
|
- root@4c01db0b339c:/#
|
|
|
-
|
|
|
-
|
|
|
-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
|
|
|
-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
|
|
|
-network and environment information from the containers that are linked into it.
|
|
|
-
|
|
|
-.. code-block:: bash
|
|
|
-
|
|
|
- # The name of the child container
|
|
|
- DB_NAME=/webapp/db
|
|
|
-
|
|
|
- # The default protocol, ip, and port of the service running in the container
|
|
|
- DB_PORT=tcp://172.17.0.8:6379
|
|
|
-
|
|
|
- # A specific protocol, ip, and port of various services
|
|
|
- DB_PORT_6379_TCP=tcp://172.17.0.8:6379
|
|
|
- DB_PORT_6379_TCP_PROTO=tcp
|
|
|
- DB_PORT_6379_TCP_ADDR=172.17.0.8
|
|
|
- DB_PORT_6379_TCP_PORT=6379
|
|
|
-
|
|
|
- # Get environment variables of the container
|
|
|
- DB_ENV_PASSWORD=docker
|
|
|
-
|
|
|
-
|
|
|
-Accessing the network information along with the environment of the child container allows
|
|
|
-us to easily connect to the Redis service on the specific IP and port and use the password
|
|
|
-specified in the environment.
|