No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Prep谩rate para tu pr贸ximo empleo comprando hoy a precio especial

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

7 D铆as
19 Hrs
48 Min
52 Seg

Dockerizando web services

19/20
Recursos

Aportes 40

Preguntas 9

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Antes le tenia miedo a Docker porque no entend铆 como era que funcionaba, hoy me siento enamorado de esta herramienta 鈥 Gracias totales 鈾

Docker es una maravilla, excelente m贸dulo de este curso acerca de docker.

En mi caso me salio el siguiente error:
Error response from daemon: driver failed programming external connectivity on endpoint web-server-web-server-: Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

Tenia otro servidor activo en el puerto 80, asi que para solucionarlo utilice el puerto 8080 de mi local. En el docker-compose.yml quedo:

services:
  web-server:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - '8080:80' 

Para ver los resultados en el navegador fui a la direccion:

  • localhost:8080
  • localhost:8080/contact

Lo dejo por si le sirve a alguien 馃槃

Me encanta la tecnica legendaria de copiar y pegar jajaja

Dockenizando Web Services

Agrega los siguientes archivos en el proyecto web services

Archivo Dockerfile

FROM python:3.10 

WORKDIR /app
COPY requirements.txt /app/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt

COPY . /app

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Archivo docker-compose.yml

services:
  web-server:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - '80:80'

luego, ir a la terminal y construir el contenedor con el siguiente comando

  • Construir el contenedor
docker-compose build
  • Lanzar el contenedor
docker-compose up -d
  • Ver el estado del contenedor
docker-compose ps

Finalmente, abrimos localhost en Google y verificamos que arroje lo que esperamos.

Compa帽eros, les dejo como ejemplo mi repo, donde dockerize Jupyter Lab. Esto fue pensado para poder desplejar un servidor de Jupyter en alg煤n servidor remoto, y tener un servicio personal y privado tipo Google Colab.
Personalmente lo tengo corriendo en una Raspberry Pi.
Les recomiendo que vean los archivos Dockerfile y el docker-compose.yml, y ver谩n que no es tan diferente al presentado en clase 馃槃 Ojal谩 les sirva.
https://github.com/alexini-mv/docker-jupyterlab

pase de junior a >>> senior en 6 minutos.!!! con esta clase.!! 馃ぃ馃ぃ馃ぃ la mejor clase gracias profe gracias platzi por existir .!!!

Antes le tenia miedo a Docker, ahora le tengo m谩s miedo.

Podman es la nueva tecnologia
Podman es una herramienta de c贸digo abierto que permite la gesti贸n de contenedores en entornos Linux. Al igual que Docker, Podman se utiliza para crear, ejecutar y gestionar contenedores, pero con algunas diferencias clave.

Una de las principales diferencias entre Podman y Docker es su arquitectura. Mientras que Docker utiliza un demonio centralizado para administrar los contenedores, Podman se basa en un enfoque sin demonio. Esto significa que los contenedores en Podman se ejecutan como procesos independientes y no requieren un demonio central para su funcionamiento. Esto proporciona ventajas en t茅rminos de seguridad y facilidad de uso, ya que no es necesario tener privilegios de superusuario (root) para ejecutar contenedores con Podman.

Adem谩s, Podman es compatible con el est谩ndar de OCI (Open Container Initiative), lo que garantiza la interoperabilidad y portabilidad entre diferentes herramientas y entornos que tambi茅n cumplen con este est谩ndar. Esto permite que los contenedores creados con Podman sean ejecutados en otros entornos de contenedores compatibles.

En resumen, Podman es una alternativa a Docker que ofrece una gesti贸n de contenedores similar, pero con un enfoque sin demonio y un mayor 茅nfasis en la seguridad y la portabilidad a trav茅s del est谩ndar de OCI. Podman es especialmente popular en entornos Linux donde se valora la facilidad de uso y la separaci贸n de privilegios.

Uvicorn es un servidor ASGI de alto rendimiento que usaremos para correr nuestra aplicaci贸n, si quer茅is m谩s info acerca de esta librer铆a os dejo en enlace a su p谩gina pinchando aqu铆.

