일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- local
- JAR
- jdbc
- not to accept jdbcUrl
- Jenkins
- remove
- spring boot
- driverspy
- spring
- duplicate lines
- svn backup
- 전송포맷
- Change port
- install
- key bindings
- maven
- ADB
- ubuntu
- install maven
- ^M바꾸기
- 줄복사
- docker
- Java
- javaascript
- change file content
- pkgutil
- mariadb
- JavaScript
- gradle
- object
- Today
- Total
Simplify
Spring Boot 를 Java docker 이용해서 구동하기(How to run Spring Boot with java docker container) 본문
Spring Boot 를 Java docker 이용해서 구동하기(How to run Spring Boot with java docker container)
Simplify - Jonghun 2019. 7. 2. 11:00앞서
2019/06/13 - [Web & Server/Docker & Container] - Docker-compose 를 이용해 편하게 docker 쓰기 에서 설명햇던 것 처럼, docker-compose 를 이용하면 긴 명령어를 대신하여 조금 더 편하게 환경을 구성할 수 있습니다. 그리고
2019/06/17 - [Web & Server/Spring & Spring Boot] - Spring Boot WAR 로 배포하기 (How to deploy with *.war file with Spring Boot) 에서 설명한 것 처럼, Spring Boot 를 war 파일로 변경하여 tomcat 상에서 구동하는 것도 가능합니다. 그런데, 이렇게 구동하면 Spring Boot 가 가진 내장 tomcat 을 활용하지 않는 것이 되므로, 결국 Spring Boot 를 이용하는 최대 장점 중 하나를 잃어버리게 됩니다.
여기서는 Spring Boot 의 기본 상태인 jar 로 그대로 빌드하고 이를 java 명령어를 통해 실행할 수 있는 docker 환경을 구성해 보려고 합니다.
java docker 다운로드 받기
당연히, docker hub 에서 openjdk 버전을 다운로드 받겠습니다. java 가 유료화가 되면서, 상용인 경우에만 과금하겠다고 했지만, 이 부분은 개인 개발자가 명확하게 대응하기 힘든 부분이니, openjdk 를 받아 사용하기로 합니다. 링크에 접속하여 openjdk 의 8대 버전을 다운로드 받았습니다.
docker pull openjdk:8u212-jdk
이렇게 되면 리눅스 환경에서, open jdk 8.212 버전만 설치되어 있는 깡통 jdk 가 다운로드 된다고 보면 됩니다. 이 이후에는 이제 저 container 가 실행될 때, 특정 jar 파일을 실행하도록 하겠습니다.
docker-compose.yml 파일 작성하기
이 부분에서 많은 시행착오를 겪었습니다. 우선 결과를 보고나서 하나하나 설명하도록 하겠습니다. 결과 파일은 다음과 같습니다.
version: '3.1'
services:
java-for-SpringBootSample:
image: openjdk:8u212-jdk
container_name: "java-for-SpringBootSample"
restart: always
command: "java -jar /usr/src/myapp/SpringBootSample-0.0.1.jar"
ports:
- "60380:8080"
environment:
- "SPRING_PROFILES_ACTIVE=log-console,log-jdbc,log-file-linux"
volumes:
- ~/docker/java-for-SpringBootSample/app:/usr/src/myapp
- ~/docker/java-for-SpringBootSample/env:/root/env
- ~/docker/java-for-SpringBootSample/log/spring:/log/spring
iamge: openjdk:8u212-jdk
이 부분은 다운로드 받은 이미지, tag 정보를 그대로 입력합니다. 다운로드 받은 이미지가 없으면 오류를 내기 때문에 정확하게 적어주는 것이 맞습니다.
container_name: "java-for-SpringBootSample"
container 의 유일한 이름을 넣어줍니다. 구동되는 환경(docker)에서의 container 이름이 겹치는 경우 역시 실행되지 않으니 특수한 이름을 넣어주는 것을 권장합니다.
volumes:
- ~/docker/java-for-SpringBootSample/app:/usr/src/myapp
- ~/docker/java-for-SpringBootSample/env:/root/env
- ~/docker/java-for-SpringBootSample/log/spring:/log/spring
docker 내부의 경로와 docker base가 설치된 머신의 특정 경로를 mount 해 줍니다. 원하는 만큼 해 주면 되지만, 다수의 docker 이미지들이 root 권한으로 실행되고 있어, (이건 좀 수정해야 할듯..) 조심해야 합니다. 여기서 주목할 경로는 가장 위에 선언된 /usr/src/myapp 경로입니다. 저 경로는 제가 임의로 준 경로이고 container 외부에 있는 ......./app 폴더에 연결합니다. 그리고 나서 나중에 jar 파일을 저 경로에 두면, container 안에서 java 명령어로 해당 jar를 실행하게 합니다.
두 번째 env 경로는 제 Spring Boot 의 설정 파일이 위치하는 경로인데, 원래는 {사용자Home}/env 로 되어 있으나, openjdk container 가 root 로 구동되도록 되어 있어 이와 같이 설정 하였습니다. (상대경로를 마운트할 수 없습니다)
마지막 경로는 제가 만든 Spring Boot 의 log 경로입니다.
command: "java -jar /usr/src/myapp/SpringBootSample-0.0.1.jar"
이 부분이 가장 중요합니다. 우리는 java 를 Ubuntu 환경에 설치한 것이 아니라, docker container 환경 내에 설치되어 있기 때문에 docker 가 구동되는 시점에 실행될 명령어를 command 안에 적어줍니다. 글의 서두에서 밝힌 것 처럼 java 명령어를 이용하여 Spring Boot jar를 그대로 실행하려는 의도였으므로 -jar 옵션에 jar 파일을 적어줍니다. 여기서 jar파일의 경로는 위에서 설명한 volume 을 참고합니다.
ports:
- "60380:8080"
Spring Boot 가 사용하는 8080포트를 외부의 60380 포트에 연결합니다.
environment:
- "SPRING_PROFILES_ACTIVE=log-console,log-jdbc,log-file-linux"
Spring Boot 에서 사용하는 프로파일 정보입니다. 만약 위에서 설명한 command 부분에 -Dspring.profiles.active=... 등으로 설정해 두어도 됩니다만, 별도로 분리해서 구동하고 싶고, 저렇게 전역 변수처럼 설정 해 두어도 어차피 container 안에서의 변수이므로 전혀 지장이 없습니다.
실행하기
추후에 jenkins 와 연동하여 jar를 생성하겠지만, 여기서는 개발 PC에서 빌드한 jar를 sftp 를 이용하여 ~/docker/java-for-SpringBootSample/app 경로에 넣어두고 실행합니다. 실행 명령어는 앞서 설명한 것과 동일합니다.
docker-compose up -d
'Web & Server > Docker & Container' 카테고리의 다른 글
도커 이미지 오프라인 백업/복원하기 How to backup/restore docker images (0) | 2019.12.27 |
---|---|
Jenkins 에 Maven 설치하기 (How to install maven in jenkins) (0) | 2019.07.05 |
jenkins를 docker로 구동 시 사용자 변경하기 (Modify user in jenkins with docker) (0) | 2019.06.17 |
Docker-compose 를 이용해 편하게 docker 쓰기 (1) | 2019.06.13 |
sudo 없이 docker 명령어 실행하기 (Run 'docker' command without 'sudo') (0) | 2019.06.13 |