스프링 부트 애플리케이션을 Docker image로 빌드해서 컨테이너에 올리는 작업을 진행해 보겠다.
필요사항
- JDK 1.8 later
- Maven 3.2 이상
- STS
- Docker
Pom.xml 수정을 먼저 진행해야한다.
- wedul 이라는 이름의 jar 파일이 생성된다.
- docker에서 실행하기 위한 Maven 설정이 들어있는 jar file이 만들어 진다.
- 만약 image prefix 값을 별도로 지정하지 않으면 artifact id가 명시된다.
<properties>
<docker.image.prefix>wedul</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
그리고 프로젝트 Root에 Dockerfile을 위치시켜야 한다.
FROM java:8
VOLUME /tmp
ADD /target/wedulpos-0.0.1-SNAPSHOT.jar wedulpos.jar
ENTRYPOINT ["java","-jar","wedulpos.jar"]
DockerFile 옵션 설명 (출처 : https://www.callicoder.com/spring-boot-docker-example/)
VOLUME
볼륨은 호스트 OS에서 컨테이너에 의해 생성 된 데이터를 유지하고 호스트 OS에서 컨테이너로 디렉토리를 공유하는 메커니즘입니다.
VOLUME 명령은 컨테이너에 지정된 경로로 마운트 포인트를 작성합니다. 컨테이너를 실행할 때 지정된 마운트 지점이 매핑 될 Hot OS의 디렉토리를 지정할 수 있습니다. 그런 다음, 컨테이너가 마운트 된 경로에 쓰는 것이 호스트 OS의 매핑 된 디렉토리에 기록됩니다. 볼륨의 가장 일반적인 사용 사례 중 하나는 컨테이너에 의해 생성 된 로그 파일을 호스트 OS에 저장하는 것입니다.
예를 들어, 응용 프로그램이 로그 파일을 /var/log/app.log 위치에 기록한다고 가정 해 봅시다. Dockerfile에 / var / log 경로로 VOLUME을 마운트 한 다음 컨테이너를 실행하는 동안이 마운트 지점이 매핑 될 호스트 OS의 디렉토리를 지정할 수 있습니다. 그런 다음 호스트 OS의 매핑 된 디렉토리에서 로그에 액세스 할 수 있습니다.
위의 Dockerfile에서 / tmp 경로를 사용하여 마운트 지점을 만들었습니다. 이것이 스프링 부트 응용 프로그램이 Tomcat에 대한 작업 디렉토리를 기본적으로 만드는 위치이기 때문입니다. 이 스프링 부트 응용 프로그램에는 바람둥이 디렉토리에 관심이 있기 때문에 필수는 아니지만. 그러나 Tomcat 액세스 로그와 같은 항목을 저장하려는 경우 VOLUMES는 매우 유용합니다.
ADD
ADD 명령은 새 파일과 디렉토리를 고정 이미지에 복사하는 데 사용됩니다.
ENTRYPOINT
응용 프로그램이 컨테이너 내부에서 실행되는 방법을 구성하는 곳입니다.
그렇게 설정을 마치고 명령어를 통해 docker에서 사용할 수 있는 이미지 파일로 빌드를 진행한다.
./mvnw install dockerfile:build
설정을 정상적으로 하고 빌드가 진행이 완료되면 BUILD SUCCESS가 보일 것이다.
Docker image ls 명령어를 통해 지금 설치가 완료된 이미지 파일도 확인할 수 있다.
'IT 지식 > Docker' 카테고리의 다른 글
nginx 서버에 filebeat를 이용하여 ELK에 로그 기록하기 (3) | 2019.10.15 |
---|---|
Windows Subsystem for Linux (ubuntu)에 Docker 설치 (0) | 2018.07.22 |
Mac OS에 Docker 설치하기 (0) | 2018.06.30 |
Docker 기본 개념 정리 (0) | 2018.06.30 |