Docker 101:Quées Docker y para que se usa?

13482 단어 devopsdocker
Antes de definir quées Docker,quiero contarles un problema que tuvimos en un proyecto en el que estuve trabajando.
con el equipmo empezamos configurando nuestro proyecto, definiendo la arquitectura, luego pasamos a etapa de de desarrollo de components,test 등.수행원, con la idea de que quién vaya a realizar esos deploy lo haga de la manera más fácil posible generamos una documentación de có mo clonar el proyecto, có mo instalar las dependencias y como ejecutarlo.
Una vez realizado el deploy,nos encontramos con la sorpresa de que nuestra app no corría como debía corr.Luego de debuggear un rato detectamos que el servidor donde estaba corriendo la app tenía instalado la v.14 de Node.js,y nuestra app Tenaía un lockdown a la v.12 lo que generaba algunos problemas de compatibilidad.
?Por quéles cuento esto?Porque esto es uno de los típicos problemas que Docker viene a prevenir que sucedan.
아홀라스...

쿠이스 도크?


Docker puede definirse como una forma de empaquetar software para que pueda ejecutarse en cualquier hardware.
Siguiendo el caso Fronter,Docker nos permite generar un paquete que contiene todo lo necesario,código fuente,configuraciones y las dependencias,para que nuestra aplicación functione de la manera adecuada.

Sus 주요 섹션


Docker tiene un montón de partes muy interestantes yútiles,como los volumens,pero en este artículo nos enfocaremos solo en las principales,que son:

  • Dockerfile:el Dockerfile es un archivo que sirve para indicarle a Docker cómo se debe construir la imagen del proyecto.En otras palabras,es la receta que Docker usa para generar un paquete con nuestra aplicación.

  • 그림:es un 템플릿para ejecutarel proyecto en cualquier contendor.Una imagen de Docker es nuestro paquete.

  • 컨테이너: un Container es básicamente, una imagen en ejecución.
  • ?Cómo dockerizar?


    Lo primero que tenemos que hacer es generar nuestro proyecto.Vamos a generar un simple archivo html y un server en express para servir este archivo.
    Para esto,dentro del directorio donde vamos a trabajar,iniciamos un nuevo proyecto connpm inity dejamos todas las configuraciones por defecto,de tal manera que nos quede unpackage.jsonasí:
    {
      "name": "docker101",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "Luciano Peñafiel",
      "license": "ISC"
    }
    
    Lo siguiente que vamos a hacer es crear un archivoindex.htmlcon un simple encabezado y Lo colocaremos en un directorio que Lo vamos a llamarbuild.
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Docker 101</title>
    </head>
    <body>
        <h1>Hola mundo!</h1>
    </body>
    </html>
    
    continuación instalamos express ejecutandonpm i expressy creamos un archivoserver.jsque va A ser el encargado de servir nuestro html y agregamos un script en nuestropackage.jsonpara levantar este server.
    const express = require("express");
    const app = express();
    
    app.use(express.static("build"));
    
    app.get("/", (req, res) => {
      res.send("ok");
    });
    
    app.listen(3000, () =>
      console.log(`App listening on port http://localhost:3000`)
    );
    
    {
      "name": "docker101",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
            "start": "node server.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "Luciano Peñafiel",
      "license": "ISC"
    }
    
    Listo, ya tenemos nuestra 응용 프로그램.Ahora solo ejecutamos el comandonpm starty vamos a tener ver nuestra app corriendo en el puerto 3000.

    ?Y Docker?


    아호라 루고르 모멘토 데 트라바자르 콘도크, y lo primero que tenemos que hacer es instalarlo des de laweb oficial de Docker.
    Una vez instalado y corriendo,ejecutamos en nuestra terminal el comandodocker pspara ver todas las imágenes que están corriendo actualmente.De momento,no deberíamos tener ninguna,y obtener una respuesta así:

    Lo siguiente es construir nuestro Dockerfile y para esto creamos en la raíz de nuestro repositorio un archivo con ese nombre(y sin extensión)con el siguiente contenido:
    FROM node:12-alpine
    
    WORKDIR /usr/src/app
    
    COPY package*.json ./
    
    RUN npm ci
    
    COPY . ./
    
    CMD ["npm", "start"]
    
    Entendamos un poco este archivo.Primero que nada es muy important entender que cada instrucción functiona como una capa,y Docker intentarámantener en cachécada una de ellas si nada se ha modificado,por lo tanto es recommendable poner Primero aquellas capas que menos van a cambiar a lo largo del proyecto.
    Todo Dockerfile empieza con el comandoFROMque sirve para indicarle a Docker cuál va a ser la imagen base de nuestra imagen.Sí,cada imagen parte de otra imagen.
    Lo siguiente que tenemos hacer es agregar el código fuente de nuestra app a la imagen.파라 에소 프리메로 데비니모스 라이스 델 우산도 라 이스트루치WORKDIR.Todo lo siguiente que hagamos va a comenzar desde esa ruta.
    Luego vamos a instalar todas nuestras dependencias usando el comandoCOPYque recibe dos argumentos,primero lo que queremos copiar y alúltimo la ubicación donde queremos copiar esos archivos.
    Luego vamos a instalar todo lo que tenemos en nuestropackage.jsoncon el comandoRUN npm ci.
    Una vez instaladas todas nuestra dependencias,copiamos el código fuente de nuestra app.En este punto se presenta un problema,y es que En los pasos anteriores instalamos nuestras dependencias,lo que generódentro de la imagen un directorionode_modulesy al copiar todo lo que tenemos En nuestro código fuente,vamos a sobre escribir esos módulos y no es algo que queremos que suceda.Para esto creamos un archivo.dockerignore(si,igual que un.gitinole)y colocamos dentronode_modules.
    Y porúltimo le indicamos a Docker como debe inicializar nuestra app con la instrucciónCMD,que es la instrucción por defecto de Docker para iniciar una imagen.
    Una vez creado nuestroDockerfile,ahora sívamos a generar Una imagen del proyecto,y esto lo hacemos con el comandodocker build -t docker101:v1 .
    ?Quéhace esto?Bien,docker buildva a generar nuestra imagen,y con el flag-t docker101:v1le asignamos una etiqueta a nuestra imagen y le indicamos que estáen la versión 1.
    Ahora si corremos el comandodocker imagesvamos a ver todas las imágenes que tenemos en nuestro Docker con sus respectivos IDs.
    Y por fin llególa hora de ejecutar nuestra app dentro de un contendor,esto lo hacemos con el comandodocker run -p 3000:3000 docker101:v1Y voila,tenemos nuestra app corriendo en el puerto 3000.

    쿠스그?


    La idea,siguiendo el ejemplo del princiio,es entregarle a nuestro cliente todo empaquetado.뭐 공부 해요?Bueno,hay muchas maneras de hacerlo,pero la más usada es subiendo nuestra imagen a un registry de imágenes como los Docker Hub o GitHub Packages para que luego nuestro cliente pueda descargar la imagen.
    Eso es todo por ahora,nos vemos pronto👋🏻.

    좋은 웹페이지 즐겨찾기