ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker를 이용한 Spring boot 서버 배포하기
    Docker 2024. 9. 15. 00:17

    프로젝트 폴더에 Dockerfile 생성 후 작성

    FROM openjdk:17
    ARG JAR_FILE=build/libs/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["nohup","java","-jar","/app.jar","&"]

     

    • FROM openjdk:17:
      • openjdk 버전 17을 기본 이미지로 사용합니다. 이 이미지는 자바 애플리케이션을 실행할 수 있는 환경을 제공합니다.
    • ARG JAR_FILE=build/libs/*.jar:
      • ARG는 빌드 시 사용할 변수를 정의하는 명령입니다. 여기서는 JAR_FILE이라는 이름의 변수를 정의하고, build/libs/ 폴더에 있는 모든 .jar 파일을 가리키도록 설정했습니다.
    • COPY ${JAR_FILE} app.jar:
      • COPY는 호스트 파일 시스템에서 도커 이미지 내부로 파일을 복사하는 명령입니다. ARG에서 정의한 ${JAR_FILE} 경로의 파일을 이미지 내부의 app.jar로 복사합니다.
    • ENTRYPOINT ["nohup","java","-jar","/app.jar","&"]:
      • 도커 컨테이너가 시작될 때 실행할 명령을 정의합니다. 여기서는 nohup 명령을 사용하여 자바 애플리케이션을 백그라운드에서 실행합니다.
      • nohup: 터미널이 종료되더라도 프로세스가 계속 실행되도록 합니다.
      • &: 프로세스를 백그라운드에서 실행하게 만듭니다.
    docker build -f Dockerfile -t nurim_b/20240914 .

    로 도커 이미지 생성

    docker images

    로 이미지 확인

    docker tag <기존 레포지토리 이름>:<기존 태그> <사용자이름>/<레포지토리 이름>:<변경할 태그>

    로 태그 변경 (변경할 레포지토리 이름에 dockerhub에서 생성한 레포지토리 이름을 넣는다)

    docker push <사용자이름>/<레포지토리 이름>:<태그>

     

    %%%%%도커 실행%%%%

     

    docker run -d -p 8080:8080 <레포지토리 이름>:<태그>

     

    • docker run:
      • Docker 컨테이너를 생성하고 실행하는 명령어입니다.
    • -d:
      • "detached" 모드로 컨테이너를 실행합니다. 이 모드에서는 컨테이너가 백그라운드에서 실행되고, 터미널에 제어를 반환합니다. 즉, 컨테이너가 백그라운드에서 실행되며, 터미널은 즉시 사용 가능한 상태가 됩니다.
    • -p 8080:8080:
      • 포트 포워딩을 설정합니다. 왼쪽의 포트(8080은 호스트 머신의 포트)와 오른쪽의 포트(8080은 컨테이너의 포트)를 연결합니다. 즉, 호스트 머신의 8080 포트에 대한 요청이 컨테이너의 8080 포트로 전달됩니다.

     


    aws 도커 이미지를 불러와 실행시키기 

     

    우선 EC2에서 도커 이미지를 불러오기전에 도커를 다운 받아야 한다.

    sudo apt update
    //apt 업데이트
    sudo apt install docker.io
    //도커 다운
    sudo apt install docker-compose
    //도커 컴포즈 다운

    만약 도커 로그인시 문제가 된다면 

    sudo usermod -aG docker $USER

    로 도커 실행권한을 조정

    exit로 나온후 다시 접속하여 로그인

    docker pull <레지스토리 명>/<이미지 명>:<태그>

    로 이미지 다운로드 후

    docker run -d -p 8080:8080 kiwoong487/nurimhub:nurim_B

    로 실행

     

     

    하지만 

    The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested

    라는 에러가 발생했다 

    결론부터 말하자면

    • 로컬에서 빌드한 이미지가 linux/arm64/v8 이므로, 이를 linux/amd64 플랫폼 형태의 이미지로 새롭게 빌드해야 한다
    docker build --platform linux/amd64 -f <도커 파일명> -t <사용자명>/<레포지토리이름>:<이미지 명> .
    docker build --platform linux/amd64 -f Dockerfile -t kiwoong487/nurimhub:b_20240914 .

     

    그 후 

    docker run --platform linux/amd64 -d -p 8080:8080 kiwoong487/nurimhub:b_20240914

    로 실행

    doker ps //실행중인 컨테이너 확인

     

    • 이미지 삭제: docker rmi <image_name_or_id>
    • 실행중인 컨테이너 확인: docker ps
    • 중지된 컨테이너 확인: docker ps -a
    • 해당 컨테이너 삭제: docker rm <container_id>
    • 로그 보기: docker logs <container_id_or_name>
    • 최근 로그 보기: docker logs --tail <number> <container_id_or_name>
    • 실시간 로그 보기: docker logs -f <container_id_or_name>
    • 최근 로그와 실시간 로그 조합: docker logs --tail <number> -f <container_id_or_name>

     

    'Docker' 카테고리의 다른 글

    React로 aws에서 EC2로 배포하기  (0) 2024.09.16
Designed by Tistory.