프로젝트/싹쓰리

[프로젝트] 도커에 대해서

라임온조 2023. 6. 6. 17:43

0. 도커를 왜 사용하게 되었나

맨 처음 프론트엔드와 백엔드로 나누어 프로젝트를 진행하려고 했을 때, 내가 백엔드로서 만든 api를 프론트엔드 개발자가 어떻게 사용해야 하는 것인가에 대해 엄청나게 궁금했던 적이 있다. 일단 팀원 모두 프엔 백엔 나누어서 개발하는 것이 처음이었고, 구글에 검색을 해 봐도 관련 지식이 아예 없다보니 뭔 솔? 이러면서 이해하기가 어려웠다.

그래도 지금은 대략적인 프로세스를 알게 되었다. 내가 인텔리제이로 만든 스프링 프로젝트를 프론트엔드 개발자의 노트북에서 실행하여 프론트엔드 개발자가 해당 api를 사용하면 되는 것이다. 물론, 백엔드 개발자는 cors 제한을 풀어놔야 하며, 데이터베이스는 동시에 접근 가능 하도록 ec2에 만들어 두거나 프론트엔드 노트북에 데이터베이스 설정을 해 놔야 한다.

이번 프로젝트에서 나는 위와 같이 내가 알고 있던 방식으로 개발을 진행하려고 했다. 그런데 프론트엔드 개발자 분이 이전에 도커를 사용해서 백엔드로부터 쉽게 api를 받아 사용했다고 하며 도커 사용을 추천하였다. 엄청 편하다는 것을 강조하셨기에 이번에 나도 도커를 이용해보기로 하였다.

 

1. 도커의 개념

1) 이미지

소프트웨어를 실행하는 데 필요한 모든 파일, 설정, 종속성을 포함하고 있는 것. 도커파일로부터 이미지를 생성할 수 있다.

2) 컨테이너

도커 이미지를 통해 생성되는 것으로, 격리된 공간에서 실행되는 하나의 소프트웨어라고 할 수 있다.

 

즉 도커는 도커 파일을 작성해서 도커 이미지를 만들고, 만들어진 도커 이미지로 컨테이너를 만들어서 해당 컨테이너를 실행하면 다른 설정 필요 없이 특정 소프트웨어를 쉽게 실행할 수 있도록 해 주는 것이다.

 

이를 프론트엔드와 백엔드로 가져와서 이해해보면, 백엔드가 스프링으로 개발한 전체 프로젝트 코드를 도커 파일을 작성해서 이미지로 만들고, 해당 이미지를 프론트엔드가 받는다. 그럼 프론트엔드 개발자는 해당 이미지로 컨테이너를 만들어 실행하면 쉽게 백엔드 api에 접근할 수 있는 것이다.

 

사실 더 복잡한 개념이지만 일단 이 프로젝트를 진행하며 최대한 간단하게 이해해 보려고 한 내용만을 작성해본다. 나중에 기회가 되면 도커에 대해 더 자세히 알아봐도 좋을 것 같다. 

 

2. 도커 사용하는 방법

1) docker desk top 다운로드

다운로드 후 설치. hosts파일 변경되었다고 알림뜨는데 변경되어도 괜찮다

2) docker 회원가입

3) repository 생성

이 repository는 도커 이미지들을 올리는 곳이다.

4) docker file 작성

FROM adoptopenjdk/openjdk11:jdk-11.0.11_9-alpine-slim
ARG JAR_FILE_PATH=build/libs/*.jar
COPY ${JAR_FILE_PATH} app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

일단 간단하게 스프링 프로젝트를 도커 이미지로 만드는 도커 파일이다. 이는 스프링 프로젝트의 build.gradle와 같은 위치에 작성해주면 된다.

5) 인텔리제이에서 해당 프로젝트로 도커 이미지 만들고 푸시

① 도커 로그인

docker login

 

② 도커 이미지 생성

docker build -t 나의아이디/ssackthree:1.0 .

현재 디렉터리에 있는 도커 파일을 이용해서 이미지 생성

 

③ 컨테이너 생성

docker run -p 8080:8080 -d 이미지이름

해당 이미지를 이용해 컨테이너 생성

 

④ 이미지를 repository에 push

docker desktop 가면 생성된 이미지가 나열되어 있다. 그걸 repository에 push한다.

 

이렇게 하면 백엔드 코드를 도커 이미지로 만들고, 그걸 repository에 push할 수 있고, 해당 repository에 있는 도커 이미지를 프론트엔드 개발자가 pull 받으면 아주 쉽게 백엔드 프로젝트를 프론트엔드 개발자 노트북에서 실행할 수 있다.

 

하지만... 매번 코드가 변경될 때마다 도커 이미지를 만들어서 push해야 할까에 대한 의문이 들었다. 그래서 사용한 방법은 git action을 사용하는 것이다. 이는 다음 게시물로 작성해보려고 한다.