CursosEmpresasBlogLiveConfPrecios
Curso de Python: PIP y Entornos Virtuales

Dockerizando web services

Curso de Python: PIP y Entornos Virtuales

Contenido del curso

Introducción

  • 1
    Python en tu propio entorno de desarrollo local

    Python en tu propio entorno de desarrollo local

    03:26 min
  • 2
    Instalación en Windows (WSL) y Linux

    Instalación en Windows (WSL) y Linux

    06:54 min
  • 3
    Instalación en Mac

    Instalación en Mac

    06:02 min
  • 4
    Python con VSCode

    Python con VSCode

    04:25 min
  • 5
    Python con Git y GitHub

    Python con Git y GitHub

    08:23 min
  • 6
    Flujo de trabajo en Python

    Flujo de trabajo en Python

    07:36 min

PIP y Entornos Virtuales

  • 7
    ¿Qué es pip?

    ¿Qué es pip?

    12:45 min
  • 8
    Gráficas en Python con PIP

    Gráficas en Python con PIP

    12:49 min
  • 9
    ¿Qué es un ambiente virtual?

    ¿Qué es un ambiente virtual?

    04:54 min
  • 10
    Usando entornos virtuales en Python

    Usando entornos virtuales en Python

    09:36 min
  • 11
    requirements.txt

    requirements.txt

    22:40 min

Práctica

  • 12
    Solicitudes HTTP con Requests

    Solicitudes HTTP con Requests

    11:13 min
  • 13
    Pandas

    Pandas

    08:37 min
  • 14
    Python para Backend: web server con FastAPI

    Python para Backend: web server con FastAPI

    10:48 min

Python en contenedores de Docker

  • 15
    ¿Qué es Docker?

    ¿Qué es Docker?

    02:25 min
  • 16
    Instalación de Docker en Windows, macOS y Ubuntu

    Instalación de Docker en Windows, macOS y Ubuntu

    01:35 min
  • 17
    Dockerizando scripts de Python

    Dockerizando scripts de Python

    16:36 min
  • 18
    Docker para el día a día: automatizando la vinculación de archivos

    Docker para el día a día: automatizando la vinculación de archivos

    04:29 min
  • 19
    Dockerizando web services

    Dockerizando web services

    Viendo ahora

Próximos pasos

  • 20
    ¿Cómo continuar tu carrera profesional con Python?

    ¿Cómo continuar tu carrera profesional con Python?

    01:41 min
Tomar examen

