bookmark_borderComandos de docker

Los comandos y sus parametros que mas he usado, supongo que no son todos pero me dan una vision de lo que debo de hacer.

  • docker run <imagen>:[tag]
    • Descarga una imagen para crear un contenedor si la imagen no se encuentra en la lista, y adicionalmente ejecuta el contenedor con los parametros que has hayan indicado, por ejemplo,
    • –name nombre que se le va a dar al contenedor, en caso de no indicarse, se genera uno aleatorio.
    • -i. Modo interactivo al arrancar el contenedor.
    • –reset. on Se reinicia cuando caiga.
    • -t. Abre una terminal tty (TELEFONO DE TEXTO)
    • -d. Indica que se va a arrancar el contenedor y va a estar desatendido.
    • -e Declara una variable de sesión que va a estar definida en el contenedor.
    • –network Nombre de la red a la cual pertenece. Previamente debe de existir la red.
    • -p. Expone los puertos del contenedor al host del contendor.
    • -P. Expone todos los puertos que estan abiertos en el contedor. Es util cuando se levantan los servicios en random.
    • -v. Volumenes registrados en el contenedor y su mapeo en la maquina que hospeda.
  • docker build. construye una imagen
  • docker image
  • docker container
  • docker start [nombre del contenedor | id del contenedor ]
    • Inicia un contenedor.
  • docker stop [nombre del contenedor | id del contenedor ]
  • docker rm [nombre del contenedor | id del contenedor ]*
  • docker ps. Muestra todos los contenedores que se encuentran activos.
    • -a muestra todos los contenedores incluso los que no se encuentran ejecutandose.
  • docker push
  • docker inspect
  • docker network create
  • docker network rm
  • docker network attach

bookmark_borderInstalar keycloak en un contenedor docker

En este artículo vamos a describir como debe de instalarse un servidor keycloack en un contenedor docker y vamos a utilizar mariadb como repositorio de los datos de nuestro servidor, y explica las variables que puedes cambiar y como afectan.

Prerequisitos

Asegurate de tener instalado docker.

$ docker --version

Vamos a trabajar con la versión Docker CE 16.

Uso e instalación

Crea un recurso de red si lo vas a instalar en el mismo equipo, un contenedor para la base de datos y otro para el keycloak.

$ docker network create keycloak-network

Crea el contendor de la base de datos, para este caso yo voy a utilizar mariadb. Las variables que debes de cambiar cuando vas a crear el contenedor de mariadb para keycloak son:

  • MYSQL_ROOT_PASSWORD. Contraseña del root de mariadb.
  • MYSQL_DATABASE. Nombre de la base de datos donde se va a almacenar la información de keycloak.
  • MYSQL_USER. Nombre del usuario de base de datos con el cual se va a conectar el servidor de keycloak.
  • MYSQL_PASSWORD. Contraseña del usuario de base de datos, que va a utilizar el seridor de keycloak.
$ docker run -d 
   --name mariadb 
   --net keycloak-network 
   -e MYSQL_ROOT_PASSWORD=password 
   -e MYSQL_DATABASE=keycloak 
   -e MYSQL_USER=keycloak 
   -e MYSQL_PASSWORD=password mariadb

Ahora toca el turno para crear el contendor de keycloak, y que utilice la base de datos mariadb.

  • KEYCLOAK_USER. Es el administrador de keycloak y el primer usuario con el cual vas a ingresar.
  • KEYCLOAK_PASSWORD. La contraseña del administrador de keycloak.
  • DB_VENDOR. Debe de escribirse el nombre del manejador de base de datos en minusculas, ES MUY QUISQUILLOSO asi es que pon los nombres exactamente como te dice la documentación.
  • DB_USER. El nombre del usuario que creaste al crear el contenedor de mariadb, este es el que pusisten en la variable MYSQL_USER cuando creaste el contenedor de mariadb.
  • DB_PASSWORD. Es la contraseña del usuario de la base de datos, es lo que pusiste en la variable MYSQL_PASSWORD.
