회사에서 프로젝트를 하던 중에 ECR로 받아온 Dockerfile이 EC2 인스턴스가 중지되고 다시 시작(재실행)되면 docker run이 exited 에러가 발생하는 문제가 있었다.
따라서 오늘은 EC2가 시작될 때마다 docker run 명령어가 들어있는 shell script가 작동하게 만들어서 exited 에러가 발생하지 않게 해주는 방법에 대해 소개하고자 한다.
1. EC2 Connect를 통해 EC2 터미널에 접속
# 관리자 모드로 들어간다.
sudo su
# root 폴더로 이동
cd /
# root 폴더에 있는 리스트 확인
ls
# cloud-init 설정 변경
vi /etc/cloud/cloud.cfg
# 파일 내용에서
cloud_config_modules:
- runcmd -> - [runcmd, always]로 수정
cloud_final_modules
- scripts-user -> -[scripts-user, always]로 수정
# 파일 맨 마지막 부분에 추가
runcmd:
- [ sh, /server/test.sh ] # server라는 폴더에 test shell script를 실행시키겠다.
2. 변경된 내용 저장
키보드 esc 누른 다음 :wq!
# server라는 이름의 폴더 만들기
mkdir server
# 잘 만들어졌는지 확인
ls
# server 폴더에 접근
cd server
# test라는 shell 스크립트 만들기
vi test.sh
※ test.sh에 들어갈 내용
- myip="$(dig +short myip.opendns.com @resolver1.opendns.com)" => mysql host 주소(EC2 Public ip)를 찾기
- sudo service docker start => 항상 docker 재시작
- "paramApiKey=${myip}" : docker run 할 때 mysql host 정보를 parameter 값으로 넘긴다.
#cloud-boothook
#!/bin/bash
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "My WAN/Public IP address: ${myip}"
sudo service docker start
sudo docker run -d -p 3306:3306 [ecr 주소]
sudo docker run -d -p 8080:8080 -e "paramApiKey=${myip}" [ecr 주소]
이제 EC2를 중지시켰다가 실행시켜도 docker run이 잘 실행되는 것을 볼 수 있다.
'Cloud&Infra > AWS' 카테고리의 다른 글
AWS QLDB: 무엇이고 왜 필요한가?(블록체인과의 차이점) (0) | 2023.05.13 |
---|---|
AWS Command Line Interface(CLI) 기본개념 및 설치방법 (0) | 2023.05.11 |
Local MySQL dump를 EC2로 import하는 방법 (0) | 2023.04.07 |
AWS EC2에 MySQL 설치하기 (0) | 2023.04.06 |
AWS ECS CLI 설치 (0) | 2023.03.23 |