티스토리 뷰

저번장에 정리했던 Dockerfile에서 주로쓰이는 명령어 내용을 참고하여 Spring Boot 애플리케이션을 생성후 Docker 이미지로 빌드후 실행해보자

Spring Boot 애플리케이션 생성

환경은 JAVA 11, Spring Boot 2.5.5 버전이고 Web 의존성만 추가하자



포트번호를 8000으로하고 간단한 컨트롤러 클래스를 생성해보자. 근데 컨트롤러의 hello 메서드에는 docker-app 이라는 이름의 환경변수에 해당하는 값을 조회하는데 이따가 Docker 이미지를 빌드할 때 컨테이너 내부에 docker-app 이라는 환경변수를 추가해줄 것 이다. 그리고 포트번호 또한 빌드할 때 명령어로 추가해줄 것 이다.

Dockerfile 작성

FROM openjdk:latest
ARG port
EXPOSE ${port}
COPY ./target/docker-app-0.0.1-SNAPSHOT.jar /usr/local/docker-app-0.0.1-SNAPSHOT.jar
RUN chmod +x /usr/local/docker-app-0.0.1-SNAPSHOT.jar
ENV docker-app 'Hello, Docker App !'
WORKDIR /usr/local
ENTRYPOINT ["java", "-jar", "docker-app-0.0.1-SNAPSHOT.jar"]

프로젝트 루트디렉토리에 "Dockerfile" 이라는 이름의 파일을 작성하고 위 명령어를 입력하자. 위 명령어를 해석하면 다음과 같다.

 

  • Spring Boot 애플리케이션을 실행하기 위해 JDK 이미지를 Docker hub으로부터 받아온다.
  • 컨테이너 내부에 생성된 애플리케이션의 내부포트는 이미지로 빌드할 때 --build-arg 명령어로 주입받는다.
  • mvn package후 생성된 jar파일을 컨테이너 내부경로 /usr/local 디렉토리로 이동한다
  • jar파일의 실행권한을 부여한다
  • 환경변수 docker-app를 생성하여 Hello, Docker App 이라는 값을 넣는다
  • /usr/local디렉토리로 이동한다
  • 컨테이너가 생성되면 해당디렉토리에 있는 jar파일을 실행한다.

jar파일 생성하기

mvn package 명령어를 실행하면 프로젝트 루트경로에 target이 생성되고 jar파일이 생성된다.

Docker 이미지로 빌드하기

dokcer build --build-arg port=8000 --tag docker-app:0.1 .

위 명령어를 이용하여 Docker 이미지로 빌드하였다. --build-arg는 Dockerfile 내부에 ARG에 값을 주입시켜줄 수 있고 ---tag는 빌드된 이미지의 이름과 태그를 지정할 수 있다. 마지막에 . 은 현재 디렉토리의 Dockerfile을 실행하는 것이다.



docker images 명령어로 확인해보면 정상적으로 실행된 걸 확인할 수 있다. 이제 run 명령어로 도커 이미지를 컨테이너로 띄워보자.

빌드된 이미지로 Docker 컨테이너 띄우기

dokcer run -it -d -p 1234:8000 IMAGE ID

생성된 이미지로 컨테이너를 run 명령어로 띄우고 docker ps 명령어로 현재 실행된 컨테이너를 확인해보니 정상적으로 컨테이너가 실행되었다.

 

  • -d 옵션은 컨테이너를 백그라운드로 실행합니다.
  • -p 옵션은 호스트의 1234번 포트와 컨테이너 내부의 8000번 포트를 연결합니다. 호스트에서 1234번포트로 접근하면 컨테이너 내부포트 8000으로 접속됩니다.
  • -i 옵션은 -t옵션과 같이 사용하는 경우가 많은데 터미널의 입력을 컨테이너로 전달하기 위해 쓰입니다.
  • -t 옵션은 컨테이너에 접근하여 쉘이나 cli 도구 등 각종 명령어를 사용할 때 쓰입니다.



1234번 포트로 접속해보니 Dockerfile에 정의했던 docker-app 이라는 환경변수에 설정한 값이 정상적으로 화면에 표시되었다.

728x90

'Docker' 카테고리의 다른 글

[Docker] - Container 와 VM  (0) 2021.10.18
[Docker] - Dockerfile에서 주로 쓰이는 명령어들  (0) 2021.10.13
[Docker] - Docker란?  (0) 2021.10.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함