Search

run_redis_backend_deploy.sh

EC2 인스턴스에 Docker 컨테이너를 배포하기 위한 Bash 셸 스크립트
#!/bin/bash image_name="ghcr.io/annsunghee/redis-spring-server" image_tag="latest" GHCR_TOKEN="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" GITHUB_ACTOR="Annsunghee" key_file="/home/ec2-user/deploy-test.pem" username="ec2-user" internal_ec2_ip="172.31.22.18" archive_file="redis-spring-server.tar.gz" echo "GITHUB_ACTOR: $GITHUB_ACTOR" echo "$GHCR_TOKEN" | docker login ghcr.io --username "$GITHUB_ACTOR" --password-stdin docker pull "$image_name:$image_tag" docker save "$image_name:$image_tag" > redis-spring-server.tar gzip redis-spring-server.tar scp -i "$key_file" "$archive_file" "$username"@"$internal_ec2_ip":~/backend_download/ ./connect_private_ec2_instance.sh <<EOF cd backend_download tar zxf "$archive_file" ls echo "image_name: $image_name" echo "image_tag: $image_tag" ls -al docker load -i redis-spring-server.tar.gz rm -rf * cd ~/bastion-redis-backend-deploy docker-compose up -d EOF rm -f "$archive_file" docker logout
JSON
복사
1.
#!/bin/bash: 이 줄은 "shebang"이라고 하며 스크립트를 실행하는 데 사용할 인터프리터를 지정합니다(이 경우 Bash).
2.
image_name="ghcr.io/annsunghee/redis-spring-server": 이 image_name 변수는 배포에 사용할 Docker 이미지의 이름을 저장합니다. 이미지는 저장소 "annsunghee/redis-spring-server" 아래의 GitHub Container Registry(ghcr.io)에서 호스팅됩니다.
3.
image_tag="latest": 이 image_tag 변수는 가져올 Docker 이미지의 태그를 저장합니다. 이 경우 "최신"으로 설정됩니다.
4.
GHCR_TOKEN="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": 이 GHCR_TOKEN 변수에는 GitHub Container Registry 인증을 위한 GitHub 개인 액세스 토큰(PAT)이 포함되어 있습니다. 나중에 레지스트리에 로그인하는 데 사용됩니다.
5.
GITHUB_ACTOR="Annsunghee": 이 변수 GITHUB_ACTOR는 작업과 관련된 GitHub 사용자 이름을 저장합니다.
6.
key_file="/home/ec2-user/deploy-test.pem": 이 변수 key_file은 EC2 인스턴스에 대한 SSH 액세스에 필요한 개인 키 파일의 경로를 저장합니다.
7.
username="ec2-user": 이 username 변수는 EC2 인스턴스에 대한 SSH 액세스를 위한 사용자 이름을 저장합니다.
8.
internal_ec2_ip="172.31.22.18": 이 변수 internal_ec2_ip는 EC2 인스턴스의 내부 IP 주소를 저장합니다.
9.
archive_file="redis-spring-server.tar.gz": 이 archive_file 변수는 Docker 이미지를 EC2 인스턴스로 전송하는 데 사용할 아카이브 파일의 이름을 저장합니다.
10.
echo "GITHUB_ACTOR: $GITHUB_ACTOR": 이 줄은 단순히 GITHUB_ACTOR 변수의 값을 콘솔에 출력합니다.
11.
echo "$GHCR_TOKEN" | docker login ghcr.io --username "$GITHUB_ACTOR" --password-stdin: 이 행은 docker login 명령을 사용하여 GitHub Container Registry에 로그인합니다. stdin을 통해 비밀번호로 GHCR_TOKEN을 전달하고 인증을 위한 사용자 이름으로 GITHUB_ACTOR를 사용합니다.
12.
docker pull "$image_name:$image_tag": 이 줄은 이전에 정의된 image_nameimage_tag를 사용하여 GitHub Container Registry에서 지정된 Docker 이미지를 가져옵니다.
13.
docker save "$image_name:$image_tag" > redis-spring-server.tar: 이 줄은 Docker 이미지를 "redis-spring-server.tar"라는 tar 아카이브로 저장합니다.
14.
gzip redis-spring-server.tar: 이 줄은 tar 아카이브를 "redis-spring-server.tar.gz"로 압축합니다.
15.
scp -i "$key_file" "$archive_file" "$username"@"$internal_ec2_ip":~/backend_download/: 이 줄은 SSH 개인 키(key_file)를 사용하여 압축된 Docker 이미지 아카이브를 EC2 인스턴스로 전송하기 위해 scp(보안 사본)를 사용합니다.
16.
./connect_private_ec2_instance.sh <<EOF: 이 줄은 "connect_private_ec2_instance.sh"라는 스크립트를 실행하고 here-document(EOF)를 사용하여 여러 명령을 스크립트에 전달합니다.
17.
here-document 내의 다음 줄은 EC2 인스턴스에서 실행됩니다.
cd backend_download: "backend_download" 디렉토리로 변경합니다.
tar zxf "$archive_file": 압축된 Docker 이미지 아카이브를 추출합니다.
ls: 현재 디렉터리의 내용을 나열합니다(추출된 Docker 이미지 파일이 표시되어야 함).
echo "image_name: $image_name": image_name 변수 값을 출력합니다.
echo "image_tag: $image_tag": image_tag 변수 값을 출력합니다.
ls -al: 현재 디렉토리의 자세한 내용을 나열합니다(권한 및 소유권 포함).
docker load -i redis-spring-server.tar.gz: 아카이브에서 로컬 Docker 이미지로 Docker 이미지를 로드합니다.
rm -rf *: 현재 디렉토리에 있는 모든 파일과 디렉토리를 제거합니다.
18.
cd ~/bastion-redis-backend-deploy: EC2 인스턴스에서 "bastion-redis-backend-deploy" 디렉터리로 변경합니다.
19.
docker-compose up -d: "docker-compose.yml" 파일에 정의된 Docker 컨테이너를 분리 모드로 시작합니다.
20.
EOF: here-document의 끝을 알립니다.
21.
rm -f "$archive_file": 이 줄은 압축된 로컬 Docker 이미지 아카이브를 제거합니다.
22.
docker logout: 이 줄은 GitHub Container Registry에서 로그아웃합니다.
요약하면 이 스크립트는 GitHub Container Registry에 로그인하고 Docker 이미지를 가져오고 tar 아카이브로 저장하고 압축하고 EC2 인스턴스로 전송한 다음 Docker Compose를 사용하여 이미지를 배포합니다. 특정 사용 사례를 위해 설계되었으며 필요한 SSH 키와 Docker Compose 구성이 이미 EC2 인스턴스에 설정되어 있다고 가정합니다.