LINUX

Cómo compilar y ejecutar sus aplicaciones usando Docker Compose

Docker compose, anteriormente conocido como Fig, es una herramienta que puede definir y ejecutar aplicaciones complejas usando Docker. Básicamente hace el trabajo de crear múltiples contenedores y enlaces entre ellos.

El uso de Docker Compose requiere definir el entorno requerido para su aplicación usando un Dockerfile y los servicios requeridos para la aplicación en un archivo ‘.yml’. Luego, se puede usar un solo comando para crear e iniciar todos los servicios desde el archivo de configuración. En este artículo, aprenderemos cómo instalar y usar compose en Ubuntu 15.10. También hablaremos sobre cómo ejecutar su aplicación usándola.

Instalación

El requisito previo para instalar Docker Compose es Docker Engine. Si aún no ha instalado Docker Engine, estos son los pasos rápidos para el mismo:

$ sudo apt-get update

$ sudo apt-get install linux-image-extra-$(uname -r)

$ sudo apt-get install docker-engine

Para verificar si la instalación de Docker fue exitosa, ejecutemos un programa hello-world:

$sudo docker run hello-world
poornima@BNPTHKPD:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

.......

Ahora para instalar Compose, ejecute el siguiente comando curl en la terminal:

$ curl -L https://github.com/docker/compose/releases/download/1.7.0/docker-compose-`uname -s`-`uname -m`/usr/local/bin/docker-compose

Establecer permisos ejecutables para el binario

$ chmod +x /usr/local/bin/docker-compose

Verifique si la instalación está completa:

$docker compose --version
root@BNPTHKPD:/home/poornima# docker-compose --version
docker-compose version 1.7.0, build 0d7bf73

Comandos de composición de Docker

Antes de continuar y aprender a ejecutar sus aplicaciones usando Compose, permítame presentarle algunos de sus comandos importantes.

La sintaxis del comando docker-compose es

docker-compose [-f=...] [options] [commands] [args]

Uno puede verificar la versión de docker-compose usando:

docker-compose  -v, --version

Cuando se usa con el comando ‘ps’, enumera los contenedores disponibles

docker-compose ps

Puede crear e iniciar sus contenedores usando el comando ‘up’ y agregar la opción ‘-d’ ejecutará los contenedores en segundo plano

docker-compose up -d

A continuación se enumeran algunos comandos más que se pueden usar con docker-compose:

build -  to build services

pause / unpause  -  pause and unpause services

stop -  stop services

restart - restart services

rm  - remove stopped containers

logs - view output from containers

help - to get help on a command

Construyendo y ejecutando su aplicación

En esta sección, nos centraremos en crear una aplicación web Python simple y ejecutarla con Docker Compose.

Configuración

Primero creemos un directorio para nuestra aplicación.

poornima@BNPTHKPD:~$ mkdir dockcompose
poornima@BNPTHKPD:~$ cd dockcompose/

Ahora crearemos una aplicación web Hello World myapp.py usando el marco Flask en este directorio con el siguiente contenido:

from flask import Flask

app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World using Docker Compose'

if __name__ == '__main__':
app.run(debug=True,host="0.0.0.0")

Cree un archivo requirements.txt en el mismo directorio del proyecto que contenga lo siguiente:

Flask==0.10.1

En el siguiente paso, necesitamos crear una imagen de Docker que contenga todas las dependencias que necesita la aplicación Python.

Crear una imagen de Docker

Para esto, cree un archivo llamado Dockerfile nuevamente en el directorio del proyecto con el siguiente contenido:

FROM python:2.7

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

CMD python myapp.py

Este archivo le informa a Docker que cree una imagen usando Python 2.7, agregue el directorio ‘.’ en la ruta ‘/ code’ en la imagen, establezca el directorio de trabajo en / code, instale las dependencias de Python como se menciona en el archivo requirements.txt y establezca el comando predeterminado del contenedor en ‘python myapp.py’

Ahora construiremos la imagen.

