EC2 + 도커를 이용하여 배포하기

밀크야살빼자·2024년 7월 8일
0

EC2

인스턴스 생성

  1. 인스턴스 시작 버튼을 누룹니다.

  2. 인스턴스 이름을 작성하고, AMI를 선택합니다.

    AMI란
  1. 새 키 페어 생성 버튼을 누릅니다.

키 페어란?
네트워크 설정
스토리지 구성

  1. 인스턴스 시작 눌러서 생성합니다.

인스턴스 연결

  1. 인스턴스 ID를 클릭합니다.

  2. 오른쪽 상단의 연결 버튼을 누릅니다.

  3. EC2 Instance Connect을 사용하여 연결을 눌러 shell에 접속합니다.

EC2에 Docker 설치하기

  1. APT 업데이트
    다음 명령어를 통해 우분투 패키지를 다운 받을 때 사용하는 api를 업데이트 해줍니다.
    sudo apt update
  1. Docker 다운로드
    다음 명령어를 통해 Docker를 설치합니다.

    sudo apt install docker.io
    sudo apt install docker-compose
  1. Git Version
    다음 명령어를 통해 우분투 이미지에서 제공되는 git이 설치되어 있는지 확인합니다.
    git --version

Docker

Dockerfile 파일 작성

Dockerfile

  • 컨테이너를 어떻게 만들어야 하는지에 대한 설명서(요리로 치면 레시피와 같은 것)
  1. 프로젝트 루트 경로에 Dockerfile을 생성
  1. Dockerfile을 구성
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
명령어설명
From생성할 이미지의 베이스가 될 이미지
CMD컨테이너가 시작될 때마다 실행할 명령어 설정
MAINTAINER이미지를 생성한 개발자 정보
ARG빌드한 jar 파일의 위치를 변수로 설정
COPY, ADD- copy는 로컬 디렉터리에서 읽어들인 컨텍스트로부터 이미지에 파일을 복사하는 역할
- add는 외부 url 및 tar 파일에서도 파일을 추가할 수 있다.(권장x)
ENTRYPOINT컨테이너가 실행될 때 기본적으로 실행될 명령어를 설정, 이 경우에는 Java 애플리케이션을 실행하는 명령어
EXPOSEDockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정
RUN이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행
WORKDIR명령어를 실행할 디렉터리를 나타냄. 컨테이너 내부에서 작동

이미지 생성

이미지(=클래스)

  • Dockerfile을 통해 image를 만듦
  • 어플리케이션에 필요한 모든 세팅들이 포함되어 있음
  • 실행되고 있는 어플리케이션을 스냅샷해서 이미지로 만든 것으로 불변의 상태
  • 객체지향 언어에서 클래스와 같은 역할을 함
# 컨테이너 이미지 생성
docker build -f Dockerfile -t school-docker .
  • . : 도커에게 도커파일이 현재 경로에 있다는 것을 알려줌
  • -f : 어떤 도커파일을 사용할 것인지 명시
  • -t : 도커 이미지의 이름을 부여
  1. 도커 로그인 하기

    docker login -u [username]

  2. Docker 이미지 생성

    docker build -f Dockerfile -t [사용자 이름]/[school-docker] .
  • 이미지 빌드 시, 아래와 같은 에러가 발생하는데, 이는 빌드 플랫폼이 ec2와 맥북m2간의 호환성이 안 맞는 문제입니다.

    The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested standard_init_linux.go:228: exec user process caused: exec format error

  • 따라서 아래와 같이 명령문을 써서 빌드 해주면 됩니다.
    	docker build --platform linux/amd64 - Dockerfile -t seosonghyeon/school .

  1. 이미지 생성이 잘 됐는지 확인
    docker images

Docker 이미지를 Docker 허브에 올리기

  1. Docker Hub에 올리기

    docker push [dockerHub ID]/[image 파일명]

  2. 제대로 푸시가 됐는지 확인 합니다.

    docker images

컨테이너 실행

컨테이너(=인스턴스)

  • 이미지를 만들어서 컨테이너를 구동할 수 있다.
  • 이미지를 고립된 환경에서 개별적인 그 파일 시스템 안에서 실행할 수 있다.
  • 컨테이너 안에서 어플리케이션이 동작한다.
  • Host Port와 Container Port를 연결하기 위해 포트 번호를 적어준다.
# 컨테이너 생성 및 실행
docker run -d --name <컨테이너 이름> -p 8080:8080 <실행할 이미지>

EC2 Docker 배포하기

EC2에서 Docker Hub에 올린 이미지를 다운로드 받아서 실행 시킵니다.

  1. Docker Image 컨테이너화

    docker run -d -p 8080:8080 [DockerHub Id]/[이미지명]
  2. 컨테이너 실행 확인

    // 실행중인 컨테이너 확인
    docker ps
    
    // 정지된 컨테이너 확인(실행중인 것도 같이 출력됨)
    docker ps -a

📚 참고 자료

profile
기록기록기록기록기록

0개의 댓글