기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
도커 컨테이너 실행
다음 위치에 저장된 이미지에서 Docker
-
Amazon Elastic 컨테이너 레지스트리 (Amazon) 의 퍼블릭 및 프라이빗 이미지 리포지토리 ECR
-
퍼블릭 도커 허브 리포지토리
-
퍼블릭 도커 신뢰할 수 있는 레지스트리
-
S3 버킷
사용자 지정 구성 요소에 Docker 이미지를 URI 아티팩트로 포함하여 이미지를 검색하고 코어 디바이스에서 실행하십시오. Amazon ECR 및 Docker Hub 이미지의 경우 Docker 애플리케이션 관리자 구성 요소를 사용하여 프라이빗 Amazon ECR 리포지토리의 이미지를 다운로드하고 자격 증명을 관리할 수 있습니다.
주제
요구 사항
구성 요소에서 Docker 컨테이너를 실행하려면 다음이 필요합니다.
-
그린그래스 코어 디바이스. 계정이 없는 경우 자습서: AWS IoT Greengrass V2 시작하기 단원을 참조하세요.
-
도커 엔진
1.9.1 이상이 그린그래스 코어 디바이스에 설치되었습니다. 버전 20.10은 Core 소프트웨어와 함께 작동하는 것으로 검증된 최신 버전입니다. AWS IoT Greengrass Docker 컨테이너를 실행하는 구성 요소를 배포하려면 먼저 코어 디바이스에 Docker를 직접 설치해야 합니다. 작은 정보
구성 요소가 설치될 때 Docker Engine을 설치하도록 코어 디바이스를 구성할 수도 있습니다. 예를 들어 다음 설치 스크립트는 Docker 이미지를 로드하기 전에 Docker 엔진을 설치합니다. 이 설치 스크립트는 Ubuntu와 같은 데비안 기반 Linux 배포판에서 작동합니다. 이 명령으로 Docker Engine을 설치하도록 구성 요소를 구성하는 경우 설치 및 명령을 실행하려면 라이프사이클
true
스크립트에서RequiresPrivilege
로 설정해야 할 수 있습니다.docker
자세한 내용은 AWS IoT Greengrass 컴포넌트 레시피 참조 단원을 참조하십시오.apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/
hello-world.tar
-
Docker 컨테이너 구성 요소를 실행하는 시스템 사용자에게 루트 또는 관리자 권한이 있거나 루트 또는 관리자가 아닌 사용자로 실행하도록 Docker를 구성해야 합니다.
-
Linux 디바이스에서는
docker
그룹에 사용자를 추가하여 없이docker
sudo
명령을 호출할 수 있습니다. -
Windows 장치에서는 관리자 권한 없이
docker
명령을 호출할 사용자를docker-users
그룹에 추가할 수 있습니다.
-
-
Docker 컨테이너 구성 요소에서 액세스한 파일은 Docker 컨테이너에 볼륨으로 마운트됩니다
. -
네트워크 프록시를 사용하도록 AWS IoT Greengrass Core 소프트웨어를 구성하는 경우 동일한 프록시 서버를 사용하도록 Docker를 구성해야
합니다.
환경에 적용되는 경우 이러한 요구 사항 외에도 다음 요구 사항도 충족해야 합니다.
-
Docker Compose를
사용하여 Docker 컨테이너를 생성하고 시작하려면 Greengrass 코어 디바이스에 Docker Compose를 설치하고 Docker Compose 파일을 S3 버킷에 업로드하세요. Compose 파일은 구성 요소와 동일한 S3 버킷에 저장해야 합니다. AWS 계정 AWS 리전 사용자 지정 구성 요소에서 docker-compose up
명령을 사용하는 예제는 을 참조하십시오Amazon ECR 또는 Docker Hub의 공개 이미지에서 도커 컨테이너 실행. -
네트워크 프록시 AWS IoT Greengrass 뒤에서 실행하는 경우 프록시 서버를 사용하도록 Docker 데몬을 구성하십시오.
-
Docker 이미지가 Amazon ECR 또는 Docker Hub에 저장되어 있는 경우 Docker 구성 요소 관리자 구성 요소를 Docker 컨테이너 구성 요소의 종속 항목으로 포함하세요. 구성 요소를 배포하기 전에 코어 디바이스에서 Docker 데몬을 시작해야 합니다.
또한 이미지를 구성 요소 URIs 아티팩트로 포함하세요. 이미지는 다음
docker:
예와 같은 URIs 형식이어야 합니다.registry
/image
[:tag|@digest
]-
비공개 아마존 ECR 이미지:
docker:
account-id
.dkr.ecr.region
.amazonaws.com/repository
/image
[:tag|@digest
] -
공개 아마존 ECR 이미지:
docker:public.ecr.aws/
repository
/image
[:tag|@digest
] -
퍼블릭 도커 허브 이미지:
docker:
name
[:tag|@digest
]
공개 리포지토리에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 을 참조하십시오. Amazon ECR 또는 Docker Hub의 공개 이미지에서 도커 컨테이너 실행
-
-
Docker 이미지가 Amazon ECR 사설 리포지토리에 저장되어 있는 경우 토큰 교환 서비스 구성 요소를 Docker 컨테이너 구성 요소의 종속 항목으로 포함해야 합니다. 또한 Greengrass 장치 역할은 다음 예제 IAM 정책에 표시된 것처럼
ecr:GetAuthorizationToken
ecr:BatchGetImage
,, 및ecr:GetDownloadUrlForLayer
작업을 허용해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Amazon ECR 사설 리포지토리에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 을 참조하십시오Amazon의 프라이빗 이미지에서 Docker 컨테이너 실행 ECR.
-
Amazon ECR 프라이빗 리포지토리에 저장된 Docker 이미지를 사용하려면 프라이빗 리포지토리가 코어 AWS 리전 디바이스와 동일한 위치에 있어야 합니다.
-
Docker 이미지 또는 Compose 파일이 S3 버킷에 저장되어 있는 경우, Greengrass 디바이스 역할은 다음 예제 정책에 나와 있는 것처럼 코어 디바이스가 이미지를 구성 요소 아티팩트로 다운로드하도록 허용하는
s3:GetObject
권한을 허용해야 합니다. IAM{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Amazon S3에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 을 참조하십시오Amazon S3의 이미지에서 도커 컨테이너 실행.
-
Docker 컨테이너 구성 요소에서 프로세스 간 통신 (IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하십시오.
Amazon ECR 또는 Docker Hub의 공개 이미지에서 도커 컨테이너 실행
이 섹션에서는 Amazon ECR 및 Docker Hub에 저장된 Docker 이미지에서 Docker Compose를 사용하여 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 만드는 방법을 설명합니다.
Docker Compose를 사용하여 Docker 컨테이너를 실행하려면
-
Docker Compose 파일을 생성하여 Amazon S3 버킷에 업로드합니다. Greengrass 장치 역할이 장치가 Compose 파일에 액세스할 수 있도록 하는
s3:GetObject
권한을 허용하는지 확인하세요. 다음 예제에 표시된 예제 작성 파일에는 Amazon의 Amazon CloudWatch Agent 이미지와 Docker ECR Hub의 내 SQL 이미지가 포함되어 있습니다.version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 생성합니다. 다음 예제에 표시된 예제 레시피에는 다음과 같은 속성이 있습니다.
-
종속성으로서의 Docker 애플리케이션 관리자 구성 요소. 이 구성 요소를 사용하면 AWS IoT Greengrass 퍼블릭 Amazon ECR 및 Docker Hub 리포지토리에서 이미지를 다운로드할 수 있습니다.
-
퍼블릭 Amazon ECR 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
-
퍼블릭 Docker Hub 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
-
실행하려는 Docker 이미지의 컨테이너가 포함된 Docker Compose 파일을 지정하는 구성 요소 아티팩트입니다.
-
docker-compose up을
사용하여 지정된 이미지에서 컨테이너를 만들고 시작하는 라이프사이클 실행 스크립트입니다.
참고
Docker 컨테이너 구성 요소에서 프로세스 간 통신 (IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하십시오.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
중요
구성 요소를 배포하기 전에 Docker 데몬을 설치하고 시작해야 합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소가 준비되면 구성 요소를 AWS IoT Greengrass 업로드하여 다른 코어 장치에 배포하십시오. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
Amazon의 프라이빗 이미지에서 Docker 컨테이너 실행 ECR
이 섹션에서는 Amazon의 프라이빗 리포지토리에 저장된 Docker 이미지에서 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 생성하는 방법을 설명합니다. ECR
Docker 컨테이너를 실행하려면
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 만드세요. 다음과 같은 속성을 가진 다음 예제 레시피를 사용하세요.
-
Docker 애플리케이션 관리자 구성 요소를 종속성으로 사용합니다. 이 구성 요소를 사용하면 개인 AWS IoT Greengrass 리포지토리에서 이미지를 다운로드하기 위한 자격 증명을 관리할 수 있습니다.
-
토큰 교환 서비스 구성 요소는 종속성입니다. 이 구성 요소를 사용하면 AWS 자격 증명을 AWS IoT Greengrass 검색하여 Amazon과 상호 작용할 수 ECR 있습니다.
-
프라이빗 Amazon ECR 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
참고
Docker 컨테이너 구성 요소에서 프로세스 간 통신 (IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하십시오.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
중요
구성 요소를 배포하기 전에 Docker 데몬을 설치하고 시작해야 합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소를 AWS IoT Greengrass 업로드하여 다른 코어 디바이스에 배포합니다. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
Amazon S3의 이미지에서 도커 컨테이너 실행
이 단원에서는 Amazon S3에 저장된 Docker 이미지를 사용하여 구성 요소에서 Docker 컨테이너를 실행하는 방법을 설명합니다.
Amazon S3의 이미지에서 구성 요소의 Docker 컨테이너를 실행하려면
-
docker save
명령을 실행하여 도커 컨테이너의 백업을 생성합니다. 이 백업을 컨테이너를 실행할 구성 요소 아티팩트로 제공합니다. AWS IoT Greengrass Replace hello-world
이미지 이름을 입력하고 교체하십시오.hello-world.tar
생성할 아카이브 파일의 이름과 함께.docker save
hello-world
>artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 생성합니다. 다음과 같은 속성을 가진 다음 예제 레시피를 사용하세요.
-
docker load를
사용하여 아카이브에서 Docker 이미지를 로드하는 라이프사이클 설치 스크립트입니다. -
docker run을 사용하여 이미지에서 컨테이너를 만들고 시작하는 라이프사이클 실행
스크립트입니다. 이 --rm
옵션은 컨테이너가 종료될 때 컨테이너를 정리합니다.
참고
Docker 컨테이너 구성 요소에서 프로세스 간 통신 (IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하십시오.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소가 준비되면 Docker 이미지 아카이브를 S3 버킷에 업로드하고 구성 요소 URI 레시피에 추가합니다. 그런 다음 구성 요소를 업로드하여 다른 코어 AWS IoT Greengrass 디바이스에 배포할 수 있습니다. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
완료하면 구성 요소 레시피가 다음 예제와 같아야 합니다.
Docker 컨테이너 구성 요소에서 프로세스 간 통신을 사용하십시오.
의 Greengrass 프로세스 간 통신 (IPC) 라이브러리를 사용하여 Greengrass 핵, 기타 Greengrass 구성 요소 등과 AWS IoT Device SDK 통신할 수 있습니다. AWS IoT Core자세한 내용은 AWS IoT Device SDK 를 사용하여 Greengrass 핵, 기타 구성 요소와 통신하고 AWS IoT Core 단원을 참조하십시오.
Docker 컨테이너 구성 IPC 요소에서 사용하려면 다음 매개 변수를 사용하여 Docker 컨테이너를 실행해야 합니다.
-
IPC소켓을 컨테이너에 마운트합니다. Greengrass 핵은 환경 변수에 IPC 소켓 파일 경로를 제공합니다.
AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
-
SVCUID
및AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
환경 변수를 Greengrass 핵이 구성요소에 제공하는 값으로 설정합니다. 구성 요소는 이러한 환경 변수를 사용하여 Greengrass 핵에 대한 연결을 인증합니다.
예제 레시피: AWS IoT Core (Python) 에 MQTT 메시지 게시
다음 레시피는 MQTT 메시지를 게시하는 예제 Docker 컨테이너 구성 요소를 정의합니다. AWS IoT Core이 레시피의 속성은 다음과 같습니다.
-
구성 요소가 모든 AWS IoT Core 주제에 대해 MQTT 메시지를 게시할 수 있도록 허용하는 권한 부여 정책 (
accessControl
). 자세한 내용은 구성 요소가 작업을 수행할 수 있도록 승인하십시오. IPC 및 AWS IoT Core MQTTIPC권한 부여를 참조하십시오. -
Docker 이미지를 Amazon S3의 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트. TAR
-
이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행
명령에는 다음과 같은 인수가 포함됩니다. -
-v
인수는 IPC Greengrass 소켓을 컨테이너에 마운트합니다. -
처음 두
-e
인수는 Docker 컨테이너에 필요한 환경 변수를 설정합니다. -
추가
-e
인수는 이 예제에서 사용하는 환경 변수를 설정합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-
Docker 컨테이너 구성 요소 (Linux) 에서 AWS 자격 증명 사용
토큰 교환 서비스 구성 요소를 사용하여 Greengrass 구성 요소의 AWS 서비스와 상호 작용할 수 있습니다. 이 구성 요소는 로컬 컨테이너 서버를 사용하는 코어 디바이스의 토큰 교환 역할의 AWS 자격 증명을 제공합니다. 자세한 내용은 AWS서비스와 상호작용 단원을 참조하십시오.
참고
이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.
Docker 컨테이너 구성 요소에서 토큰 교환 서비스의 AWS 자격 증명을 사용하려면 다음 매개 변수를 사용하여 Docker 컨테이너를 실행해야 합니다.
-
인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다.
--network=host
이 옵션을 사용하면 Docker 컨테이너를 로컬 토큰 교환 서비스에 연결하여 AWS 자격 증명을 검색할 수 있습니다. 이 인수는 리눅스용 Docker에서만 작동합니다.주의
이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 이 옵션은 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 덜 안전합니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때는 이 점을 고려하세요. 자세한 내용은 Docker 설명서의 네트워크: 호스트를
참조하십시오. -
AWS_CONTAINER_CREDENTIALS_FULL_URI
및AWS_CONTAINER_AUTHORIZATION_TOKEN
환경 변수를 Greengrass 핵이 구성요소에 제공하는 값으로 설정합니다. AWS SDKs이러한 환경 변수를 사용하여 자격 증명을 AWS 검색하십시오.
예제 레시피: Docker 컨테이너 구성 요소의 S3 버킷 나열 (Python)
다음 레시피는 사용자의 S3 버킷을 나열하는 예제 Docker 컨테이너 구성 요소를 정의합니다. AWS 계정이 레시피의 속성은 다음과 같습니다.
-
토큰 교환 서비스 구성 요소는 종속성입니다. 이러한 종속성을 통해 구성 요소는 AWS 자격 증명을 검색하여 다른 AWS 서비스와 상호 작용할 수 있습니다.
-
Amazon S3의 Docker 이미지를 tar 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다. TAR
-
이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행
명령에는 다음과 같은 인수가 포함됩니다. -
--network=host
인수는 컨테이너가 호스트 네트워크에 액세스할 수 있도록 하므로 컨테이너가 토큰 교환 서비스에 연결할 수 있습니다. -
-e
인수는 Docker 컨테이너에 필요한 환경 변수를 설정합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-
Docker 컨테이너 구성 요소 (Linux) 에서 스트림 관리자 사용
스트림 관리자 구성 요소를 사용하여 Greengrass 구성 요소의 데이터 스트림을 관리할 수 있습니다. 이 구성 요소를 사용하면 데이터 스트림을 처리하고 대용량 IoT 데이터를 로 전송할 수 있습니다. AWS 클라우드 AWS IoT Greengrass 스트림 관리자 SDK 구성 요소와 상호 작용하는 데 사용하는 스트림 관리자를 제공합니다. 자세한 내용은 Greengrass 코어 디바이스의 데이터 스트림 관리 단원을 참조하십시오.
참고
이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.
Docker 컨테이너 구성 SDK 요소에서 스트림 관리자를 사용하려면 다음 매개 변수를 사용하여 Docker 컨테이너를 실행해야 합니다.
-
인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다.
--network=host
이 옵션을 사용하면 Docker 컨테이너가 로컬 TLS 연결을 통해 스트림 관리자 구성 요소와 상호 작용할 수 있습니다. 이 인수는 리눅스용 Docker에서만 작동합니다.주의
이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 이 옵션은 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 덜 안전합니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때는 이 점을 고려하세요. 자세한 내용은 Docker 설명서의 네트워크: 호스트를
참조하십시오. -
인증을 요구하도록 스트림 관리자 구성 요소를 구성하는 경우 (기본 동작),
AWS_CONTAINER_CREDENTIALS_FULL_URI
환경 변수를 Greengrass nucleus가 구성 요소에 제공하는 값으로 설정합니다. 자세한 내용은 스트림 관리자 구성을 참조하십시오. -
기본이 아닌 포트를 사용하도록 스트림 관리자 구성 요소를 구성하는 경우 프로세스 간 통신 (IPC) 을 사용하여 스트림 관리자 구성 요소 구성에서 포트를 가져오십시오. 사용할 추가 옵션을 사용하여 Docker 컨테이너를 실행해야 합니다. IPC 자세한 내용은 다음 자료를 참조하십시오.
예제 레시피: Docker 컨테이너 구성 요소 (Python) 의 S3 버킷으로 파일 스트리밍
다음 레시피는 파일을 생성하여 S3 버킷으로 스트리밍하는 예제 Docker 컨테이너 구성 요소를 정의합니다. 이 레시피의 속성은 다음과 같습니다.
-
스트림 관리자 구성 요소는 종속성입니다. 이러한 종속성을 통해 구성 요소는 스트림 관리자를 SDK 사용하여 스트림 관리자 구성 요소와 상호 작용할 수 있습니다.
-
Docker 이미지를 Amazon S3의 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트. TAR
-
이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행
명령에는 다음과 같은 인수가 포함됩니다. -
--network=host
인수는 호스트 네트워크에 대한 컨테이너 액세스를 제공하므로 컨테이너를 스트림 관리자 구성 요소에 연결할 수 있습니다. -
첫 번째
-e
인수는 Docker 컨테이너에 필요한AWS_CONTAINER_AUTHORIZATION_TOKEN
환경 변수를 설정합니다. -
추가
-e
인수는 이 예제에서 사용하는 환경 변수를 설정합니다. -
-v
인수는 구성 요소의 작업 폴더를 컨테이너에 마운트합니다. 이 예제에서는 스트림 관리자를 사용하여 작업 폴더에 파일을 생성하여 Amazon S3에 해당 파일을 업로드합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-