SlideShare una empresa de Scribd logo
docker community
ALL HANDS #6
Desarrollando una
Extensión para Docker
Angel Borroy
Developer Evangelist, Hyland
@AngelBorroy
1 de Septiembre de 2022
SDK para
Extensiones Docker
● Introducción a Extensiones
● Primeros pasos
● Herramientas de Desarrollo
● API JavaScript
● Diseño de la Interfaz de Usuario
Las extensiones se ejecutan como
Contenedores Linux en Docker*
* Las Extensiones no están disponibles cuando se usan Contenedores Windows
SDK para Extensiones de Docker
https://docs.docker.com/desktop/extensions/
https://github.com/docker/extensions-sdk
Documentación oficial (en inglés)
Desarrollo de extensiones
Publicación de extensiones en el Marketplace
Guías para el diseño del interfaz de usuario
Referencia de la API
Código fuente del CLI y ejemplos de creación de extensiones
Extensión frontend
Extensión backend
Extensión Docker CLI
Extensión utilizando React-JS para el frontend
$ docker extension init my-extension
Dockerfile
docker-compose.yaml
metadata.json
Makefile
docker.svg
vm/
ui/
Primeros pasos
Requisitos
Docker Desktop
Node.js
Go
Make
IDE
Visual Studio Code
Imagen Docker
Datos de la Extensión
Herramientas
Icono de la Extensión
Backend
Frontend
$ docker extension
init Crea una nueva Extensión a partir de una plantilla
install Instala la Extensión en Docker Desktop a partir de una Imagen
ls Lista las Extensiones Docker instaladas en Docker Desktop
rm Elimina una Extensión de Docker Desktop
update Elimina y re-instala una Extensión de Docker Desktop
validate Valida una Extensión a partir de una Imagen o sus metadatos
version Muestra la versión de cliente y servidor
Herramientas de desarrollo
$ docker extension dev
debug Habilita el modo depuración para el UI de una Extensión
ui-source Establece un origen para el UI de una Extensión
reset Restablece el origen y deshabilita el modo depuración para el UI
Herramientas de desarrollo
$ make <target>
build-extension: docker build --tag=$(IMAGE):$(TAG) .
install-extension: build-extension
docker extension install $(IMAGE):$(TAG)
update-extension: build-extension
docker extension update $(IMAGE):$(TAG)
API para Interfaz de Usuario (UI)
API JavaScript con soporte para TypeScript
import { createDockerDesktopClient } from '@docker/extension-api-client';
export function App() {
const ddClient = createDockerDesktopClient();
}
Backend Peticiones HTTP, ejecución de comandos (sistema operativo)
Docker Ejecución de comandos Docker
Dashboard Muestra notificaciones de usuario en Docker Desktop
Navigation Navega a otro apartado de Docker Desktop
https://docs.docker.com/desktop/extensions-sdk/dev/api/overview/
Diseño de la Interfaz de Usuario (UI)
Puede utilizarse cualquier tecnología de desarrollo para la Interfaz de Usuario
(incluso simple HTML)
Sin embargo, dado que la Interfaz de Usuario de Docker Desktop está escrito en
React y Material UI es muy recomendable utilizar esta combinación
Además de la tecnología, Docker propone esta simple lista de comprobaciones para
el diseño de la Interfaz de Usuario:
• ¿Es fácil lanzar la Extensión?
• ¿Es fácil utilizar la Extensión?
• ¿Es fácil acceder a la ayuda cuando es necesario?
https://docs.docker.com/desktop/extensions-sdk/design/design-guidelines/
● Objetivo
● Componentes de la Extensión
● Estructura de la Extensión
● Despliegue y Ejecución
Alfresco
Docker Extension
https://github.com/AlfrescoLabs/alfresco-docker-extension
Objetivo
Desplegar todos los contenedores requeridos para Alfresco a través de un botón en el UI
Elimina la dependencia de un fichero externo, como docker-compose.yml
Proporciona seguimiento de la ejecución de los contenedores
Facilita la gestión de recursos
Minimiza las barreras para utilizar Alfresco
Run
aaa
Componentes de la Extensión
API
Backend Peticiones HTTP, ejecución…
Docker Ejecución de comandos Docker
Dashboard Muestra notificaciones…
Navigation Navega a otro apartado de Docker Desktop
Dockerfile
docker-compose.yaml
metadata.json
Makefile
alfresco.svg
vm/
ui/
Estructura de la Extensión
Docker
Navigation
Despliegue y Ejecución
$ make install-extension
● Respuestas de ddClient
● Utiliza el log de la Consola
JavaScript
● Probar con diferentes Sistemas
Operativos
● Probar con diferentes Temas
(oscuro / claro)
Algunos Consejos
Respuesta de ddClient (JSON)
const result = await ddClient.docker.cli.exec('info', [
'--format',
'"{{json .}}"'
])
return result.parseJsonObject()?.MemTotal
La respuesta es asíncrona, utiliza await para esperar al resultado
Utiliza el formato JSON en las invocaciones al cliente Docker
Parsea el resultado para obtener el valor de las propiedades
{
"Containers": 6,
"ContainersRunning": 0,
"ContainersPaused": 0,
"ContainersStopped": 6,
"Images": 9,
"Driver": "overlay2",
"DriverStatus": [...],
"Plugins": {...},
"NCPU": 6,
"MemTotal": 20992327680,
...
}
Respuesta de ddClient (Lista de Ids)
const result = await ddClient.docker.cli.exec('ps’, ['-q'])
var containers = result.stdout.split(/r?n|r|n/g)
En ocasiones también puedes obtener una lista simple con -q
Divide el resultado por salto de línea para obtener cada elemento
57f249e609d6
bd448227ea37
9efdaf7e7eeb
a847d20cd8af
82363cdde627
Respuesta de ddClient (Lista de JSON)
const result = await ddClient.docker.cli.exec('ps’,
'--format',
'"{{json .}}"'
])
var containers = result.stdout.split(/r?n|r|n/g)
for(let i = 0; i < containers.length; i++) {
let json = JSON.parse(containers[i])
}
Algunos comandos devuelven una lista de líneas JSON
No puede parsearse toda la respuesta como un documento JSON,
pero puede divirse el resultado por salto de línea para obtener cada
elemento JSON
{"Command":""catalina.sh ...}
{"Command":""/bin/sh -c ...}
{"Command":""/bin/sh -c ...}
{"Command":""/bin/sh -c ...}
Log de la consola JavaScript
try {
ddClient.docker...
} catch (err) {
console.log("error : ", err)
}
Utiliza los comandos a Docker en bloques try-catch
Puedes volcar los detalles del error en la consola JavaScript
Recuerda arrancar la Extensión Docker en modo desarrollo
docker extension dev debug angelborroy/alfresco-extension
Probar con diferentes Sistemas Operativos
export const stopContainers = async () => {
await ddClient.docker.cli.exec('stop', [
'$(docker ps -qf "network=alfresco")'
])
}
Funciona en Mac OS con chip Intel
Falla en Windows 10
>> Todavía está en fase BETA
¡Puedes reportar los errores que identifiques en GitHub!
Probar con diferentes Temas
Es recomendable utilizar la guía de diseño de Docker, que tiene en cuenta todos los
elementos del Interfaz Gráfico para el tema Oscuro y para el tema Claro
https://docs.docker.com/desktop/extensions-sdk/design/design-guidelines/
No obstante, recuerda revisar el resultado cuando añadas recursos como imágenes
¡Gracias!
@AngelBorroy
angel.fernandoborroy@hyland.com
https://collabnix.github.io/docker-community-extensions/
mantenida por Ajeet Singh Raina