驴Qu茅 es un ASGI?

https://asgi.readthedocs.io/en/latest/

ASGI (Asynchronous Server Gateway Interface) is a spiritual successor to WSGI, intended to provide a standard interface between async-capable Python web servers, frameworks, and applications.

Where WSGI provided a standard for synchronous Python apps, ASGI provides one for both asynchronous and synchronous apps, with a WSGI backwards-compatibility implementation and multiple servers and application frameworks.

Compa帽eros, trabajo en linux, al docker-compose.yml, se le debe agregar la version y cambiar el puerto asi:

version: "2"
services:
  web-server:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
     - '8080:80'

si se usan contenedores docker seria innecesario el tema de los entornos virtuales verdad?

Hola Creaturitas del se帽or, seres de luz
No me parecio nada bien explicado este modulo de Docker, asi que le investigue un poquillo y lo que aprendi lo deje en mis notas, asi que aqui estan:
En notion
.
.
___Recordar:___
Docker: Es una plataforma de codigo habierto que te permite encapsular toda una aplicaciones con sus librerias, dependencias y condifguracion del sistema. Esto permite la portabilidad de la app para poder funcionar en otros entornos, sistemas operativos o maquinas virtuales
.
.
___Notas:___
Para hacer un contenedor de nuestro proyecto, necesitamos dos archivos para configurar el contenedor y hacerlo funcionar:

  • Dockerfile: Es la receta que indica como se debe de crear la imagen del contenedor
  • docker-compose.yml; Describe como se deben conectar y comportar los distintos contenedores en una aplicaciones multi-contenedor
  • Imagen Docker: Es donde se encapsulan las depedencias, bibliotecas y configuraciones del sistema de la aplicaciones. Se especifica como se construye una imagen con el archivo Dockerfile, que puede tener instrucciones sobre copiar archivos en el contenedor, agregar software adicional, variables de entornos, que imagen utilizar entre otros
    .
    .

Como dockerizar nuestro proyecto:

.

En tu proyecto primero tienes que definir las intrucciones de tu imagen del contenedor en un archivo Dockerfile, y si tienes multipres contenedores en tu proyecto puedes agregar el archivo docker-compose.yml. Un ejemplo seria con la carpeta replitCharts(App):

###Dockerfile###
FROM python:3.8  #Define que la imagen base del contenedor sera la imagen predeterminada de Python
WORKDIR /app  #Este es el directorio del conedor, donde se ejecutaran los archivos y comandos siguientes
COPY requeriments.txt /app/requeriments.txt #Copiara el archivos de las dependencias al contenedor
RUN pip install --no-cache-dir --upgrade -r /app/requeriments.txt #Corre 'pip install' dentro del contenedor para descargar las dependencias
COPY ./ /app/  #Copiara todos los archivos del directorio actual al contenedor
CMD bash -c "while true; do sleep 1; done" #Cuando se inicie el contenedor, con el bucle infinito hara que permanezca activo el contenedor
###docker-compose.yml###
services:
  app-csv:
    build:
      context: .  #El contexto de nuestro contenedor esta en el directorio actual
      dockerfile: Dockerfile #Utiliza la imagen ta creada en el Dockerfile
    volumes:
      - .:/app  #Crea un volumen que vincula el directorio actual con el del contenedor.
                #Esto hace que se reflejen los cambios en tiempo real en nuestro contenedor

.
Antes de todo esto debes tener Docker Desktop instalado con la opcion de Servicios de Ubuntu habilitada

Ahora construiremos el contenedor con este comando. Acuerdate de actualizar tu archivo requeriments.txt antes de hacer esto. docker-compose build , aqui ya construimos el contenedor, ahora para lanzarlo y que se active ponemos docker-compose up -d, ahora para entrar al a nuestro contenedor utilizar docker-compose exec app-csv(Nombre de tu contenedor) bash . Si queremos salir de contenedor dentro de la bash usamos el comando exit. Para para de correr el contendor ponemos docker-compose down

Para tener en cuenta en este link Documentacion de Puertos Docker

podemos saber sobre como funciona los puertos y cambiarlos por defecto cuando estas usando un servicio web en tu maquina con el puerto por defecto 80

  • La tecnica legendaria:

Lo que no he podido hacer es recrearlo con conda.

No entiendo por qu茅 est谩 usando como directorio de trabajo la carpeta app, yo hice mi docker as铆:

FROM python:3.10

WORKDIR /web-server
COPY requirements.txt /web-server/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /web-server/requirements.txt

COPY . /web-server

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Yo tuve que hacer la creaci贸n de varios contenedores en mi trabajo, pero solo segu铆a las instrucciones de mi l铆der. Gracias a este curso entend铆 lo que estaba haciendo, muy beun cruso, Gracias

Este curso fue buen铆simo! Todo me funcion贸 y entend铆 un mont贸n de cosas! Si siguen la triada de python no hay fallo!

Por si les arroja algun problema copien y peguen este codigo en el docker-compose.yml

services:
web-server:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:app/
ports:
- 鈥80:80鈥

A que se debe este problema? services.web-server.build Additional property contex is not allowed

馃槮

Este curso ha sido 茅pico para m铆 aprend铆 un mont贸n de cosas y se que el camino a煤n es largo ya me siento super Prooo.
si a alguien le aparece este error, ```js raise DockerException( docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied')) ```Se repara de la siguiente manera,```js sudo gpasswd -a $USER docker newgrp docker ```

Me encanto esta clase final de docker. A pesar de ser un novato con esta materia y lenguaje nuevo. Me gusto su forma de emplearse y trabajar de manera amigable. Es mejor seguir mejorando los conocimientos para retos mayores.

Ya con esta clase me anime a dockerizar todas mis aplicaciones, son como sin embargo, no soy muy experto con docker, si alguien sabe me gustaria saber que tan escalable y sostenible seria ejecutar un contenedor con una base de datos mariaDB, Realice una implementacion con consultas que usan recursividad (CTE) y genial en entorno de desarrollo, cuando lo lleve a la productiva la version de la base de datos no lo soportaba, tuve que hacer una trampilla para no perder todo el trabajo (tres semanas) y ahora esto estoy a la espera que me habiliten un espacio para hacer el upgrade, pero esta solucion me gusta, algun aporte ? Muchas gracias.
Por que cuando hago docker compose, mi terminal se queda un resto de tiempo pensando, por ejemplo, a Nico se le demora 10 segundos y a mi ni se a acabado y ya van 380 segundos, por favor si alguien me explica estar铆a encantado.

Genial!

jajajaja, una t茅nica legendaria -> 鈥淐opiar y pegar鈥. Excelente curso, de mis favoritos.

hola al intentar construir el docker web-server me sale este error services.app-csv.build.context contains null, which is an invalid type, it should be a string

Beatiful 馃悑馃挋

A mi me dio este error

$ sudo docker-compose build
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.web-server.ports contains an invalid type, it should be an array

Investigando se debe principalmente a una mala sintaxis: Falta de sangr铆a, comillas dobles, espacio faltante, etc. Mas informacion de la correcta sintaxis https://docs.docker.com/compose/compose-file/

Docker es genial! 馃挋

con dudas pero mas animado a aprender sobre Docker y mas por que en mi trabajo, a un futuro posible estare con todo lo que tenga que ver con nube

Apenas para ejecutar los mokepones 馃槄

Muy buena secci贸n de Docker, para ayudarnos a perder el miedo, Docker no es la gran cosa en dificultad, pero s铆 que es 煤til.

Esta parte estuvo ch茅vere, para separar los proyectos

Increible. No conocia esta herramienta. Muy potente!

Dockerfile

FROM python:3.10

WORKDIR /app
COPY requirementes.txt /app/requirementes.txt

RUN pip install --no-cache-dir --upgrade -r /app/requirementes.txt

COPY . /app

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

docker-compose

services:
  web-server:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - '80:80'

Compa帽er@s los invito a descargar mi proyecto y para el paquete 鈥済ame鈥 ejecutarlo, jugar, divertirse y comentarme que mejora deber铆a tener el c贸digo. Muchas gracias de antemano.

https://github.com/anfesos/platzi_backend