$ docker build -t web .
poornima@BNPTHKPD:~/dockcompose$ sudo docker build -t web .
Sending build context to Docker daemon 5.632 kB
Step 1 : FROM python:2.7
---> a3b29970a425
Step 2 : ADD . /code
---> 855e1a126850
Removing intermediate container 2e713165c053
Step 3 : WORKDIR /code
---> Running in 431e3f52f421
---> 157b4cffd6df
Removing intermediate container 431e3f52f421
Step 4 : RUN pip install -r requirements.txt
---> Running in 07c294591a76
Collecting Flask==0.10.1 (from -r requirements.txt (line 1))
Downloading Flask-0.10.1.tar.gz (544kB)
Collecting Werkzeug>=0.7 (from Flask==0.10.1->-r requirements.txt (line 1))
Downloading Werkzeug-0.11.8-py2.py3-none-any.whl (306kB)
Collecting Jinja2>=2.4 (from Flask==0.10.1->-r requirements.txt (line 1))
Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
Collecting itsdangerous>=0.21 (from Flask==0.10.1->-r requirements.txt (line 1))
Downloading itsdangerous-0.24.tar.gz (46kB)
Collecting MarkupSafe (from Jinja2>=2.4->Flask==0.10.1->-r requirements.txt (line 1))
Downloading MarkupSafe-0.23.tar.gz
Building wheels for collected packages: Flask, itsdangerous, MarkupSafe
Running setup.py bdist_wheel for Flask: started
Running setup.py bdist_wheel for Flask: finished with status 'done'
Stored in directory: /root/.cache/pip/wheels/d2/db/61/cb9b80526b8f3ba89248ec0a29d6da1bb6013681c930fca987
Running setup.py bdist_wheel for itsdangerous: started
Running setup.py bdist_wheel for itsdangerous: finished with status 'done'
Stored in directory: /root/.cache/pip/wheels/97/c0/b8/b37c320ff57e15f993ba0ac98013eee778920b4a7b3ebae3cf
Running setup.py bdist_wheel for MarkupSafe: started
Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
Stored in directory: /root/.cache/pip/wheels/94/a7/79/f79a998b64c1281cb99fa9bbd33cfc9b8b5775f438218d17a7
Successfully built Flask itsdangerous MarkupSafe
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, Flask
Successfully installed Flask-0.10.1 Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.8 itsdangerous-0.24
---> 9ef07d3ed698
Removing intermediate container 07c294591a76
Step 5 : CMD python myapp.py
---> Running in ac5ce91ddc85
---> 65d218cbea14
Removing intermediate container ac5ce91ddc85
Successfully built 65d218cbea14
poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose up
Starting dockcompose_web_1
Attaching to dockcompose_web_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1 | * Restarting with stat
web_1 | * Debugger is active!
web_1 | * Debugger pin code: 151-559-328
web_1 | 172.17.0.1 - - [19/Apr/2016 08:17:43] "GET / HTTP/1.1" 200 -
web_1 | 172.17.0.1 - - [19/Apr/2016 08:17:43] "GET /favicon.ico HTTP/1.1" 404 -

Este comando puede ubicar automáticamente los archivos Dockerfile, requirements.txt y myapp.py requeridos y construye la imagen ‘web’ usándolos.

Archivos de servicios

Los diferentes servicios que se utilizarán en su aplicación deben reunirse en un archivo llamado docker-compose.yml. El archivo de servicio para nuestra aplicación Python HelloWorld tiene el siguiente aspecto:

web:
build: .
ports:
- "5000:5000"

El archivo anterior define el servicio web que se construye a partir del directorio actual y reenvía el puerto 5000 expuesto del contenedor al puerto 5000 en el host.

Ejecutando la aplicación

Ahora vayamos al directorio del proyecto y ejecutemos la aplicación:

$docker-compose up

Para ver la aplicación en ejecución, apunte su navegador web a lo siguiente:

http://0.0.0.0:5000

Así es como su navegador le muestra el mensaje:

Ejecutar una aplicación con Docker Compose

Más comandos

Probemos algunos comandos para ver cómo funcionan.

Nota: Todos los comandos de docker compose deben ejecutarse desde el directorio que contiene docker-compose.yml

Para ejecutar sus servicios en segundo plano, use la opción ‘-d’.

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose up -d
Starting dockcompose_web_1