Más contenido relacionado

PDF
Dockeriza tu entorno de desarrollo
PDF
De desarrollo a producción usando docker
PPTX
Introduccion a Docker curso para saber como funciona la dockeriazacion -2
 
PDF
Docker en el entorno de desarrollo
PDF
PHPVigo #23 - Taller de Docker para PHP
PPTX
Docker 2014 v2
PDF
Docker desde cero
PDF
BEEVA | Introducción a Docker
Dockeriza tu entorno de desarrollo
De desarrollo a producción usando docker
Introduccion a Docker curso para saber como funciona la dockeriazacion -2
 
Docker en el entorno de desarrollo
PHPVigo #23 - Taller de Docker para PHP
Docker 2014 v2
Docker desde cero
BEEVA | Introducción a Docker

Similar a Desarrollando una Extensión para Docker (20)

PDF
Taller docker _es-cl
PDF
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
PDF
Docker4developers Codemotion2016
PDF
FROM lost to the docker
PPTX
Jug málaga docker 101 - final
PPTX
FROM lost to the Docker 2020
PPTX
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
PDF
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
PDF
Vagrant y Docker - Guía práctica de uso
PDF
Linux y Docker, Practicas de Sistemas Operativos
PPTX
Docker Ecosystem - Part I - Engine
PDF
Instalación de Docker Engine en Ubuntu Server 16.04 LTS
PDF
docker.pdf
PDF
Curso Kubernetes CodeURJC
PPTX
Game of pods - Kubernetes
PDF
Jenkins Peru Meetup Docker Ecosystem
PDF
nerdear.la 2016 - Docker workshop
PDF
Docker images
PDF
DockerCon 2022 Spanish Room-ONBOARDING.pdf
PDF
Instalacion y uso basico de Docker.
Taller docker _es-cl
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker4developers Codemotion2016
FROM lost to the docker
Jug málaga docker 101 - final
FROM lost to the Docker 2020
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Vagrant y Docker - Guía práctica de uso
Linux y Docker, Practicas de Sistemas Operativos
Docker Ecosystem - Part I - Engine
Instalación de Docker Engine en Ubuntu Server 16.04 LTS
docker.pdf
Curso Kubernetes CodeURJC
Game of pods - Kubernetes
Jenkins Peru Meetup Docker Ecosystem
nerdear.la 2016 - Docker workshop
Docker images
DockerCon 2022 Spanish Room-ONBOARDING.pdf
Instalacion y uso basico de Docker.
Publicidad

