Overview

Skill Level: Beginner

Mediante un tutorial paso por paso crearemos una imagen Docker de una aplicación Node js para posteriormente hacerle push a el Container Registry de IBM Cloud #DevelopersIBMmx

Ingredients

·       Cuenta de IBM Cloud Activa (https://console.bluemix.net)

·       Editor de código(https://code.visualstudio.com/download)

·       Node.Js(https://nodejs.org/en)

·       Bx CLI (https://console.bluemix.net/docs/cli/reference/bluemix_cli/download_cli.html)

·       Docker(https://docs.docker.com/install/)

·       Aplicacion Node.Js (https://github.com/isaaccarrada/kubernetes_docker_recipe) NOTA: los archivos que vamos a crear están dentro de la carpeta Docker

Step-by-step

  1. Login a IBM Cloud desde CLI

    Para hacer un login desde la línea de comandos a IBM cloud debemos ingresar el comando: cf login

    Una vez ejecutado este comando la línea de comandos regresará un prompt similar a este en el cual debemos ingresar nuestra cuenta y usuario:

     

    $ cf login
    API endpoint: https://api.ng.bluemix.net
    Username> [enter your IBM ID here]Password> [enter your IBM ID password here]Authenticating...
    OK 

     

    Posteriormente nos pedir√° que elijamos nuestra ‚Äúorg‚ÄĚ y ‚Äúspace‚ÄĚ (los defaults son nuestro userID de IBM y dev). Una vez terminado deber√≠a imprimir lo siguiente:

     

    API endpoint: https://api.ng.bluemix.net (API version: 2.0.0)
    User: [your IBM ID]Org: [your IBM ID]Space: dev

     

  2. Crear un namespace

    Para poder subir imágenes a nuestro IBM Cloud Container Registry primero necesitamos crear un namespace con el siguiente comando:

    $ bx cr namespace-add <my_namespace>
  3. Crear imagen de la aplicación

    Dentro del directorio de la aplicación node que bajamos o clonamos creamos un archivo llamado Dockerfile. En este archivo escribir los siguientes campos:

    FROM node:latest
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
    COPY package.json /usr/src/app/
    RUN npm install
    RUN npm i -s nodemon
    COPY . /usr/src/app
    EXPOSE 3000
    ENV PORT=3000
    ENV MONGO_SERVICE_HOST=mongo
    ENV MONGO_SERVICE_PORT=27017
    CMD [ "npm", "start" ]

     

    Notas importantes respecto al archivo:

    • El puerto en el que configuramos el EXPOSE es el que utilizaremos para accesar a la app una vez que est√© corriendo (tomar nota de que este mismo puerto es el que utilizaremos en la parte 2 del tutorial para hacer el deployment en k8s)
    • De igual forma la variable de ambiente que estamos configurando ponemos el nombre de la imagen de la base de datos (ENV MONGO_SERVICE_HOST=mongo)

    También crearemos un archivo .dockerignore con este contenido:

    node_modules
    npm-debug.log

    Esto es para que al hacer la imagen no incluya la carpeta node_modules dado que al correr npm install los instalar√°, posteriormente creamos la imagen Docker, utilizamos el tag (-t) para la imagen:

    $ docker build --tag registry.ng.bluemix.net/<my_namespace>/my-emp .

    Nota: recordar el punto despues del nombre de la imagen

    Verificamos si la imagen fue creada:

    $ docker images
  4. Push a un container registry

    Ya que creamos nuestra imagen hacemos un push con nuestro tag:

    $ docker push registry.ng.bluemix.net/<namespace>/my-emp

    Para poder acceder a la interfaz gr√°fica de nuestro registry lo necesitamos crear en:

    https://console.bluemix.net/containers-kubernetes/registry/private

    Para hacer deploy de esta aplicación en un pod de Kubernetes y una base de datos mongo en otro pod usar el siguiente tutorial: https://developer.ibm.com/recipes/tutorials/kubernetes-conexion-y-deployment-de-nodejsmongodb-en-pods-diferentes-parte-2/

     

    (Basado en el tutorial https://developer.ibm.com/recipes/tutorials/kubernetes-how-to-run-a-node-js-application-which-accesses-mongo-database-where-both-are-running-in-containers-in-different-pods)

Join The Discussion