스프링 부트 애플리케이션을 Docker로 컨테이너화하려면, 다음과 같은 절차를 따라야 한다.
스프링 부트 애플리케이션 생성: IntelliJ, Eclipse 등의 IDE 또는 Spring Initializr를 사용하여 스프링 부트 애플리케이션을 생성한다. 이 때 필요한 의존성(Dependencies)를 추가한다.
스프링 부트 애플리케이션 구현: 스프링 부트 애플리케이션의 비즈니스 로직을 구현한다. REST API, 데이터베이스 연결 등의 구현을 포함할 수 있다.
스프링 부트 애플리케이션 빌드: 애플리케이션을 빌드하여 실행 가능한 JAR 파일을 생성한다. 이 작업은 mvn package 또는 gradle build 명령어로 수행할 수 있다. IDE의 터미널 또는 시스템의 command prompt/terminal에서 프로젝트의 루트 디렉토리로 이동한 후 해당 명령어를 실행하면 된다.
Dockerfile 작성: 프로젝트 루트 디렉토리에 **Dockerfile**이라는 이름의 파일을 생성한다. Dockerfile은 이미지를 생성하기 위한 명령어들을 순서대로 나열한 스크립트 파일이다. 예를 들어, Java 웹 애플리케이션을 위한 Dockerfile은 다음과 같이 작성될 수 있다.
# 베이스 이미지를 지정. 이 경우 Java 11 JRE 베이스
FROM openjdk:11-jre-slim
# 컨테이너 내부에 /app 폴더를 생성
WORKDIR /app
# 웹 애플리케이션 jar 파일을 컨테이너로 복사
COPY /target/your-application.jar /app/your-application.jar
# 컨테이너가 시작할 때 실행될 명령어를 지정
ENTRYPOINT ["java", "-jar", "/app/your-application.jar"]
도커 이미지 생성: 도커가 설치된 환경에서 터미널 또는 커맨드 프롬프트를 열고 프로젝트의 루트 디렉토리로 이동한다. 그리고 docker build 명령어를 사용하여 Dockerfile로부터 도커 이미지를 생성한다.
docker build -t your-image-name:tag .
이렇게 하면 도커는 Dockerfile을 찾아서 이미지를 생성하게 된다. 이 과정에서 Dockerfile에 정의된 명령들이 순차적으로 실행되며, 최종적으로 도커 이미지가 생성된다. 이 이미지는 모든 Docker 환경에서 동일하게 동작하는 애플리케이션의 패키지 역할을 한다.
<aside> ⚠️ 도커 이미지란?
도커 이미지는 컨테이너를 실행하기 위한 모든 파일 시스템과 메타데이터를 포함하는 불변의 바이너리 파일이다. 이는 런타임에 필요한 코드, 라이브러리, 환경 변수, 파일 등을 갖추고 있다. 이 이미지를 기반으로 컨테이너를 생성하게 된다.
Java 웹 개발자 관점에서 보면, 웹 애플리케이션을 실행하는데 필요한 Java Runtime Environment(JRE), 애플리케이션의 jar 파일, 웹 서버 설정 등이 도커 이미지에 포함된다.
</aside>
Docker 이미지를 만들었다면 이제 해당 이미지를 기반으로 하는 Docker 컨테이너를 배포할 차례다. 스프링 부트 애플리케이션을 Docker를 이용하여 배포하는 기본적인 방법은 다음과 같다.
도커 컨테이너 실행: 도커 이미지가 생성되면, 이 이미지를 기반으로 컨테이너를 실행할 수 있다. 이는 docker run 명령어를 사용하여 수행할 수 있다. 예를 들어, 앞서 생성한 도커 이미지로 컨테이너를 실행하려면 다음과 같이 명령다.
docker run -p 8080:8080 -d your-image-name:tag
여기서 **-p 8080:8080**은 호스트 OS의 8080포트와 컨테이너의 8080포트를 연결하겠다는 의미이며, -d 옵션은 컨테이너를 백그라운드에서 실행하겠다는 의미.
도커 이미지 저장: 필요한 경우, 도커 이미지를 Docker Hub 또는 다른 도커 레지스트리에 저장할 수 있다. 이 작업은 docker push 명령어를 사용하여 수행한다.
docker push your-image-name:tag
도커 컨테이너 확인 및 로그 조회: 컨테이너가 정상적으로 동작하는지 확인하고, docker logs 명령어를 통해 로그를 조회할 수 있다. 이 때 컨테이너 ID 또는 이름이 필요하다. 이는 docker ps 명령어를 통해 확인할 수 있다.
이런 방식으로 자바로 만든 스프링 부트 애플리케이션을 도커 이미지로 만들고, 그 이미지를 기반으로 컨테이너를 실행하여 애플리케이션을 배포하고 관리할 수 있다.