Más de Angel Borroy López (20)

PDF
Alfresco and the Model Context Protocol (MCP)
PDF
Alfresco AI Webinar, creating a RAG system from scratch
PDF
Alfresco TechQuest 2024 - Alfresco Container-based Installation and Configura...
PDF
Transitioning from Customized Solr to Out-of-the-Box OpenSearch
PDF
Alfresco integration with OpenSearch - OpenSearchCon 2024 Europe
PDF
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
PDF
Using Generative AI and Content Service Platforms together
PDF
Enhancing Document-Centric Features with On-Premise Generative AI for Alfresc...
PDF
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1
PDF
Docker Init with Templates for Alfresco
PDF
Before & After Docker Init
PDF
Alfresco Transform Services 4.0.0
PDF
How to migrate from Alfresco Search Services to Alfresco SearchEnterprise
PDF
Using Podman with Alfresco
PDF
CSP: Evolución de servicios de código abierto en un mundo Cloud Native
PDF
Alfresco Embedded Activiti Engine
PDF
Alfresco Transform Core 3.0.0
PDF
Collaborative Editing Tools for Alfresco
PDF
Deploying Containerised Open-Source CSP Platforms
PDF
Introduction to AWS
Alfresco and the Model Context Protocol (MCP)
Alfresco AI Webinar, creating a RAG system from scratch
Alfresco TechQuest 2024 - Alfresco Container-based Installation and Configura...
Transitioning from Customized Solr to Out-of-the-Box OpenSearch
Alfresco integration with OpenSearch - OpenSearchCon 2024 Europe
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Using Generative AI and Content Service Platforms together
Enhancing Document-Centric Features with On-Premise Generative AI for Alfresc...
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1
Docker Init with Templates for Alfresco
Before & After Docker Init
Alfresco Transform Services 4.0.0
How to migrate from Alfresco Search Services to Alfresco SearchEnterprise
Using Podman with Alfresco
CSP: Evolución de servicios de código abierto en un mundo Cloud Native
Alfresco Embedded Activiti Engine
Alfresco Transform Core 3.0.0
Collaborative Editing Tools for Alfresco
Deploying Containerised Open-Source CSP Platforms
Introduction to AWS
Publicidad