Para listar todos los contenedores, use la opción ‘ps’.

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
dockcompose_web_ /bin/sh -c Up 0.0.0.0:5000->50
1 python myapp.py 00/tcp

Para ver las variables de entorno disponibles en el servicio configurado (en este caso, web), use la opción ‘env’.

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose run web env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=d5c2b9eeab7f
TERM=xterm
WEB_PORT=tcp://172.17.0.2:5000
WEB_PORT_5000_TCP=tcp://172.17.0.2:5000
WEB_PORT_5000_TCP_ADDR=172.17.0.2
WEB_PORT_5000_TCP_PORT=5000
WEB_PORT_5000_TCP_PROTO=tcp
WEB_NAME=/dockcompose_web_run_1/web
WEB_ENV_LANG=C.UTF-8
WEB_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEB_ENV_PYTHON_VERSION=2.7.11
WEB_ENV_PYTHON_PIP_VERSION=8.1.1
WEB_1_PORT=tcp://172.17.0.2:5000
WEB_1_PORT_5000_TCP=tcp://172.17.0.2:5000
WEB_1_PORT_5000_TCP_ADDR=172.17.0.2
WEB_1_PORT_5000_TCP_PORT=5000
WEB_1_PORT_5000_TCP_PROTO=tcp
WEB_1_NAME=/dockcompose_web_run_1/web_1
WEB_1_ENV_LANG=C.UTF-8
WEB_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEB_1_ENV_PYTHON_VERSION=2.7.11
WEB_1_ENV_PYTHON_PIP_VERSION=8.1.1
DOCKCOMPOSE_WEB_1_PORT=tcp://172.17.0.2:5000
DOCKCOMPOSE_WEB_1_PORT_5000_TCP=tcp://172.17.0.2:5000
DOCKCOMPOSE_WEB_1_PORT_5000_TCP_ADDR=172.17.0.2
DOCKCOMPOSE_WEB_1_PORT_5000_TCP_PORT=5000
DOCKCOMPOSE_WEB_1_PORT_5000_TCP_PROTO=tcp
DOCKCOMPOSE_WEB_1_NAME=/dockcompose_web_run_1/dockcompose_web_1
DOCKCOMPOSE_WEB_1_ENV_LANG=C.UTF-8
DOCKCOMPOSE_WEB_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
DOCKCOMPOSE_WEB_1_ENV_PYTHON_VERSION=2.7.11
DOCKCOMPOSE_WEB_1_ENV_PYTHON_PIP_VERSION=8.1.1
LANG=C.UTF-8
GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
PYTHON_VERSION=2.7.11
PYTHON_PIP_VERSION=8.1.1
HOME=/root

Para detener contenedores, use la opción ‘detener’:

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose stop
Stopping dockcompose_web_1 ... done

Puede pausarlos y reanudarlos usando la opción ‘pausar’ y ‘reanudar la pausa’.

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose pause
Pausing dockcompose_web_1 ... done

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
dockcompose_web_ /bin/sh -c Paused 0.0.0.0:5000->50
1 python myapp.py 00/tcp

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose unpause
Unpausing dockcompose_web_1 ... done

Utilice el comando ‘matar’ para detener todos los contenedores de una vez.

$ sudo docker-compose kill

Los registros de redacción se pueden revisar mediante el comando ‘log’.

$ sudo docker-compose logs

Si necesita ayuda para enumerar todos los comandos / opciones disponibles, use el comando de ayuda.

poornima@BNPTHKPD:~/dockcompose$ sudo docker-compose --help
Define and run multi-container applications with Docker.

Usage:
docker-compose [-f=...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help

Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
--verbose Show more output
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to

--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the name specified
in the client certificate (for example if your docker host
is an IP address)

Commands:
build Build or rebuild services
config Validate and view the compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pulls service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information

Conclusión

Docker Compose es una herramienta maravillosa para crear fácilmente una aplicación escalable y rica en funciones. Con sus capacidades y simplicidad, es bastante útil como herramienta de desarrollo. Para obtener más información sobre la herramienta y la creación de aplicaciones, visite su Página Oficial

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar