Sign inSign up

lmmartin/full-preving-bootstrap

By lmmartin

•Updated about 7 years ago

Contenedor generado a partir de aplicación Ruby+Node compilada en un contenedor y publicada en otro.

Image
0

10K+

lmmartin/full-preving-bootstrap repository overview

⁠Full Preving Bootstrap

Ejemplo de desarrollo y dockerizado de una aplicación Node + Ruby. La aplicación se construye y compila en un contenedor y se copia para servirse en otro (un servidor NGINX).

⁠¿Qué contiene esta imagen?

Preving Boostrap es el compendio de guía de estilos, biblioteca de componentes HTML+CSS+JS y patrones de diseño front-end para las aplicaciones de Grupo Preving⁠.

Se ha utilizado una imagen de NGINX (https://hub.docker.com/_/nginx⁠), un servidor web ligero, para "servir" la app dockerizada.

Previamente, se ha copiado y compilado la aplicación en un contenedor generado con una Imagen de Alpine + Ruby + NodeJS/NPM/Yarn https://hub.docker.com/r/scardon/ruby-node-alpine/⁠

⁠Creación de archivo Dockerfile

El archivo Dockerfile es el siguiente:

# Empleamos una imagen de Alpine con Ruby y Node ya instalados.
# Le asignamos el alias 'builder' para poder al contenedor desde otro.
FROM scardon/ruby-node-alpine:2.6.1 AS builder

# Directorio de trabajo.
WORKDIR /app

# Copiamos desde el directorio de la applicación en el que nos encotramos (lo que no queramos copiar estará detallado en el fichero .dockerignore)
COPY . .

# Copiamos el archivo de configuración para la compilación
ADD _config-docker.yml _config.yml

# Instalamos las herramientas de compilación básicas en Alpine.
RUN apk update && \
apk add build-base

# Instalamos modulos de Node necesarios.
RUN npm install

# Instalamos las gemas 'eventmachine', 'bundler', lanzamos las dependiencias y actualizamos las gemas.
RUN gem install eventmachine -v '1.2.7' --source 'https://rubygems.org/' && \
gem install bundler --force && \
bundle install && \
bundle update && \
gem update

# Creamos el compilado de la distribución de Bootstrap y la compilación de documentos de la guía
RUN npm run dist && \
npm run docs

# Descargamos la imagen de NGINX sobre Alpine
FROM nginx:alpine

EXPOSE 80

# Copiamos el archivo de configuración de NGINX desde local
COPY ./nginx.conf /etc/nginx/nginx.conf

# Copiamos todo el contenido de la app, ya compilada, al servidor NGINX.
 COPY --from=builder /app/_docker/ /usr/share/nginx/html/

⁠Configuración optima de NGINX

Se ha configurado la imagen para generar un contenedor liviano y ultra ligero. El archivo nginx.conf es el siguiente:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include mime.types; # Para que coja correctamente los CSS
    sendfile on;
    server {
        listen 80;
        server_name styleguide.com; # Da igual

	    # Directorio / del servidor
        root   /usr/share/nginx/html;
        
        # Compresión GZIP te todo el código
        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    }
}

⁠Puesta en marcha de la imagen

  • Instalar Docker.

  • Descargar la imagen: docker pull lmmartin/full-preving-bootstrap

  • Lanzar el contenedor por primera vez: docker run --rm -d -p 8888:80 --name styleguide lmmartin/full-preving-bootstrap:latest

  • Acceder al contenedor a través de http://192.168.99.100:8888/⁠.

  • Para el el contenedor: docker stop styleguide

  • Lanzar el contenedor de nuevo: docker start styleguide

NOTAS:

  1. Si usamos el modificador --rm durante la primera ejecución del contenedor este se borrará automáticamente en cuanto lo paremos (docker stop styleguide), por lo que habría que volver a lanzarlo con un docker run la siguiente vez. En caso de no incluirlo, podremos guardar su estado y lanzarlo de nuevo mediante un docker start.

Tag summary

Content type

Image

Digest

Size

13.8 MB

Last updated

about 7 years ago

docker pull lmmartin/full-preving-bootstrap