도커에서 스프링 서버를 실행하면 유용한 점이 많다.
1. 독립적인 환경으로 서버를 배포할 수 있음 -> 컨테이너 밖에 영향을 주지 않음
2. 배포 환경에서 프로젝트 전체 코드를 가지고 있을 필요가 없다 -> .jar 파일만 갖고 있어도 서버를 실행할 수 있다.
이제부터 방법을 알아보자.
Dockerfile
우선 Dockerfile을 준비하자. (파일명: Dockerfile)
FROM openjdk:11
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
대강 해석해보자면,
1. openjdk:11 이미지에 대해 컨테이너를 실행할 것인데
2. 현재 폴더에 대해 .jar 파일이 있다면, JAR_FILE 변수에 저장하고
3. JAR_FILE의 이름을 app.jar로 변경한 뒤
4. java -jar 명령을 통해 app.jar 파일을 실행한다.
2번에 의하면 Dockerfile이 있는 폴더에 .jar 파일이 있어야 하고 스프링 실행을 원하는 폴더에 다음과 같이 준비되어 있어야 한다는 것이다.
나는 aws ec2의 ubuntu 서버에 스프링 서버를 배포하고자 한다.
보통 Dockerfile과 .jar 파일은 로컬에서 관리하다가 배포가 필요할 때, 배포 서버로 옮기면 되는데, 로컬 -> 원격으로 파일을 옮기는 방법은 다음 글을 참고하자.
https://doheejin.github.io/linux/2021/03/03/linux-scp.html
이제 도커 컨테이너 실행을 위한 명령을 입력하자.
# 이미지 생성
sudo docker build -t ec2/spring-server .
# 컨테이너 실행
sudo docker run -d --name spring_server -p 8080:8080 ec2/spring-server
# 로그 보기
sudo docker logs -f spring-server
이러면 컨테이너 실행 시, 스프링 서버가 자동으로 컨테이너 내부에서 실행된다.
docker images, docker ps 등 도커 명령어를 통해 해당 이미지와 컨테이너가 잘 생성되어 있는지 확인해보자.
도커를 사용하니, 배포를 위해 갖고 있어야 하는 파일도 더 가벼워지고 실행도 더 단순해졌다.
다음엔 Jenkins 등을 활용한 자동 배포에도 도전해봐야겠다.
'devops > docker' 카테고리의 다른 글
[Docker] 도커 컨테이너에 깃랩(Gitlab) 설치 (0) | 2022.07.01 |
---|---|
[Docker] Dockerfile & build (0) | 2022.06.28 |
[Docker] Docker compose (0) | 2022.06.28 |
[Docker] Docker commit & push (0) | 2022.06.28 |
[Docker] 도커 입문 (0) | 2022.06.28 |