Ir al contenido principal

Dockerizando una aplicación React

 Docker es una plataforma abierta que nos permite empaquetar y ejecutar una aplicación en una unidad de software llamado contenedor. 

En este post vamos a aprender como dockerizar una aplicación Reactjs utilizando docker-compose, que es una herramienta para definir y ejecutar aplicaciones multi-contenedores. Con Compose, configuras tu aplicación en un archivo YAML y con un solo comando, se crean e inician todos los contenedores que necesita tu aplicación.

Los pasos a seguir son:
1) Creamos el fichero Dockerfile:
FROM node
WORKDIR /usr/src/app
2) Creamos el fichero docker-compose.yml:
version: '3'
services:
  react-app:
    container_name: react_app
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - NODE_ENV=development
    volumes:
      - ./:/usr/src/app
    command: sh -c 'yarn && yarn start'
    ports:
      - "3000:3000"
    tty: true
3) En un terminal, en el directorio donde hemos creado los dos ficheros, ejecutamos:
docker-compose up

Este comando crea y ejecuta los contenedores que hayas definido en el fichero docker-compose.yml. Sabrás que ha terminado de ejecutarse cuando veas:

Compiled successfully!

react_1  | 

react_1  | You can now view myapp in the browser.

react_1  | 

react_1  |   Local:            http://localhost:3000

react_1  |   On Your Network:  http://172.24.0.2:3000

react_1  | 

react_1  | Note that the development build is not optimized.

react_1  | To create a production build, use yarn build.

react_1  | 

Y voilá! Nuestra aplicación se estará ejecutando localmente en http://localhost:3000

Bonus Track:
Si todavía no tenéis vuestra aplicación React, podéis generarla ejecutando, en el mismo directorio dónde tenéis los ficheros Docker, lo siguiente:
docker-compose run --rm react sh -c 'npx create-react-app myapp --template typescript'

De momento, create-react-app no permite generar la aplicación en el directorio actual si el directorio no está vacío. Como nuestro directorio tiene ya nuestros dos ficheros, tenemos que generar la aplicación en un subdirectorio. Mientras que no arreglen este problema, tendríamos que copiar los dos ficheros dentro de la aplicación que se ha generado y listo ;)

Comentarios

Entradas populares de este blog

Leer un fichero properties con java.util.Properties

Los ficheros .properties son simples ficheros de texto que se suelen utilizar para guardar parámetros de configuración, en forma de pares clave-valor. Ejemplo de fichero: configuration.properties #User parameters user.name=Ana user.language=spanish Si estamos usando Java, podemos utilizar la clase java.util.Properties para leer los parámetros de este fichero: private static final String USER_NAME = "user.name"; private static final String USER_LANGUAGE = "user.language"; public void showProperties() throws Exception { Properties p = new Properties(); InputStream is = App.class.getResourceAsStream("/configuration.properties"); p.load(is); is.close(); String userName = p.getProperty(USER_NAME); String userCountry = p.getProperty(USER_LANGUAGE); System.out.println("userName: "+userName); System.out.println("userLanguage: "+userCountry); } Después de ejecutar este método, obtendríamos la siguiente salida:

JSF 2.0: Managed Beans (III)

Anteriormente ya hemos visto que cuando se declara un bean, tenemos que darle un scope: application, session, view, request, none. Un scope es un mapeo entre nombres y objetos que se almacena durante un determinado periodo de tiempo. En este post vamos a explicar cada uno de ellos. Si declaramos el bean desde el fichero faces-config.xml, indicamos el scope en <managed-bean-scope> y si queremos hacerlo con anotaciones, utilizaremos @{Application,Session,View,Request,None}Scoped Application Con este scope, se guarda la información durante toda la vida de la aplicación web, independientemente de todas las peticiones y sesiones que se realicen. Este bean se instancia con la primera petición a la aplicación y desaparece cuando la aplicación web se elimina del servidor. Si queremos que el bean se instancie antes de que se muestre la primera página de la aplicación, usamos la propiedad eager a true. @ManagedBean(eager=true) ó <managed-bean eager="true"> Session

JSF 2.0: Message bundles

Los message bundles son ficheros .properties que guardan mensajes del tipo clave=valor. Si centralizamos todos los mensajes de nuestra aplicación en estos ficheros, es más fácil poder localizarlos si queremos realizar algún cambio y también nos ayuda para la internacionalización de la aplicación. Ejemplo: messages.properties (en src/java/com/examples) con dos mensajes name=Tu nombre: age=Tu edad: ¿Cómo los declaramos? 1) En cada página JSF donde lo necesitemos <f:loadBundle basename="com.examples.messages" var="msgs"/> 2) De manera global en faces-config.xml <application>      <resource-bundle>           <base-name>com.examples.messages</base-name>           <var>msg</var>      </resource-bundle> </application> Esta opción es más eficiente ya que sólo crea el bundle una vez para toda la aplicación ¿Cómo accedemos a los mensajes desde una página JSF? Siguiendo con el ejemplo, sería algo tan senc