Antes le tenia miedo a Docker porque no entendí como era que funcionaba, hoy me siento enamorado de esta herramienta … Gracias totales ♥
Introducción
Python en tu propio entorno de desarrollo local
Instalación en Windows (WSL) y Linux
Instalación en Mac
Python con VSCode
Python con Git y GitHub
Flujo de trabajo en Python
PIP y Entornos Virtuales
¿Qué es pip?
Gráficas en Python con PIP
¿Qué es un ambiente virtual?
Usando entornos virtuales en Python
requirements.txt
Práctica
Solicitudes HTTP con Requests
Pandas
Python para Backend: web server con FastAPI
Python en contenedores de Docker
¿Qué es Docker?
Instalación de Docker
Dockerizando scripts de Python
Docker para el día a día: automatizando la vinculación de archivos
Dockerizando web services
Próximos pasos
¿Cómo continuar tu carrera profesional con Python?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Convierte tus certificados en títulos universitarios en USA
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Nicolas Molina
Aportes 43
Preguntas 9
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
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
docker-compose build
docker-compose up -d
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.
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'
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.
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:
.
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
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
😦
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.
Genial!
jajajaja, una ténica legendaria -> “Copiar y pegar”. Excelente curso, de mis favoritos.
✅
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! 💙
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 “game” ejecutarlo, jugar, divertirse y comentarme que mejora debería tener el código. Muchas gracias de antemano.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?