Dockerrun.aws.json

bunny.log·2023년 7월 5일
0


어플리케이션이 하나이고 도커파일이 하나 일때는 도커 파일을 Elastic beanstalk에 전달하면 EB가 알아서 그 빌드된 이미지를 돌려서 어플리케이션을 실행합니다. 그래서 아무런 설정을 해주지 않아도 됩니다.

하지만 Full Stack App의 경우 노드, Mysql, Nginx등을 위한 Dockerfile이 여러개이고 EB가 어떤 파일을 먼저 실행할지 등에 대하여 자동으로 프로세스를 해나갈수 없습니다.

그래서 그에 대한 설정을 따로 해주는 파일이 Dockerrun.aws.json입니다.

AWS에서 말하는 Dockerrun.aws.json 파일의 정의

Dockerrun.aws.json 파일은 Docker 컨테이너 세트를 Elastic Beanstalk 애플리케이션으로 배포하는 방법을 설명하는 Elastic Beanstalk 고유의 JSON 파일입니다. Dockerrun.aws.json 파일을 멀티 컨테이너 Docker 환경에 사용 할수 있습니다.

Dockerrun.aws.json은 환경에서 각 컨테이너 EC2 인스턴스(Docker 컨테이너를 호스트하는 Amazon EC2 인스턴스)에 대해 배포할 컨테이너 및 탑재할 컨테이너의 호스트 인스턴스에서 생성할 데이터 볼륨을 설명 합니다.

Docker run.aws.json이 어떻게 다중 컨테이너를 작동 시킬지 알려준다.

AWS에서 말하는 Task Definition(작업 정의)에서 지정 할수 있는 것들

  • 작업의 각 컨테이너에 사용할 도커 이미지
  • 각 작업 또는 작업 내 각 컨테이너에서 사용할 CPU 및 메모리의 양
  • 사용할 시작 유형으로서 해당 작업이 호스팅되는 인프라를 결정
  • 작업의 컨테이너에 사용할 도커 네트워킹 모드
  • 작업에 사용할 로깅 구성
  • 컨테이너가 종료 또는 실패하더라도 작업이 계속 실행될지 여부
  • 컨테이너 시작 시 컨테이너가 실행할 명령
  • 작업의 컨테이너에서 사용할 데이타 볼륨
  • 작업에서 사용해야 하는 IAM 역할

이 작업 정의를 등록하려면 Container Definition을 명시해줘야 한다. 그리고 Container Definition은 docker run.aws.json에 명시해 주며 도커 데몬으로 전해진다.

Dockerrun.aws.json

name
컨테이너의 이름입니다.

hostname
호스트 이름입니다. 다른 컨테이너에서 접근이 가능합니다. (도커컴포즈를 이용해 생성된 다른 컨테이너)

essential
1. nginx 경우 모든 컨테이너가 죽으면 다른 컨테이너들이 작업을 할수 없기 때문에 essential을 true로 준다.
2. 필수적이지 않은 컨테이너는 나머지 컨테이너에 영향을 미치지 않고 종료될수 있습니다.
컨테이너가 실패할 경우 작업을 중지해야 하면 true

Memory
컨테이너용으로 예약할 컨테이너 인스턴스에 있는 메모리 양입니다.
컨테이너 정의에서 memory 또는 memoryReservation 파라미터 중 하나 또는 모두에 0이 아닌 정수를 지정하면 됩니다.

PortMappings
컨테이너에 있는 네트워크 지점을 호스트에 있는 지점에 매핑합니다.

Links
연결할 컨테이너의 목록입니다. 연결된 컨테이너는 서로를 검색하고 안전하게 통신할 수 있습니다.

📄 Dockerrun.aws.json

{
	“AWSEBDockerrunVersion”:2,
	“containerDefinitaions”:[
		{
			“name”: “frontend”,
			“image”: “도커허브아이디/도커컨테이너이름”,
			“hostname”:false,
			“essential”: false,
			“memory”: 128
		},
		{
			“name”: “backend”,
			“image”: “도커허브아이디/도커컨테이너이름”,
			“hostname”:false,
			“essential”: false,
			“memory”: 128

		},
		{
			“name” : “nginx”,
			“image”: “도커허브아이디/도커컨테이너이름”,
			“hostname”: nginx,
			#nginx가 죽으면 프론트엔드, 백엔드에 모두 요청이 안가기 때문에 값을 true로 필수적으로 생각해준다.
			“essential”: false,
			“portMappings”:[
				{
					“hostPort”:80,
					“containerPort”:80
				}
			],
			#nginx는 프론트와 백엔드 둘다 연결해준다.
			“links” : [“frontend”, “backend”],
			“memory”:128
		}
	]
}













참고
https://www.inflearn.com/course/lecture?courseSlug=%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-ci&unitId=52168&tab=curriculum

profile
https://github.com/nam-yeun-hwa

0개의 댓글