$ docker run -it -d 
   --name keycloak 
   --net keycloak-network 
   -p8080:8080 
   -e KEYCLOAK_USER=administrador 
   -e KEYCLOAK_PASSWORD=password 
   -e DB_VENDOR=mariadb 
   -e DB_USER=keycloak 
   -e DB_PASSWORD=password 
   jboss/keycloak

Y ahora solo queda probar que todo este correcto, abre un explorador de internet y navega a la url http://localhost:8080/auth.

Navega a la opción de Administration Console, y completa el formulario. Debes de utilizar el nombre del usuario (KEYCLOAK_USER) y contraseña (KEYCLOAK_PASSWORD) que pusiste para crear el contenedor de keycloak.

Observaciones importantes, si tu detienes el contenedor de keycloak con la sentencia

$ docker stop keycloak
$ docker start keycloak

Te va a marcar un error y no vas a poder volverlo a levantar. Primero debes destruirlo y volverlo a generar. Para destruir el contenedor de docker utiliza la sentencia.

$ docker rm keycloak

Como toda la configuración esta en tu contenedor de base de datos no tienes de que preocuparte.

bookmark_borderInstalacion de MONGODB con Docker

A continuación vamos a mostrar como estoy instalando mongodb en un contenedor docker.

Prerequisitos

  • AMD A4 8GB RAM y SSD 480
  • Ubuntu Desktop 20.04 LTS
  • Docker CE

Instalación

  • Baja la imagen 
$ docker pull mongo
  • Ten a la mano los siguientes datos que debes de poner para asegurar cuando levantes el servidor dentro del contenedor.
    1. ruta donde se va almacenar los datos.
    2. usuario y contraseña con el cual se va a generar el root del mongo.
    3. puerto en el cual se va a natear el contenedor al host.
  • Crea el contenedor con la imagen que acabas de bajar poniendo escribiendo los parámetros, en el archivo mongo.yml
$ cat > mongo-docker.yml
# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    container_name: docker-mongodb
    ports:
             - 27017:27017
    volumes:
             - /mnt/secondary/data/db:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: xxxxxx

$ chmod 777 mongo.yml
  • tambien puedes crear el contenedor con la imagen que acabas de bajar escribiendo los parámetros en la linea de comando
$ docker run --name docker-mongo 
-v /home/user/data/mongodb:/data/db 
-p 27017:27017 
-e MONGO_INITDB_ROOT_USERNAME=administrator 
-e MONGO_INITDB_ROOT_PASSWORD=XXXXX 
--restart always -d mongo
  • ahora si puedes conectarte desde el host del contenedor a mongodb, y ya estas listo para trabajar, con la siguiente sentencia.
$ mongo -u administrador -p xxxxx --authenticationDatabase admin
  • tambien puedes conectarte desde un equipo que no sea el host con la siguiente sentencia.
$ mongo --host xxx.xxx.xxx.xxx -u administrator -p xxxxxxx --authenticationDatabase admin

Cómo configurar un servidor para producción 

  • Las características que debe de tener un servidor de producción, 
    1. Debe estar cifrada la comunicación con ssl
    2. Debe de tener un administrator, con una contraseña fuerte
    3. Debes de tener un usuario por cada base de datos que crees en el servidor.
    4. Debe de tener un respaldo de la base de datos.
    5. Debes de tener configurado un esquema de recuperación del servidor.
  • Debes de cifrar la comunicación con ssl

  • Crea el usuario administrador de la base de datos.
$ mongo --host xxx.xxx.xxx.xxx -u administrator -p xxxxxxxxxx --authenticationDatabase admin
$ db.createUser(
 {
    user: "rrhh_dbo",
    pwd: "xxxxxx",
    roles: [ { role: "readWrite", db: "rrhh" } ]
  }
)