본문 바로가기

IT/Docker

Docker 설치하기 / 스프링 부트 도커에 올리기

 

 

도커(Docker) 설치하기

이 포스트에서는 도커(Docker)에 대해 알아보고 도커를 설치하는 방법에 대해 알아보도록 한다. 목표 도커 (Docker) 도커 설치 및 실행 도커 (Docker)  도커는 몇 년 전부터 붐을 일으키기 시작해 이제�

imasoftwareengineer.tistory.com

예를들어서 15개의 마이크로 서비스들이 15개의 팀에 의해 개발된다고 치자. 이 15개의 서비스들이 하나의 어플리케이션을 구성한다. 이런 서비스들의 예로는 Authentication Service, Database Service, Application Services, Tracking Services등등이 있다. 다시 말해 하나의 어플리케이션이 정상적으로 동작하기 위해서는 여러가지 서비스의 협력이 필요하다는 뜻이다. 그렇다면 로컬환경에서 개발과 테스트를 하기 위해 15개의 서비스를 전부 실행시켜야 한다는 뜻인가? 그렇다. 전부는 아닐지라도 본인의 서비스가 의존하는 몇 개의 서비스는 로컬환경에서 실행되어야 한다. 이 때, 도커가 없다면 디펜던시가 있는 서비스들을 전부 다운받아 컴파일하고 실행을 해야 한다. (아니면 현재 개발환경이 아닌 QA환경에 연결해서 사용하거나 해야 한다.) 이 때 개발/실행 환경이 다 다르기 때문에 무슨 에러가 날지 알 수 없다. 도커를 이용하면 이런 'Configuration Hell'에서 벗어 날 수 있다. 이런 장점은 QA환경이나 Production환경에서도 동일하기 때문에 도커가 많이 쓰이고 있고, 개발환경과 Production환경을 동일하게 설정 할 수 있다는 점도 큰 장점이 된다.스프링 부트

 


스프링 부트 도커에 올리기(Dockerizing Spring Boot App)


실제 프로젝트를 이용해 도커 이미지를 만들고 도커 위에 컨테이너를 실행시켜 보도록 한다. 도커 이미지를 만들 프로젝트는 스프링부트 웹 어플리케이션 프로젝트이다.


 

스프링 부트 도커에 올리기(Dockerizing Spring Boot App)

이전 포스트 도커(Docker) 설치하기에서 도커가 무엇인지 간략하게 알아보고 도커를 설치했다. 이번 포스트에서는 실제 프로젝트를 이용해 도커 이미지를 만들고 도커 위에 컨테이너를 실행시켜

imasoftwareengineer.tistory.com

Dockerfile

첫번째로 도커가 이해 할 수 있는 Dockerfile이라는 것을 만들어 줘야 한다. 이 파일에 필요한 디펜던시 예를들어 우리와 같은 경우 어떤 자바를 사용 할 것인지, 어떤 어플리케이션(.jar)를 사용 할 것인지, 어떤 명령어로 이 도커 컨테이너를 실행시켜야 되는지에 대해 명시해야 한다.

일단 프로젝트 root 디렉토리에 Dockerfile을 만들자.

 

 

Dockerfile의 내부는 다음과 같다. 

ARG JAR_FILE을 이용해 어떤 어플리케이션을 실행시켜야 하는지, 즉 어플리케이션의 실행파일을 연결 해 주어야한다. 우리가 gradle build를 하면 .jar파일이 생성된다. 내 환경에서는 build/libs/아래에 생성되었다. 프로젝트의 환경에 따라 tartget아래에 생성되기도 하도 build아래에 생성되기도 한다. 어쨌든 프로젝트를 빌드 후 .jar파일을 찾아 그 경로를 확인하는게 중요하다. 경로를 확인했으면 경로를 적어주자. 주의 할 점은 상대경로를 적어주어야 한다는 것이다. 안그러면 다른 팀원의 개발환경에서는 실행되지 않을 수 있다.

Docker run

이제 도커 이미지가 제대로 만들어 졌는지 확인 해 보자. docker images로 현재 이미지를 확인 해 보면 to-do-springboot와 스프링 부트가 사용할 java이미지가 생긴 것을 확인 할 수 있다.

 

이렇게 하면 gradle bootRun을 실행시켰던 것과 같은 로그화면이 뜨기 시작 할 것이다. 여기서 5000:8080에 대해 잠깐 보자. 아까 우리는 도커파일에서 8080을 노출시켰다. 만약에 내가 to-do-springboot말고 다른 웹 앱을 실행시키고 싶다면 그 앱도 로컬환경에서 8080을 사용 할 수 있다. 이 때 같은 포트를 사용하는 앱을 한 서버에서 실행시키면 port가 중복되어 에러가 난다. 그렇다면 내 환경에서는 8080에 실행시키고, 도커에서는 다른 포트에서 실행 시킬 수 있을까? 그럴 때 사용하는게 바로 5000:8080 Porter이다. 이 뜻은 내부적으로는 이 어플리케이션이 8080을 사용하고 있으니 5000으로 날아오는 포트는 전부 이 어플리케이션의 8080포트에 맵핑시켜라 라는 뜻이다. 이렇게 하면 개발 당시에는 8080을 사용하고, 개발 후 도커에 올리고 나서는 5000포트를 이용 할 수 있다는 장점이 있다.

브라우저를 켜서 http://localhost:5000/todo/ (이거는 사용한 프로젝트마다 다를 것이므로 프로젝트가 제공하는 API로 테스팅을 해보면 된다.)에 들어간다. 네트워크탭(F12)를 열어 보면 웹 앱이 제대로 실행 된 것을 확인 할 수 있다.