ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 로 SpringBoot 프로젝트 배포하기 - 이미지 빌드 해서 Docker Hub에 푸시
    Docker 2023. 10. 30. 20:49

     

    기존 내 프로젝트는 war 파일을 톰캣 매니저 페이지를 통해 배포하는 방법을 채택했었다. 

    다만 프로젝트를 변경해 나가는 과정에서, ec2 인스턴스를 새로 설정하게 되는 경우가 발생하는데, 이때마다 톰캣 설정, 포트포워딩 등 수반되어야 하는 작업이 번거롭게 느껴졌다.

     

    1. jar 파일로 빌드하기

    Docker 에 배포 할 이미지파일을 빌드하기 위해서, 우선 애플리케이션을 빌드해서 jar 파일을 생성해야한다.

    cmd 에서 내 프로젝트가 있는 경로로 들어간다. 
    (내 프로젝트의 경로를 모르겠다면, 이클립스 에서 프로젝트 메인 루트를 클릭 후 Alt + Enter 눌러서 속성창 내 Location에서 확인해볼 수 있다. 그대로 복사해 놓으면 된다.)

    명령 프롬프트에서 cd <경로> 해서 들어간다.
    여기로 들어가는 이유는, 여기에 gradlew 파일이 있기 때문인데, gradlew 파일이 다른 경로에 있다면 해당 경로로 들어가야 한다
    C:\Users\gynpa>cd C:\Users\gynpa\Documents\projects\iamcaster\workspace\iamcaster​

    이제 빌드하기 위한 명령어를 입력한다.
    clean 명령어를 통해 이전 빌드에서 생성된 파일들을 삭제하여 빌드 환경을 깨끗하게 하는 것이 좋다.
    gradlew clean build​

    빌드에 성공하게 되면 이런 메세지를 받는다.
    빌드에 성공했다면, 프로젝트 경로에 새로운 'build' 라는 폴더가 생성되었을 것이다.
    빌드된 jar 파일은 별도의 설정을 하지 않았다면 build/libs 에 위치하게 된다.
    (이 위치를 잘 기억해 두자. 이걸로 Docker build 를 할 것이다.)

     

    2. 윈도우 에서 Docker 환경 설정하기

    위에서 빌드한 jar 파일을 Docker 에서 실행할 수 있도록 빌드해야 한다.

    이전 글에서 윈도우에서 Docker 환경설정 하는 방법에 대해 작성했다.

    환경설정이 모두 완료되었다면 다음으로 넘어간다.

     

    윈도우에서 Docker 환경 설정하기

    1. WSL2 활성화 하기 WSL2 는 윈도우에서 리눅스 실행파일을 네이티브로 실행할 수 있게 해준다. Docker Desktop for Windows는 WSL2를 기반으로 만들어졌다. 따라서 WSL2를 미리 활성화 해준다. 우선 명령프

    joelinseoul.tistory.com

     

     

    3. 프로젝트 내 Dockerfile 파일 생성하기

    Package Explorer 에서 본인의 프로젝트 폴더 하위에 Dockerfile 라는 이름으로 파일 생성한다.
    그럼 docker build 명령어를 실행해서 이미지파일을 만들 때, Docker 가 현재 디렉토리에서 Dockerfile을 찾아,
    여기에 정의한 명령어들을 실행하게 된다.

     

    4. Dockerfile 파일 작성하기

    # DockerFile
    
    # jdk17 Image Start
    FROM openjdk:17-jdk
    #인자 정리 - Jar
    ARG JAR_FILE=build/libs/*.jar
    
    # JAR 파일 복사
    COPY ${JAR_FILE} app.jar
    
    # JSP 파일 복사
    COPY src/main/webapp/WEB-INF/jsp /src/main/webapp/WEB-INF/jsp
    
    # 서버시간대 서울로 설정
    RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
    
    ENTRYPOINT [ "java", "-Dspring.profiles.active=docker","-jar","app.jar" ]
    여기에 작성되는 내용은 docker 빌드 시에 적용되는 아주 중요한 내용이다.
    이 내용에 따라 이미지가 생성된다.

    FROM openjdk:17-jdk

    내 프로젝트는 java 17 기반이므로, 17버전의 jdk를 기준으로 이미지를 생성하며 시작한다.
    11버전이면 FROM openjdk:11-jdk 등으로 각자 버전에 맞추어 작성하면 된다. 

    ARG JAR_FILE=build/libs/*.jar
    이미지 빌드 시에 사용될 변수를 선언하는 부분이다.
    디폴트 값이 build/libs/*.jar 이므로, 별도로 수정할 필요는 없는 부분이다.

    COPY ${JAR_FILE} app.jar
    위에서 선언한 JAR_FILE 변수에 지정된 파일을 이미지 내부의 app.jar 로 복사한다.

    COPY src/main/webapp/WEB-INF/jsp /src/main/webapp/WEB-INF/jsp
    나는 별도의 프론트 없이 jsp 로 화면구성을 했기 때문에, jsp 경로 안에 있는 파일들 또한 함께 이미지파일 안에 포함시켰다. src 하위의 상대경로로 지정되어있는 jsp 를 절대경로 위치로 복사해서, 기존에 controller 에 매핑시킨 view 를 띄울 수 있게 한다. 

    RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
    컨테이너의 시간대를 서울로 설정한다.
    서버의 시간대를 설정하는 방법은 다양하겠지만, 이 방법이 도커 이미지를 사용하는 목적에 가장 부합하지 않은가 싶다. 

    ENTRYPOINT [ "java", "-Dspring.profiles.active=docker","-jar","app.jar" ]
    컨테이너가 시작될 때, 위에서 만든 app.jar 를 실행시킨다. 
    두번째 파라미터는 application-docker.yml 등의 프로필을 선택할 수 있어, 환경에 따라 다른 설정을 적용시킬 수 있다.

     

    5. Docker 이미지 생성하기

    cmd 에서 위에서 만든 jar파일을 Docker 에서 실행할 수 있는 이미지 파일로 빌드해야 한다.

    Docker Desktop을 실행 후, cmd 에서 Docker 를 실행해 Docker Hub에 로그인 한다.
    docker login -u <계정ID>​
    Docker Hub 로그인 성공
    Docker Desktop을 실행하지 않으면 위의 에러를 만나게 된다.
    Dockerfiles 경로에서 Docker 이미지를 만드는 명령어를 입력한다.
    위에서 Dockerfiles 의 경로를 프로젝트 폴더 최 상단에 만들었기 때문에, 프로젝트 경로로 들어가면 된다.

    Dockerfiles가 있는 경로에서 아래의 명령어를 실행한다.
    docker build -t mydockerid/iamcaster:23103010 .
     - -t : 태그 옵션을 사용 시 입력. 태그를 활용하면 버전 정보 등을 기록하는데 유용하다.
    - <도커id>/<이미지명>:<태그> <Dockerfile디렉토리>
    docker build -t mydockerid/iamcaster:23103010 .​

     


    Dockerfiles 에서 작성한 내용들에 따라 이미지가 만들어진다.
    완료 시 아래와 같이 FINISHED 를 볼 수 있다.

     

    6. Docker Hub 에 Push 하기

    위에서 만들어진 이미지는 로컬 Docker 데몬에 저장된다.
    Docker Hub에 이미지를 올려야 ec2 등의 서버에서 pull 받기 용이하므로, Push 한다.

    Push 명령어는 아래와 같다.
    docker push <도커id>/<이미지명>:<태그>
    * 태그를 입력하지 않으면 latest 란 텍스트로 자동 입력된다.
    docker push 도커id/이미지명:태그​
    푸시 완료

    이렇게 빌드된 이미지들은 도커 데스크탑에서 확인할 수 있다.(local / hub)

     

     

    다음 : EC2 에 Docker 올리고 배포하기

     

    Docker 로 SpringBoot 프로젝트 배포하기 - EC2에 Docker 올리기

    이전 글에서 스프링부트 프로젝트를 jar 파일 빌드, 윈도우에서 Docker 환경 설정, Docker 이미지 생성 및 Push를 했다. 윈도우에서 Docker 환경 설정하기 1. WSL2 활성화 하기 WSL2 는 윈도우에서 리눅스 실

    joelinseoul.tistory.com

     

모든 일에 선한 진심으로 접근하기