기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Elastic Beanstalk에 배포하도록 Docker 이미지 준비
이 섹션에서는 AL2 또는 AL2023 플랫폼 브랜치를 실행하는 Docker를 사용하여 Elastic Beanstalk에 배포하도록 Docker 이미지를 준비하는 방법을 설명합니다. 필요한 구성 파일은 이미지가 로컬인지, 원격인지 아니면 Docker Compose를 사용하는지 여부에 따라 달라집니다.
참고
Docker 환경을 시작하는 절차의 예제는 Docker에 대한 QuickStart 주제를 참조하세요.
주제
Elastic Beanstalk에서 Docker Compose로 이미지 관리
Docker Compose를 사용하여 하나의 YAML 파일에서 다양한 서비스를 관리하도록 선택할 수 있습니다. Docker Compose에 대한 자세한 내용은 Docker 웹 사이트에서 Why use Compose?
-
docker-compose.yml
를 만듭니다. 이 파일은 Docker Compose를 사용하여 Elastic Beanstalk로 애플리케이션을 관리하는 경우에 필요합니다. 모든 배포를 퍼블릭 리포지토리의 이미지에서 가져온 경우 다른 구성 파일은 필요하지 않습니다. 배포의 소스 이미지가 프라이빗 리포지토리에 있는 경우 몇 가지 추가 구성을 해야 합니다. 자세한 내용은 프라이빗 리포지토리의 이미지 사용을 참조하세요.docker-compose.yml
파일에 대한 자세한 내용은 도커 웹 사이트에서 구성 파일 참조를 확인하십시오. -
Dockerfile
은 선택 사항입니다. 로컬 사용자 지정 이미지를 빌드하고 실행하는 데 Elastic Beanstalk가 필요한 경우 파일을 하나 생성합니다.Dockerfile
에 대한 자세한 내용은 도커 웹 사이트의 도커파일 참조를 확인하십시오. -
.zip
파일을 생성해야 할 수 있습니다.Dockerfile
파일만 사용하여 애플리케이션을 배포할 경우에는 이 파일을 생성할 필요가 없습니다. 추가 구성 파일을 사용하는 경우 .zip 파일에는Dockerfile
,docker-compose.yml
파일, 애플리케이션 파일 및 모든 애플리케이션 파일 종속성이 포함되어야 합니다.Dockerfile
및docker-compose.yml
은 루트에 있거나, .zip 아카이브의 최상위에 있어야 합니다. EB CLI를 사용하여 애플리케이션을 배포하면 .zip 파일이 생성됩니다.
도커 구성에 대한 자세한 내용과 설치 방법은 도커 사이트에서 도커 구성 개요
Elastic Beanstalk에서 Docker Compose 없이 이미지 관리
Docker Compose를 사용하여 Docker 이미지를 관리하지 않는 경우 Dockerfile
, Dockerrun.aws.json
파일 또는 둘 다를 구성해야 합니다.
-
Dockerfile
을 생성하여 Elastic Beanstalk를 빌드하고 사용자 지정 이미지를 로컬에서 실행합니다. -
호스팅되는 리포지토리에서 Elastic Beanstalk로 Docker 이미지를 배포하도록
Dockerrun.aws.json v1
파일을 생성합니다. -
.zip
파일을 생성해야 할 수 있습니다. 파일,Dockerfile
또는Dockerrun.aws.json
중 하나만 사용하는 경우 .zip 파일을 생성할 필요가 없습니다. 두 파일을 모두 사용하는 경우 .zip 파일이 필요합니다. .zip 파일에는 애플리케이션 파일과 애플리케이션 파일 종속성이 포함된 파일과 함께Dockerfile
및Dockerrun.aws.json
이 모두 포함되어야 합니다. EB CLI를 사용하여 애플리케이션을 배포하면.zip
파일이 생성됩니다.
Dockerrun.aws.json
v1 구성 파일
Dockerrun.aws.json
파일은 원격 도커 이미지를 Elastic Beanstalk 애플리케이션으로서 배포하는 방법을 설명합니다. 이 JSON 파일은 Elastic Beanstalk에 고유합니다. 애플리케이션이 호스팅되는 리포지토리에서 사용할 수 있는 이미지에서 실행되는 경우 Dockerrun.aws.json v1
파일에 해당 이미지를 지정하여 Dockerfile
을 생략할 수 있습니다.
Dockerrun.aws.json 버전
AWSEBDockerrunVersion
파라미터는 Dockerrun.aws.json
파일의 버전을 나타냅니다.
-
Docker AL2 및 AL2023 플랫폼은 다음과 같은 버전의 파일을 사용합니다.
Dockerrun.aws.json v3
- Docker Compose를 사용하는 환경.
Dockerrun.aws.json v1
- Docker Compose를 사용하지 않는 환경.
-
Amazon Linux 2에서 실행되는 ECS 및 AL2023에서 실행되는 ECS는
Dockerrun.aws.json v2
파일을 사용합니다. 사용 중지된 플랫폼인 ECS-다중 컨테이너 Docker Amazon Linux AMI(AL1)도 동일한 버전을 사용했습니다.
Dockerrun.aws.json v1
파일에 유효한 키 및 값에는 다음 연산이 포함됩니다.
- AWSEBDockerrunVersion
-
(필수) Docker Compose를 사용하여 이미지를 관리하지 않는 경우 버전 번호
1
을 지정합니다. - 인증
-
(프라이빗 리포지토리의 경우에만 필수)
.dockercfg
파일을 저장하는 Amazon S3 객체를 지정합니다.이 장의 뒷부분에서 프라이빗 리포지토리의 이미지사용 단원의 Elastic Beanstalk에서 프라이빗 리포지토리의 이미지 사용 섹션을 참조하세요.
- 이미지
-
기존 도커 리포지토리에서 도커 컨테이너를 구축할 도커 기본 이미지를 지정합니다. Name 키의 값을 도커 허브의 이미지의 경우에는
<organization>/<image name>
형식으로, 다른 사이트의 경우에는<site>/<organization name>/<image name>
형식으로 지정합니다.Dockerrun.aws.json
파일에서 이미지를 지정하면 Elastic Beanstalk 환경의 각 인스턴스가docker pull
을 실행하여 이미지를 실행합니다. 경우에 따라 Update 키를 포함합니다. 기본값은true
로, Elastic Beanstalk에 리포지토리를 확인하고 이미지에 대한 모든 업데이트를 가져와 캐시된 이미지를 덮어쓰도록 지시합니다.Dockerfile
을 사용하는 경우에는Dockerrun.aws.json
파일에서 Image 키를 지정하지 마십시오. Elastic Beanstalk는Dockerfile
이 있는 경우 이 파일에 명시된 이미지를 빌드하여 사용합니다. - 포트
-
(Image 키를 지정하는 경우 필수) 도커 컨테이너에서 노출할 포트를 나열합니다. Elastic Beanstalk에서는 ContainerPort 값을 사용하여 호스트에서 실행 중인 역방향 프록시에 도커 컨테이너를 연결합니다.
컨테이너 포트를 여러 개 지정할 수 있지만 Elastic Beanstalk는 첫 번째 포트만 사용합니다. 이 포트를 사용하여 컨테이너를 호스트의 역방향 프록시에 연결하고 퍼블릭 인터넷에서 요청을 라우팅합니다.
Dockerfile
을 사용할 경우, 첫 번째 ContainerPort 값은Dockerfile
의 EXPOSE 목록 내 첫 번째 항목과 일치해야 합니다.경우에 따라서는 HostPort 내 포트 목록 지정도 가능합니다. HostPort 항목은 ContainerPort 값이 매핑되는 호스트 포트를 지정합니다. HostPort 값을 지정하지 않으면 ContainerPort 값으로 기본 지정됩니다.
{ "Image": { "Name": "
image-name
" }, "Ports": [ { "ContainerPort":8080
, "HostPort":8000
} ] } - 볼륨
-
EC2 인스턴스의 볼륨을 도커 컨테이너로 매핑합니다. 매핑할 볼륨 어레이를 하나 이상 지정합니다.
{ "Volumes": [ { "HostDirectory": "
/path/inside/host
", "ContainerDirectory": "/path/inside/container
" } ] ... - 로그
-
컨테이너에 애플리케이션에서 로그를 쓸 디렉터리를 지정합니다. 테일 또는 번들 로그를 요청하면 Elastic Beanstalk에서는 이 디렉터리의 로그를 Amazon S3에 업로드합니다. 로그를 이 디렉터리 내의
rotated
폴더로 교체하는 경우 영구 저장을 위해 교체된 로그를 Amazon S3로 업로드하도록 Elastic Beanstalk를 구성할 수도 있습니다. 자세한 내용은 Elastic Beanstalk 환경에서 Amazon EC2 인스턴스 로그 보기 섹션을 참조하세요. - Command
-
컨테이너에서 실행할 명령을 지정합니다. 진입점을 지정하고 나면 명령이 진입점에 대한 인수로서 추가됩니다. 자세한 내용은 도커 설명서의 CMD
를 참조하십시오. - 진입점
-
컨테이너 시작 시 실행할 기본 명령을 지정합니다. 자세한 내용은 도커 설명서의 ENTRYPOINT
을 참조하십시오.
다음 코드 조각은 단일 컨테이너에 대한 Dockerrun.aws.json
파일의 구문을 보여 주는 예입니다.
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "janedoe/image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx",
"Entrypoint": "/app/bin/myapp",
"Command": "--argument"
}>
Elastic Beanstalk에 Dockerrun.aws.json
파일만 제공하거나, .zip
파일과 Dockerrun.aws.json
파일을 모두 포함하는 Dockerfile
아카이브를 제공할 수 있습니다. 이 섹션의 뒷부분에서 설명하는 것처럼 두 파일을 모두 제공하는 경우 Dockerfile
은 도커 이미지를 명시하고, Dockerrun.aws.json
파일은 배포에 대한 추가 정보를 제공합니다.
참고
두 파일은 루트에 있거나, .zip
아카이브의 최상위에 있어야 합니다. 파일을 포함하는 디렉터리에서 아카이브를 빌드하지 마십시오. 해당 디렉터리로 이동한 후 아카이브를 빌드하십시오.
두 파일을 모두 제공하는 경우 Dockerrun.aws.json
파일에 이미지를 지정하지 마십시오. Elastic Beanstalk는 Dockerfile
에 명시된 이미지를 빌드하여 사용하고 Dockerrun.aws.json
파일에 지정된 이미지는 무시합니다.
도커파일을 사용하여 사용자 지정 이미지 빌드
리포지토리에서 호스팅되는 기존 이미지가 아직 없는 경우 Dockerfile
을 생성해야 합니다.
다음은 코드 조각은 Dockerfile
의 예입니다. Docker에 대한 QuickStart의 지침을 따르는 경우 이 Dockerfile
을 덮어쓰도록 업로드할 수 있습니다. 이 Dockerfile
을 사용하는 경우 Elastic Beanstalk에서는 게임 2048을 실행합니다.
Dockerfile
에 포함시킬 수 있는 명령에 대한 자세한 내용은 도커 웹 사이트의 도커파일 참조
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
참고
단일 도커 파일에서 다단계 빌드를 실행하여 복잡성을 크게 줄이면서 작은 크기의 이미지를 생성할 수 있습니다. 자세한 내용은 도커 문서 웹 사이트에서 다단계 빌드 사용