Instalación de GitLab usando docker compose - nrubio02/engineering-demo GitHub Wiki

Basado en la guía oficial de GitLab:

https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose

Con apoyo del articulo:

https://www.ivankrizsan.se/2018/06/23/gitlab-ce-on-docker/

Empezamos creando un archivo en blanco:

$ nano docker-compose.yml

Este archivo es donde definiremos las caracteristicas de nuestros contenedores (variables de entorno, mapeo de puertos, entre otras cosas). Dentro de éste archivo colocaremos la definicion del contenedor de GitLab:

gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '81:80'
    - '443:443'
    - '122:22'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'

Dentro del archivo docker-compose.yml podemos resaltar las siguientes configuraciones:

  • image: este atributo indica la ruta del repositorio docker desde donde descargará la imagen para construir el contenedor (por defecto o buscará en Docker Hub (hub.docker.com)

  • environment: por medio de este atributo se le envian variables de entorno al contenedor, por lo general para facilitar configuraciones dentro de éste

  • ports: este atributo es utilizado para realizar mapeo de puertos del contenedor. En concepto es muy similar a realizar un port forwarding, ya que estamos indicando que puerto expondrá el contenedor a la maquina host, e internamente el contenedor hara un forwarding del puerto expuesto al puerto configurado en la aplicacion.

    El formato es el siguiente:

    - '<puerto_expuesto>:<puerto_aplicacion>'
    

    Para el caso del primer puerto expuesto en nuestro docker-compose.yml, tenemos '81:80', ésto significa que el puerto que el contenedor expondrá es el 81, y todas las peticiones que reciba por ese puerto las enviará a la aplicacion internamente por medio del puerto 80.

    La ventaja de éste mapeo es que podemos tener múltiples aplicaciones ejecutandose en un server, que por defecto podrían usar el mismo puerto como parte de su configuracion, sin tener que modificar dicha configuración de cada una de ellas (que podrian ser multiples archivos de texto), únicamente especificando el mapeo del contenedor en el docker-compose.yml

  • volumes: de manera similar al mapeo de puerto, desde aqui podemos mapear directorios que podrian ser utilizados por la aplicación en su configuración hacia directorios físicos en el host (ya que a diferencia de una VM, los contenedores docker no poseen su propio almacenamiento). El formato es:

    - '<directorio_en_host>:<directorio_aplicacion>'
    

Una vez tenemos nuestro docker-compose.yml listo, procedemos a ejecutar el siguiente comando (asumiento que nos encontramos dentro de la misma carpeta):

$ docker-compose up -d gitlab

Con éste comando indicamos que queremos levantar el servicio que se le indica al final del comando (en nuestro caso gitlab, que es como lo definimos en la primera linea de la definición del contenedor). El comando espera por defecto el archivo llamado docker-compose.yml. En caso nuestro archivo se llame de manera diferente, la forma de ejecutarlo sería con el flag -f:

$ docker-compose -f other-compose.yml up -d gitlab

Una vez veamos que nuestro contenedor está arriba (lo cual podemos verificar mediante el comando docker ps -a), entraremos a GitLab por primera vez utilizando la URL (En el ejemplo, test-vm es el hostname que asigné a mi máquina virtual. Reemplazar por el host o la IP donde están corriendo los contenedores):

http://test-vm:81

Y seremos recibidos por la página de configuracion inicial de GitLab! GitLab pedirá que establezcan el password. El usuario inicial es 'root'.