Dockerizando web services

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Comentarios50

      Felipe Vidal

      Felipe Vidal

      Estudiante
      Hace 4 años
        Alberto Hernandez

        Alberto Hernandez

        Estudiante
        Hace 3 años
        Sergio Andrés Piratoba Forero

        Sergio Andrés Piratoba Forero

        Estudiante
        Hace 2 años
      Carlos Rodríguez

      Carlos Rodríguez

      Estudiante
      Hace 4 años
        Diego Jurado

        Diego Jurado

        Estudiante
        Hace 4 años
      María José Medina

      María José Medina

      Estudiante
      Hace 4 años
        Elian Camilo Angarita Sanguino

        Elian Camilo Angarita Sanguino

        Estudiante
        Hace 4 años
        magnof chak

        magnof chak

        Estudiante
        Hace 4 años
      Jeinfferson Bernal G

      Jeinfferson Bernal G

      Estudiante
      Hace 4 años
      Alejandro Martínez Valencia

      Alejandro Martínez Valencia

      Estudiante
      Hace 4 años
      Qoqo Baldovino

      Qoqo Baldovino

      Estudiante
      Hace 3 años
      Luis augusto dordelly medina

      Luis augusto dordelly medina

      Estudiante
      Hace 4 años
        Delaskar Caicedo

        Delaskar Caicedo

        Estudiante
        Hace 3 años
      Irving Daniel Reyes Elizondo

      Irving Daniel Reyes Elizondo

      Estudiante
      Hace 4 años
      Jovanny Delgado

      Jovanny Delgado

      Estudiante
      Hace 3 años
        iecgerman .

        iecgerman .

        Estudiante
        Hace 3 años
      Brahian Diaz

      Brahian Diaz

      Estudiante
      Hace 3 años
        Kevin Acosta

        Kevin Acosta

        Estudiante
        Hace 3 años
      Carlos Daniel Amado Velandia

      Carlos Daniel Amado Velandia

      Estudiante
      Hace 4 años
        Mateo Paloma

        Mateo Paloma

        Estudiante
        Hace 4 años
        JUAN MANUEL ARMERO VIVEROS

        JUAN MANUEL ARMERO VIVEROS

        Estudiante
        Hace 3 años
      Augusto Gabriel Luna Bardales

      Augusto Gabriel Luna Bardales

      Estudiante
      Hace 3 años
      Iván Alexis Nocua Benitez

      Iván Alexis Nocua Benitez

      Estudiante
      Hace 4 años
        Samuel Ricardo Duncan Vides

        Samuel Ricardo Duncan Vides

        Estudiante
        Hace 4 años
        Iván Alexis Nocua Benitez

        Iván Alexis Nocua Benitez

        Estudiante
        Hace 3 años
      Bobionwa .

      Bobionwa .

      Estudiante
      Hace 3 años
      Mauro Benito Montoya Arenas

      Mauro Benito Montoya Arenas

      Estudiante
      Hace 3 años
      Enrique Alejandro Terrazas Huamaní

      Enrique Alejandro Terrazas Huamaní

      Estudiante
      Hace 2 años
        Fabián Chacón

        Fabián Chacón

        Estudiante
        Hace 3 meses
      Michael Nassee Buritica Ortega

      Michael Nassee Buritica Ortega

      Estudiante
      Hace 4 años
        Leandro Tenjo

        Leandro Tenjo

        Estudiante
        Hace 3 años
      María Eugenia Pereira Chévez

      María Eugenia Pereira Chévez

      Estudiante
      Hace 4 años
      Camilo Mejía

      Camilo Mejía

      Estudiante
      Hace 3 años
        Edwin Cáceres Silva

        Edwin Cáceres Silva

        Estudiante
        Hace 3 años
      Jissel Alba

      Jissel Alba

      Estudiante
      Hace 3 años

      Antes le tenia miedo a Docker porque no entendí como era que funcionaba, hoy me siento enamorado de esta herramienta ... Gracias totales ♥

      si lo util que es, a veces las maquinas virtuales como virtualbox se portaban caoticas

      Me sucedía igual. Gracias Nicolas Molina por ayudarme a superar ese temor jajajaja.

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

      El curso renovado se ha complementado con este tema de docker, una herramienta muy útil.

      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 :D

      Muy interesante, me paso junto porque tengo instalado Apache2 y claro, ya se esta utilizando el puerto 80. Muchas gracias por la solución!

      genia

      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 :D Ojalá les sirva. https://github.com/alexini-mv/docker-jupyterlab

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

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

      Jajajaja!

      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.

      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.

      Captura desde 2023-09-13 02-14-31.png

      al parecer tienes razón

      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'

      gracias, tenia ese problema

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

      Si, pero al menos ya sabes dos maneras en las que uno como programador se acomoda a como uno le quede mejor

      diría que si y no =S. Desde mi punto de vista un entorno virtual es útil cuando se desea aislar dependencias sin requerir aislar la versión de python.

      Pero si requiero distintas versiones de python, ahí Docker mi salvación.

      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

      ¿Por que los directorios seguimos referenciandolos a "/app"? ¿No tendriamos que referenciarlos TODOS a "/web-server" ?

      Si te refieres a la línea 3 del Dockerfile ese ‘app’ no es la carpeta app sino un nombre cualquiera que se le da a WORKDIR, justo en el minuto 1:23 de la clase 17 lo dice. . En el proyecto de la carpeta app se usó el nombre ‘app’, para este proyecto de web-server copió y pegó el código, dejando el mismo nombre para WORKDIR

      Tienes razón es un nombre que le damos. Graaacias :D

      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
      carbon (23).png
      ###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
      carbon (24).png

      . 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

      • La tecnica legendaria:
        CC_2665123_3823e8f6a3824d16a3a714b33cbef4f0__nunca_falla_4.jpg

      Técnica bastante legendaria: Copiar y pegar xd

      Me cagué de risa jaja

      No me funciona cuando ingreso en la pagina web localhost

      Revisa que el comando de CMD en el archivo Dockerfile este entre Corchetes Cuadrados y NO entre llaves. … Ese fue un pequeño error que tuve yo.

      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"]

      Es el nombre de la carpeta del proyecto. Según tu Dockerfile el tuyo se llama web-server

      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