현재 Elastic Beanstalk에 Docker 플랫폼 버전 을 사용하고 있다.
CLI 대신 Console을 통해 수동배포를 진행하였다. CI/CD을 도입하지 않은 이유는 수동배포가 왜 불편한지 알고싶었고 CI/CD 적용해야 되는 이유를 찾고싶었다 그래서 수동배포로 먼저 작업을 하기로 결정하였다.
배포 할 수 있는 방식은 크게 3가지 정도로 보였다.
1. docker-compose.yml 파일을 그대로 업로드
2. Dockerrun.aws.json 파일을 작성하여 업로드
3. 파일을 .zip 압축하여 업로드
현재 회사에서 도커를 사용할 때는 프라이빗 저장소를 이용할 것이다. DockerHub에서 제공해주는 private Repository에 이용하고 있다.
아쉽게도 1번 방법인 docker-compose.yml 파일을 그대로 올릴 경우에는 프라이빗 저장소에 접근할 수 없다. 왜냐하면 docker login을 해야하는데 docker-compose.yml 에서 인증할 수 있는 Form을 제공해주지 않는다.
그래서 프라이빗 저장소에 접근하여 이미지를 가져올 수 있는 2번째 방법 Dockerrun.aws.json 파일을 작성하는 방법을 택했다.
Dockerrun.aws.json 기존 작성 방법
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"bucket": "elasticbeanstalk-ap-northeast-2-993880401246",
"key": "config.json"
},
"Image": {
"Name": "dmin3/myrepository:web-pos",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "8080",
"HostPort": "8080"
}
]
}
첫째 줄에 AWSEBDockerrunVersion 은 1,2,3 이 존재한다.1 버전은 컨테이너를 하나만 띄울 수 있는거 같다.2 버전은 멀티 컨테이너를 지원해준다. 그래서 서로 작성하는 방법이 조금 다르다. 자세한 것은 구글링을 해보자.
3 버전과 1 버전이 사실 뭐가 다른지는 잘 모르겠지만 대충 버전 1과 버전 2를 합쳐놓은 느낌이였다.
다시 돌아와, 위에 Dockerrun.aws.json 파일로도 이미지를 배포할 수 있었다. 문제는 나는 분명히 컨테이너 포트와 호스트 포트를 연동해주었기에 이미지를 배포하여 자동으로 컨테이너가 띄워지고 port 8080 : 8080 포트 포워딩이 되었을꺼라고 예상하였다.
나의 생각과 다르게 이미지까지는 가져왔으나 컨테이너가 띄워지지 않았다. 그래서 찾아보니 EB가 인식을 못하는 경우가 있으니 EB에 기존포트인 5000번과 연동을 해보라고 하였다. 하지만 되지 않았다.
그래서 나는 새로운 방법을 찾아봐야했다. 래퍼런스가 부족했기에 몇번의 삽질 끝에 내가 찾은 방법은 3번째 방법인 .zip 파일을 만들어 배포해주는 방식을 택했다.
Dockerrun.aws.json 신규 작성 방법
Dockerrun.aws.json 작성
AWSEBDockerrunVersion 은 “3” 으로 그리고 Authentication 만 작성하고 이미지를 가져오는 파일을 `docker-compose.yml` 따로 작성한다.
{
"AWSEBDockerrunVersion": "3",
"Authentication": {
"bucket": "elasticbeanstalk-ap-northeast-2-993880401246",
"key": "config.json"
}
}
Docker Hub 프라이빗 저장소에 올라간 이미지를 가져오기 위한 설정이다.
docker-compose.yml 작성하기
version: "3"
services:
app:
container_name: wep-pos
image: dmin3/myrepository:web-pos
ports:
- "8080:8080"
restart: always
컨테이너를 띄우기 위한 설정이다.
두 파일 압축해주기 ( 같은 경로에 파일이 있어야 함.)
$ zip -r "hello.zip" Dockerrun.aws.json docker-compose.yml
파일을 두개를 클릭해서 압축 해주어 hello.zip 을 만들고 ElasticBeanstalk 콘솔 창에서 [업로드 및 배포]를 클릭하고 hello.zip 을 배포 해주면 된다.
EC2에 들어가서 확인해보니 문제없이 이미지를 가져오고 내가 설정한 포트대로 포트포워딩을 해주어 컨테이너를 띄워주었다.
참고링크
[Elastic Beanstalk]에서 Private DockerHub 이미지 가져오기 및 CI/CD 없이 배포하기
[Elastic Beanstalk]에서 Private DockerHub 이미지 가져오기 및 CI/CD 없이 배포하기
Private DockerHub 이미지 가져오는 방법 설정 사전조건 1. Elastic BeanStalk가 실행되고 있어야 한다. 2. DockerHub ID가 있어야 된다. 3. Private Repository가 존재해야 한다. 4. Private Repository에 Dockerfile로 작성한
dmin3.tistory.com
도커 구성 - AWS Elastic Beanstalk
두 파일은 루트에 있거나, .zip 아카이브의 최상위에 있어야 합니다. 파일을 포함하는 디렉터리에서 아카이브를 빌드하지 마십시오. 해당 디렉터리로 이동한 후 아카이브를 빌드하십시오. 두 파
docs.aws.amazon.com
'AWS' 카테고리의 다른 글
| [AWS] Route53 사용하지 않고 SSL 인증서만 사용하는 방법 With NameCheap (0) | 2023.04.18 |
|---|---|
| [Route53] 네임서버 및 SSL 구축 방법 (0) | 2023.04.14 |
| [Elastic Beanstalk]에서 Private DockerHub 이미지 가져오기 및 CI/CD 없이 배포하기 (0) | 2023.04.14 |
| [AWS] EC2 + Docker Log + CloudWatch로 보내기 (0) | 2023.04.10 |
| EC2에 스프링부트 배포 (0) | 2023.04.04 |