Muy buenas, les saluda Luis y hoy les traigo este tutorial.
Índice
Una guía de inicio rápido y mejores prácticas para trabajar con Docker
Como desarrolladores, científicos de datos, ingenieros de software, trabajamos en bases de código complejas que dependen de muchos elementos en segundo plano. Cuando queremos compartir nuestro código con colegas o poner Github como un proyecto de código abierto, debemos asegurarnos de que el código funcione en todos los entornos diferentes.
A veces – más a menudo de lo que w Ould como para admitir – “tratamos de ejecutar código de un amigo o un código que llegamos a través de Internet cuando los gritos de computadoras en nosotros . Error de importación” Ese error significa que el código necesita más información que no puede encontrar en su computadora.
La solución para esto es usar Docker . Docker es un sistema de gestión de contenedores que tiene como objetivo facilitar el intercambio de proyectos y ejecutarlos en diferentes entornos. Básicamente, Docker facilita la escritura y ejecución de códigos sin problemas en otras máquinas con diferentes sistemas operativos al encapsular el código y todas sus dependencias en un contenedor.
Este contenedor hace que el código sea autónomo e independiente del sistema operativo.
¿Por qué usamos estibadores?
Cuando escribimos código para aplicaciones de ciencia de datos o aprendizaje automático, a menudo tenemos muchas preocupaciones que hacen que el uso de Docker sea la mejor opción para nuestras aplicaciones. Estas preocupaciones son:
- Asegúrese de que la aplicación funcione en todos los entornos de la misma manera.
- Ahorre a aquellos que usarán / ejecutarán su aplicación el problema de manejar las dependencias y los problemas de instalación.
- Evite trabajar con máquinas virtuales.
- Concéntrese en construir la aplicación en lugar de preocuparse por administrar las dependencias.
Conceptos básicos de Docker
Entonces, ¿cómo funciona Docker?
Para entender eso, primero debemos cubrir algo de terminología de Docker, entremos en ello.
Imágenes
Las imágenes se archivan con todos los datos necesarios para ejecutar una aplicación. Si está familiarizado con los lenguajes de programación, puede pensar en una imagen de la misma manera que lo hace en una clase . Las clases son planos; contienen los datos necesarios para generar intensos, mientras que las imágenes son planos con los datos necesarios para crear contenedores.
Las imágenes no cambian, lo que significa que los cambios que realice en una imagen en particular no se guardarán a menos que guarde una copia de la imagen.
Contenedores
Un contenedor es un entorno cerrado donde se ejecuta su aplicación. Los contenedores solo tienen acceso a los recursos que se les permite (almacenamiento, CPU, memoria) y no saben nada más sobre la máquina en la que se están ejecutando. Un contenedor solo tiene acceso a una distribución de Linux con la información necesaria para ejecutar la aplicación.
Los contenedores no dejan datos de forma predeterminada. Cualquier cambio realizado en un contenedor, siempre que no lo guarde como una nueva imagen, se perderá tan pronto como se elimine.
Dockerfiles
Los Dockerfiles son archivos que tienen la información necesaria para ejecutar una aplicación. Cada imagen debe contener al menos, y preferiblemente, en Dockerfile. Los archivos Dockerfiles se pueden dividir en tres secciones principales:
- La imagen base: el núcleo de la aplicación. Por ejemplo, si la aplicación necesita Python 3 para ejecutarse correctamente, entonces Python3 será la imagen base y se incluirán bibliotecas adicionales en el conjunto de instrucciones.
- Conjunto de instrucciones: El conjunto de instrucciones incluye comandos RUN ; cada uno representa una biblioteca adicional o binario que se necesita instalar o ejecutar.
- Comando de entrada: estos son los comandos que se ejecutan una vez que se instalan todas las bibliotecas necesarias. Por ejemplo, un comando de entrada puede ser Abrir Jupyter Notebook , Ejecutar la línea de comandos , etc.
Puede pensar en una imagen como una cebolla, la imagen base es el corazón de la cebolla y cada instrucción es una nueva capa en la imagen. Es por eso que debe prestar atención a cómo está superponiendo sus instrucciones.
Volúmenes
Dado que las imágenes son fijas y los contenedores tienen poca memoria, similar a las RAM, ¿qué sucede si tenemos los datos necesarios para ejecutar la aplicación?
Aquí es donde los volúmenes resuelven el problema. Cuando tenemos los datos necesarios para la aplicación, podemos optar por una de estas dos formas: acceder a los datos localmente o desde un volumen. Para acceder a los datos localmente (tener puntos de montaje locales), debe seleccionar un directorio específico en la máquina local donde se almacenan los datos.
Los volúmenes se utilizan para los datos compartidos cuando no se sabe nada sobre la máquina host, donde se ejecutará la aplicación.
Registros
Los registros son el repositorio equivalente para las imágenes de Docker. Le permite tirar y empujar imágenes de contenedores. Puede distribuir sus imágenes directamente desde su host de Docker o utilizar un agente en la nube como Kubernetes , Docker Swarm o DockerHub . El uso de estos servicios le permite obtener funciones útiles, como la implementación y el escalado automatizados.
¿Cómo empezar a usar Docker?
Paso №1: Instalación de Docker
Para instalar Docker en su dispositivo, diríjase al sitio web oficial de Docker e instale la versión correcta para su máquina. Para hacer uso de que su instalación fue correcta, intente ejecutar el siguiente comando:
docker run
Si obtiene algo como lo siguiente, entonces todo está en funcionamiento y ¡está listo para comenzar a trabajar!
Paso №2: Conozca los comandos básicos
Los estibadores son un concepto bastante amplio. Sin embargo, puede llegar muy lejos si conoce los 6 comandos básicos, ejecutar, ps, renombrar, detener, iniciar y logs.
Paso №3: preparar el archivo de requisitos
Puede agregar los binarios y las bibliotecas necesarias al Dockerfile directamente; es mejor tenerlos en un archivo independiente. Este archivo a menudo se llama requirments.txt. A continuación, se muestra un ejemplo de un archivo requirements.txt.
Paso 4: preparar el Dockerfile
Escriba un Dockerfile simple y eficiente. Es hora de armar la cebolla de adentro hacia afuera. Necesitamos establecer una imagen base y los comandos de entrada.
Paso 5: crea una imagen de Docker
A menudo, nuestro código está alojado en GitHub, lo que facilita la creación de una imagen del código. Si tiene GitHub localmente, puede usar la línea de comando y ejecutar el comando repo2docker para crear una imagen desde su repositorio.
Sin embargo, si el código para el que está intentando crear una imagen está en GitHub, puede usar myBinder también genera y aloja la imagen de tu repositorio. Podrá acceder a la imagen mediante un enlace proporcionado por myBinder. Si está utilizando myBinder, el requisito.txt se llamará envrionment.yml y contendrá la misma información que los requisitos.
Para usar myBinder, debe tener el enlace de la rama maestra de su repositorio. Para este artículo, estoy usando un repositorio Creé para un evento.
Si está usando el navegador Anaconda, puede usar la línea de comando Conda para generar el archivo envrionment.yml de un entorno específico usando este comando:
conda env export --name ENVNAME > envname.yml
Paso 6: ejecutar un contenedor
Para ejecutar un contenedor, puede usar el comando de ejecución que mencionamos anteriormente si el contenedor ya está descargado en su máquina. Sin embargo, si usa myBinder y la imagen está alojada en la nube, puede acceder a ella usando el enlace generado con la imagen. El enlace se agrega a su archivo readme.md y genera una insignia que inicia un contenedor.
Consejos y trucos para las mejores prácticas
- Asegúrese siempre de utilizar la imagen base más eficiente. Por ejemplo, en el caso de Python3, elija slim-buster o stretch-buster . Tienen el soporte completo y funcionan bien con la mayoría de las bibliotecas de DS y ML.
- Utilice etiquetas para proporcionar información importante, como consejos de uso e información adicional sobre la aplicación y las bibliotecas necesarias y cómo se utilizan.
- Divida los comandos de ejecución para que sean más legibles. Coloque todas las bibliotecas necesarias en un archivo requirments.txt para mantener las cosas organizadas.
- Instale solo los paquetes necesarios . Hace que la construcción y ejecución de imágenes sea más eficiente.
- Ignore los archivos explícitamente para evitar riesgos de seguridad (agréguelos al archivo .ignore).
- Evite agregar datos, extraiga datos de una base de datos o de la nube (use montajes de enlace), pero no los codifique en la imagen.
- Si está comenzando con Docker y desea una plantilla de proyecto estándar , use las plantillas de proyecto de ciencia de datos de CookieCutter o de ciencia de Docker de CookieCutter .
Docker puede volverse bastante complicado y desafiante de manejar, pero lo mejor que puede hacer es seguir practicando e intentar hacer uso de las poderosas funciones que ofrece Docker.
Incluso si no está completamente familiarizado con Docker, su uso principal ofrece un control y un poder extremos sobre sus aplicaciones. Con solo los comandos básicos que cubrimos en este artículo, puede aprovechar el poder de Docker y usarlo para compartir, implementar y desarrollar sus aplicaciones.
Se aceptan comentarios.
Añadir comentario