Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejecución de un contenedor de Docker
Puede configurar AWS IoT Greengrass los componentes para que ejecuten un contenedor Docker
-
Repositorios de imágenes públicos y privados en Amazon Elastic Container Registry (AmazonECR)
-
Repositorio público de Docker Hub
-
Registro público de confianza de Docker
-
Bucket de S3
En su componente personalizado, incluya la imagen de Docker URI como un artefacto para recuperar la imagen y ejecutarla en el dispositivo principal. En el caso de las imágenes de Amazon ECR y Docker Hub, puede utilizar el componente gestor de aplicaciones de Docker para descargar las imágenes y gestionar las credenciales de los repositorios privados de AmazonECR.
Temas
- Requisitos
- Ejecuta un contenedor Docker desde una imagen pública en Amazon ECR o Docker Hub
- Ejecuta un contenedor Docker desde una imagen privada en Amazon ECR
- Ejecute un contenedor de Docker desde una imagen en Amazon S3
- Uso de la comunicación entre procesos en los componentes del contenedor de Docker
- Utilice AWS las credenciales en los componentes del contenedor de Docker (Linux)
- Uso del administrador de flujos en los componentes del contenedor de Docker (Linux)
Requisitos
Para ejecutar un contenedor de Docker en un componente, necesita lo siguiente:
-
Un dispositivo principal de Greengrass. Si no dispone de una, consulte Tutorial: Cómo empezar con AWS IoT Greengrass V2.
-
Versión 1.9.1 o posterior de Docker Engine
instalada en el dispositivo principal de Greengrass. Se ha comprobado que la versión 20.10 es la última versión que funciona con el software Core. AWS IoT Greengrass Debe instalar Docker directamente en el dispositivo principal antes de implementar componentes que ejecuten contenedores de Docker. sugerencia
También puede configurar el dispositivo principal para instalar Docker Engine cuando se instale el componente. Por ejemplo, el siguiente script de instalación instala Docker Engine antes de cargar la imagen de Docker. Este script de instalación funciona en distribuciones de Linux basadas en Debian, como Ubuntu. Si configura el componente para instalar Docker Engine con este comando, puede que tenga que configurar
RequiresPrivilege
entrue
en el script del ciclo de vida para ejecutar la instalación y los comandosdocker
. Para obtener más información, consulte AWS IoT Greengrass referencia de recetas de componentes.apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/
hello-world.tar
-
El usuario del sistema que ejecute un componente contenedor de Docker debe tener permisos de raíz o administrador, o bien debe configurar Docker para que se ejecute como un usuario no de raíz o no administrador.
-
En los dispositivos Linux, debe agregar un usuario al grupo de
docker
para llamar comandosdocker
sinsudo
. -
En los dispositivos Windows, puede agregar un usuario al grupo de
docker-users
para llamar comandosdocker
sin privilegios de administrador.
-
-
Los archivos a los que accede el componente contenedor de Docker se montan como un volumen
en el contenedor de Docker. -
Si configura el software AWS IoT Greengrass Core para usar un proxy de red, debe configurar Docker para que use el mismo servidor proxy
.
Además de estos requisitos, también debe cumplir con los siguientes requisitos si se aplican a su entorno:
-
Para usar Docker Compose
para crear e iniciar sus contenedores de Docker, instale Docker Compose en su dispositivo principal de Greengrass y cargue el archivo de Docker Compose en un bucket de S3. Debe almacenar el archivo Compose en un depósito de S3 en el mismo componente Cuenta de AWS y Región de AWS como él. Para ver un ejemplo en el que se usa el comando docker-compose up
en un componente personalizado, consulte Ejecuta un contenedor Docker desde una imagen pública en Amazon ECR o Docker Hub. -
Si utilizas un proxy AWS IoT Greengrass de red, configura el daemon de Docker para que utilice un servidor proxy
. -
Si tus imágenes de Docker están almacenadas en Amazon ECR o Docker Hub, incluye el componente administrador de componentes de Docker como una dependencia en tu componente de contenedor de Docker. Debe iniciar el daemon Docker en el dispositivo principal antes de implementar su componente.
Además, incluye la imagen URIs como artefactos componentes. La imagen URIs debe tener el formato
docker:
que se muestra en los siguientes ejemplos:registry
/image
[:tag|@digest
]-
ECRImagen privada de Amazon:
docker:
account-id
.dkr.ecr.region
.amazonaws.com/repository
/image
[:tag|@digest
] -
ECRImagen pública de Amazon:
docker:public.ecr.aws/
repository
/image
[:tag|@digest
] -
Imagen pública de Docker Hub:
docker:
name
[:tag|@digest
]
Para obtener más información sobre cómo ejecutar contenedores de Docker a partir de imágenes almacenadas en repositorios públicos, consulte Ejecuta un contenedor Docker desde una imagen pública en Amazon ECR o Docker Hub.
-
-
Si tus imágenes de Docker están almacenadas en un repositorio ECR privado de Amazon, debes incluir el componente del servicio de intercambio de fichas como una dependencia en el componente contenedor de Docker. Además, el rol de dispositivo de Greengrass debe permitir las
ecr:GetDownloadUrlForLayer
accionesecr:GetAuthorizationToken
, yecr:BatchGetImage
, como se muestra en el siguiente ejemplo IAM de política.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Para obtener información sobre cómo ejecutar contenedores Docker a partir de imágenes almacenadas en un repositorio ECR privado de Amazon, consulteEjecuta un contenedor Docker desde una imagen privada en Amazon ECR.
-
Para usar imágenes de Docker almacenadas en un repositorio ECR privado de Amazon, el repositorio privado debe estar en el Región de AWS mismo lugar que el dispositivo principal.
-
Si las imágenes de Docker o los archivos de Compose están almacenados en un bucket de S3, el rol de dispositivo de Greengrass debe conceder
s3:GetObject
el permiso para que los dispositivos principales descarguen las imágenes como artefactos componentes, como se muestra en el siguiente IAM ejemplo de política.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Para obtener más información sobre cómo ejecutar contenedores de Docker a partir de imágenes almacenadas en Amazon S3, consulte Ejecute un contenedor de Docker desde una imagen en Amazon S3.
-
Para usar la comunicación entre procesos (IPC), AWS las credenciales o el administrador de transmisiones en su componente de contenedor de Docker, debe especificar opciones adicionales al ejecutar el contenedor de Docker. Para obtener más información, consulte los siguientes temas:
Ejecuta un contenedor Docker desde una imagen pública en Amazon ECR o Docker Hub
En esta sección, se describe cómo crear un componente personalizado que utilice Docker Compose para ejecutar un contenedor de Docker a partir de imágenes de Docker almacenadas en Amazon ECR y Docker Hub.
Cómo ejecutar un contenedor de Docker mediante Docker Compose
-
Cree y cargue un archivo de Docker Compose en un bucket de Amazon S3. Asegúrese de que el rol de dispositivo de Greengrass otorgue el permiso
s3:GetObject
para permitir que el dispositivo acceda al archivo de Compose. El ejemplo del archivo Compose que se muestra en el siguiente ejemplo incluye la imagen de Amazon CloudWatch Agent de Amazon ECR y la imagen de My SQL Image de Docker Hub.version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
-
Cree un componente personalizado en su dispositivo AWS IoT Greengrass principal. La receta de ejemplo que se muestra en el ejemplo siguiente incluye las siguientes propiedades:
-
El componente del administrador de aplicaciones de Docker como dependencia. Este componente permite AWS IoT Greengrass descargar imágenes de los repositorios públicos de Amazon ECR y Docker Hub.
-
Un artefacto componente que especifica una imagen de Docker en un repositorio público de AmazonECR.
-
Un artefacto componente que especifica una imagen de Docker en un repositorio público de Docker Hub.
-
Un artefacto componente que especifica el archivo de Docker Compose que incluye los contenedores para las imágenes de Docker que quiere ejecutar.
-
Un script de ejecución de ciclo de vida que usa docker-compose up
para crear e iniciar un contenedor a partir de las imágenes especificadas.
nota
Para usar la comunicación entre procesos (IPC), AWS las credenciales o el administrador de transmisiones en su componente de contenedor de Docker, debe especificar opciones adicionales al ejecutar el contenedor de Docker. Para obtener más información, consulte los siguientes temas:
-
-
Pruebe el componente para comprobar que funciona según lo previsto.
importante
Debe instalar e iniciar el daemon Docker antes de implementar su componente.
Tras implementar el componente localmente, puede ejecutar el comando docker container ls
para comprobar que el contenedor se ejecuta. docker container ls
-
Cuando el componente esté listo, cárguelo para AWS IoT Greengrass implementarlo en otros dispositivos principales. Para obtener más información, consulte Publique componentes para desplegarlos en sus dispositivos principales.
Ejecuta un contenedor Docker desde una imagen privada en Amazon ECR
En esta sección, se describe cómo crear un componente personalizado que ejecute un contenedor de Docker a partir de una imagen de Docker almacenada en un repositorio privado de Amazon. ECR
Cómo ejecutar un contenedor de Docker
-
Crea un componente personalizado en tu dispositivo AWS IoT Greengrass principal. Utilice la siguiente receta de ejemplo, que incluye las siguientes propiedades:
-
El componente del administrador de aplicaciones de Docker como dependencia. Este componente permite a AWS IoT Greengrass administrar las credenciales para descargar imágenes de repositorios privados.
-
El componente del servicio de intercambio de token como dependencia. Este componente permite AWS IoT Greengrass recuperar AWS credenciales para interactuar con AmazonECR.
-
Un artefacto componente que especifica una imagen de Docker en un repositorio privado de AmazonECR.
-
Un script de ejecución de ciclo de vida que utiliza docker run
para crear e iniciar un contenedor desde la imagen.
nota
Para usar la comunicación entre procesos (IPC), AWS las credenciales o el administrador de transmisiones en su componente de contenedor de Docker, debe especificar opciones adicionales al ejecutar el contenedor de Docker. Para obtener más información, consulte los siguientes temas:
-
-
Pruebe el componente para comprobar que funciona según lo previsto.
importante
Debe instalar e iniciar el daemon Docker antes de implementar su componente.
Tras implementar el componente localmente, puede ejecutar el comando docker container ls
para comprobar que el contenedor se ejecuta. docker container ls
-
Cargue el componente para AWS IoT Greengrass implementarlo en otros dispositivos principales. Para obtener más información, consulte Publique componentes para desplegarlos en sus dispositivos principales.
Ejecute un contenedor de Docker desde una imagen en Amazon S3
En esta sección, se describe cómo ejecutar un contenedor de Docker en un componente desde una imagen de Docker almacenada en Amazon S3.
Cómo ejecutar un contenedor de Docker en un componente desde una imagen en Amazon S3
-
Ejecute el comando docker save
para crear una copia de seguridad de un contenedor de Docker. Esta copia de seguridad se proporciona como un artefacto componente en el que ejecutar el contenedor en AWS IoT Greengrass. hello-world
Sustitúyalo por el nombre de la imagen yhello-world.tar
sustitúyalo por el nombre del archivo comprimido que se va a crear.docker save
hello-world
>artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
-
Cree un componente personalizado en su dispositivo AWS IoT Greengrass principal. Utilice la siguiente receta de ejemplo, que incluye las siguientes propiedades:
-
Un script de instalación del ciclo de vida que usa docker load para cargar
una imagen de Docker desde un archivo. -
Un script de ejecución de ciclo de vida que utiliza docker run
para crear e iniciar un contenedor desde la imagen. La opción --rm
limpia el contenedor cuando sale.
nota
Para usar la comunicación entre procesos (IPC), AWS las credenciales o el administrador de transmisiones en el componente de contenedor de Docker, debe especificar opciones adicionales al ejecutar el contenedor de Docker. Para obtener más información, consulte los siguientes temas:
-
-
Pruebe el componente para comprobar que funciona según lo previsto.
Tras implementar el componente localmente, puede ejecutar el comando docker container ls
para comprobar que el contenedor se ejecuta. docker container ls
-
Cuando el componente esté listo, cargue el archivo de imágenes de Docker en un bucket de S3 y agréguelo URI a la receta del componente. A continuación, puede cargar el componente para AWS IoT Greengrass implementarlo en otros dispositivos principales. Para obtener más información, consulte Publique componentes para desplegarlos en sus dispositivos principales.
Al terminar, la receta del componente tendrá un aspecto semejante al de este ejemplo.
Uso de la comunicación entre procesos en los componentes del contenedor de Docker
Puede utilizar la biblioteca de comunicación entre procesos de Greengrass (IPC) SDK para dispositivos con AWS IoT para comunicarse con el núcleo de Greengrass, otros componentes de Greengrass y. AWS IoT Core Para obtener más información, consulte Úselo SDK para dispositivos con AWS IoT para comunicarse con el núcleo de Greengrass, otros componentes y AWS IoT Core.
Para utilizarla IPC en un componente de contenedor de Docker, debe ejecutar el contenedor de Docker con los siguientes parámetros:
-
Monte el IPC socket en el contenedor. El núcleo de Greengrass proporciona la ruta del archivo IPC socket en la variable de
AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
entorno. -
Establezca las variables de entorno
SVCUID
yAWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
en los valores que el núcleo de Greengrass proporciona a los componentes. Su componente utiliza estas variables de entorno para autenticar las conexiones al núcleo de Greengrass.
ejemplo Receta de ejemplo: Publicar un MQTT mensaje en AWS IoT Core (Python)
La siguiente receta define un ejemplo de componente contenedor de Docker en el que se publica un MQTT mensaje. AWS IoT Core Esta receta tiene las siguientes propiedades:
-
Una política de autorización (
accessControl
) que permite al componente publicar MQTT mensajes AWS IoT Core sobre todos los temas. Para obtener más información, consulte Autoriza a los componentes a realizar IPC operaciones y AWS IoT Core MQTTIPCautorización. -
Un artefacto componente que especifica una imagen de Docker como TAR archivo en Amazon S3.
-
Un script de instalación del ciclo de vida que carga la imagen de Docker desde el archivo. TAR
-
Un script de ejecución de ciclo de vida que ejecuta un contenedor de Docker desde la imagen. El comando Docker run
tiene los siguientes argumentos: -
El
-v
argumento monta el conector IPC Greengrass en el contenedor. -
Los dos primeros argumentos
-e
establecen las variables de entorno necesarias en el contenedor de Docker. -
Los argumentos
-e
adicionales establecen las variables de entorno utilizadas en este ejemplo. -
El argumento
--rm
limpia el contenedor al salir.
-
Utilice AWS las credenciales en los componentes del contenedor de Docker (Linux)
Puede usar el componente del servicio de intercambio de fichas para interactuar con AWS los servicios de los componentes de Greengrass. Este componente proporciona las credenciales de AWS del rol de intercambio de token del dispositivo principal mediante un servidor contenedor local. Para obtener más información, consulte Interactúa con AWS los servicios.
nota
El ejemplo de esta sección solo funciona en los dispositivos principales de Linux.
Para usar AWS las credenciales del servicio de intercambio de fichas en un componente de contenedor de Docker, debe ejecutar el contenedor de Docker con los siguientes parámetros:
-
Proporcione acceso a la red host mediante el argumento
--network=host
. Esta opción permite que el contenedor de Docker se conecte al servicio de intercambio de tokens local para recuperar las credenciales. AWS Este argumento solo funciona en Docker para Linux.aviso
Esta opción proporciona al contenedor acceso a todas las interfaces de red locales del host, por lo que es menos segura que si se ejecutan contenedores de Docker sin este acceso a la red del host. Tenga esto en cuenta al desarrollar y ejecutar componentes de contenedores de Docker que utilizan esta opción. Para obtener más información, consulte Red: host
en la documentación de Docker. -
Establezca las variables
AWS_CONTAINER_CREDENTIALS_FULL_URI
y deAWS_CONTAINER_AUTHORIZATION_TOKEN
entorno en los valores que el núcleo de Greengrass proporciona a los componentes. AWS SDKsutilice estas variables de entorno para recuperar las AWS credenciales.
ejemplo Receta de ejemplo: enumerar buckets de S3 en un componente contenedor de Docker (Python)
La siguiente receta define un ejemplo de componente de contenedor de Docker que muestra los buckets de S3 de su Cuenta de AWS. Esta receta tiene las siguientes propiedades:
-
El componente del servicio de intercambio de token como dependencia. Esta dependencia permite al componente recuperar AWS credenciales para interactuar con otros AWS servicios.
-
Un artefacto componente que especifica una imagen de Docker como un archivo tar en Amazon S3.
-
Un script de instalación del ciclo de vida que carga la imagen de Docker desde el TAR archivo.
-
Un script de ejecución de ciclo de vida que ejecuta un contenedor de Docker desde la imagen. El comando Docker run
tiene los siguientes argumentos: -
El argumento
--network=host
proporciona al contenedor acceso a la red de host, de modo que el contenedor puede conectarse al servicio de intercambio de token. -
El argumento
-e
establece las variables de entorno necesarias en el contenedor de Docker. -
El argumento
--rm
limpia el contenedor al salir.
-
Uso del administrador de flujos en los componentes del contenedor de Docker (Linux)
Puede usar el componente administrador de flujos para administrar flujos de datos en los componentes de Greengrass. Este componente le permite procesar flujos de datos y transferir datos de IoT de gran volumen al Nube de AWS. AWS IoT Greengrass proporciona un administrador de transmisiones SDK que se utiliza para interactuar con el componente de administrador de transmisiones. Para obtener más información, consulte Administración de flujos de datos en los dispositivos principales de Greengrass.
nota
El ejemplo de esta sección solo funciona en los dispositivos principales de Linux.
Para usar el administrador de transmisiones SDK en un componente de contenedor de Docker, debe ejecutar el contenedor de Docker con los siguientes parámetros:
-
Proporcione acceso a la red host mediante el argumento
--network=host
. Esta opción permite que el contenedor Docker interactúe con el componente del administrador de transmisiones a través de una conexión local. TLS Este argumento solo funciona en Docker para Linuxaviso
Esta opción proporciona al contenedor acceso a todas las interfaces de red locales del host, por lo que es menos segura que si se ejecutan contenedores de Docker sin este acceso a la red del host. Tenga esto en cuenta al desarrollar y ejecutar componentes de contenedores de Docker que utilizan esta opción. Para obtener más información, consulte Red: host
en la documentación de Docker. -
Si configura el componente del administrador de flujos para que requiera autenticación, que es el comportamiento predeterminado, establezca la variable de entorno
AWS_CONTAINER_CREDENTIALS_FULL_URI
en el valor que el núcleo de Greengrass proporciona a los componentes. Para obtener más información, consulte la configuración del administrador de flujos. -
Si configura el componente del administrador de flujos para que utilice un puerto que no sea el predeterminado, utilice la comunicación entre procesos (IPC) para obtener el puerto desde la configuración del componente del administrador de flujos. Debe ejecutar el contenedor Docker con opciones adicionales para su uso. IPC Para obtener más información, consulte los siguientes temas:
ejemplo Receta de ejemplo: transmitir un archivo a un bucket de S3 en un componente contenedor de Docker (Python)
La siguiente receta define un ejemplo de componente contenedor de Docker que crea un archivo y lo transmite a un bucket de S3. Esta receta tiene las siguientes propiedades:
-
El componente del administrador de flujos como dependencia. Esta dependencia permite que el componente utilice el administrador de flujos SDK para interactuar con el componente del administrador de flujos.
-
Un artefacto componente que especifica una imagen de Docker como TAR archivo en Amazon S3.
-
Un script de instalación del ciclo de vida que carga la imagen de Docker desde el archivo. TAR
-
Un script de ejecución de ciclo de vida que ejecuta un contenedor de Docker desde la imagen. El comando Docker run
tiene los siguientes argumentos: -
El argumento
--network=host
proporciona al contenedor acceso a la red host, de modo que el contenedor puede conectarse al componente administrador de flujos. -
El primer argumento
-e
establece la variable de entornoAWS_CONTAINER_AUTHORIZATION_TOKEN
requerida en el contenedor de Docker. -
Los argumentos
-e
adicionales establecen las variables de entorno utilizadas en este ejemplo. -
El argumento
-v
monta la carpeta de trabajo del componente en el contenedor. En este ejemplo, se crea un archivo en la carpeta de trabajo para subirlo a Amazon S3 mediante el administrador de flujos. -
El argumento
--rm
limpia el contenedor al salir.
-