Último (6)

PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
sistemas de informacion.................
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Derechos_de_Autor_y_Creative_Commons.pptx
AutoCAD Herramientas para el futuro, Juan Fandiño
sistemas de informacion.................
Conceptos basicos de Base de Datos y sus propiedades
Su punto de partida en la IA: Microsoft 365 Copilot Chat
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd

Desarrollando una Extensión para Docker

  • 1. docker community ALL HANDS #6 Desarrollando una Extensión para Docker Angel Borroy Developer Evangelist, Hyland @AngelBorroy 1 de Septiembre de 2022
  • 2. SDK para Extensiones Docker ● Introducción a Extensiones ● Primeros pasos ● Herramientas de Desarrollo ● API JavaScript ● Diseño de la Interfaz de Usuario
  • 3. Las extensiones se ejecutan como Contenedores Linux en Docker* * Las Extensiones no están disponibles cuando se usan Contenedores Windows
  • 4. SDK para Extensiones de Docker https://docs.docker.com/desktop/extensions/ https://github.com/docker/extensions-sdk Documentación oficial (en inglés) Desarrollo de extensiones Publicación de extensiones en el Marketplace Guías para el diseño del interfaz de usuario Referencia de la API Código fuente del CLI y ejemplos de creación de extensiones Extensión frontend Extensión backend Extensión Docker CLI Extensión utilizando React-JS para el frontend
  • 5. $ docker extension init my-extension Dockerfile docker-compose.yaml metadata.json Makefile docker.svg vm/ ui/ Primeros pasos Requisitos Docker Desktop Node.js Go Make IDE Visual Studio Code Imagen Docker Datos de la Extensión Herramientas Icono de la Extensión Backend Frontend
  • 6. $ docker extension init Crea una nueva Extensión a partir de una plantilla install Instala la Extensión en Docker Desktop a partir de una Imagen ls Lista las Extensiones Docker instaladas en Docker Desktop rm Elimina una Extensión de Docker Desktop update Elimina y re-instala una Extensión de Docker Desktop validate Valida una Extensión a partir de una Imagen o sus metadatos version Muestra la versión de cliente y servidor Herramientas de desarrollo
  • 7. $ docker extension dev debug Habilita el modo depuración para el UI de una Extensión ui-source Establece un origen para el UI de una Extensión reset Restablece el origen y deshabilita el modo depuración para el UI Herramientas de desarrollo $ make <target> build-extension: docker build --tag=$(IMAGE):$(TAG) . install-extension: build-extension docker extension install $(IMAGE):$(TAG) update-extension: build-extension docker extension update $(IMAGE):$(TAG)
  • 8. API para Interfaz de Usuario (UI) API JavaScript con soporte para TypeScript import { createDockerDesktopClient } from '@docker/extension-api-client'; export function App() { const ddClient = createDockerDesktopClient(); } Backend Peticiones HTTP, ejecución de comandos (sistema operativo) Docker Ejecución de comandos Docker Dashboard Muestra notificaciones de usuario en Docker Desktop Navigation Navega a otro apartado de Docker Desktop https://docs.docker.com/desktop/extensions-sdk/dev/api/overview/
  • 9. Diseño de la Interfaz de Usuario (UI) Puede utilizarse cualquier tecnología de desarrollo para la Interfaz de Usuario (incluso simple HTML) Sin embargo, dado que la Interfaz de Usuario de Docker Desktop está escrito en React y Material UI es muy recomendable utilizar esta combinación Además de la tecnología, Docker propone esta simple lista de comprobaciones para el diseño de la Interfaz de Usuario: • ¿Es fácil lanzar la Extensión? • ¿Es fácil utilizar la Extensión? • ¿Es fácil acceder a la ayuda cuando es necesario? https://docs.docker.com/desktop/extensions-sdk/design/design-guidelines/
  • 10. ● Objetivo ● Componentes de la Extensión ● Estructura de la Extensión ● Despliegue y Ejecución Alfresco Docker Extension https://github.com/AlfrescoLabs/alfresco-docker-extension
  • 11. Objetivo Desplegar todos los contenedores requeridos para Alfresco a través de un botón en el UI Elimina la dependencia de un fichero externo, como docker-compose.yml Proporciona seguimiento de la ejecución de los contenedores Facilita la gestión de recursos Minimiza las barreras para utilizar Alfresco Run
  • 12. aaa Componentes de la Extensión API Backend Peticiones HTTP, ejecución… Docker Ejecución de comandos Docker Dashboard Muestra notificaciones… Navigation Navega a otro apartado de Docker Desktop Dockerfile docker-compose.yaml metadata.json Makefile alfresco.svg vm/ ui/
  • 13. Estructura de la Extensión Docker Navigation
  • 14. Despliegue y Ejecución $ make install-extension
  • 15. ● Respuestas de ddClient ● Utiliza el log de la Consola JavaScript ● Probar con diferentes Sistemas Operativos ● Probar con diferentes Temas (oscuro / claro) Algunos Consejos
  • 16. Respuesta de ddClient (JSON) const result = await ddClient.docker.cli.exec('info', [ '--format', '"{{json .}}"' ]) return result.parseJsonObject()?.MemTotal La respuesta es asíncrona, utiliza await para esperar al resultado Utiliza el formato JSON en las invocaciones al cliente Docker Parsea el resultado para obtener el valor de las propiedades { "Containers": 6, "ContainersRunning": 0, "ContainersPaused": 0, "ContainersStopped": 6, "Images": 9, "Driver": "overlay2", "DriverStatus": [...], "Plugins": {...}, "NCPU": 6, "MemTotal": 20992327680, ... }
  • 17. Respuesta de ddClient (Lista de Ids) const result = await ddClient.docker.cli.exec('ps’, ['-q']) var containers = result.stdout.split(/r?n|r|n/g) En ocasiones también puedes obtener una lista simple con -q Divide el resultado por salto de línea para obtener cada elemento 57f249e609d6 bd448227ea37 9efdaf7e7eeb a847d20cd8af 82363cdde627
  • 18. Respuesta de ddClient (Lista de JSON) const result = await ddClient.docker.cli.exec('ps’, '--format', '"{{json .}}"' ]) var containers = result.stdout.split(/r?n|r|n/g) for(let i = 0; i < containers.length; i++) { let json = JSON.parse(containers[i]) } Algunos comandos devuelven una lista de líneas JSON No puede parsearse toda la respuesta como un documento JSON, pero puede divirse el resultado por salto de línea para obtener cada elemento JSON {"Command":""catalina.sh ...} {"Command":""/bin/sh -c ...} {"Command":""/bin/sh -c ...} {"Command":""/bin/sh -c ...}
  • 19. Log de la consola JavaScript try { ddClient.docker... } catch (err) { console.log("error : ", err) } Utiliza los comandos a Docker en bloques try-catch Puedes volcar los detalles del error en la consola JavaScript Recuerda arrancar la Extensión Docker en modo desarrollo docker extension dev debug angelborroy/alfresco-extension
  • 20. Probar con diferentes Sistemas Operativos export const stopContainers = async () => { await ddClient.docker.cli.exec('stop', [ '$(docker ps -qf "network=alfresco")' ]) } Funciona en Mac OS con chip Intel Falla en Windows 10 >> Todavía está en fase BETA ¡Puedes reportar los errores que identifiques en GitHub!
  • 21. Probar con diferentes Temas Es recomendable utilizar la guía de diseño de Docker, que tiene en cuenta todos los elementos del Interfaz Gráfico para el tema Oscuro y para el tema Claro https://docs.docker.com/desktop/extensions-sdk/design/design-guidelines/ No obstante, recuerda revisar el resultado cuando añadas recursos como imágenes