Docker - image 생성하기

melangyun·2020년 4월 17일
0
post-thumbnail

Introduction

카카오 로그인 API로 간단한 회원가입과 로그인을 하는 프로젝트를 만들었다.
간단한 회원가입과 로그인(이라고 해봤자 토큰 발급 까지)이지만, 잠깐 스치듯 공부했던 Docker를 다시 정리, 복습하고, 외부 API 테스트 케이스를 짜고 CI, CD 환경 구성을 실습 해 보기 좋을 것 같아 확장적으로 이어가려고 한다.
kakao Login 에 관한 소스는 github 레퍼지토리 에 올려둔 것을 바탕으로 하려고 한다.

Docker File

FROM node:10

어떤 이미지로부터 새로운 이미지를 생성할지 결정한다. nodeJS를 기반으로 만든 프로젝트 이므로 node의 이미지를 바탕으로 생성하도록 한다.

RUN mkdir -p /app

현재 /app 디렉토리를 생성한다.

WORKDIR /app

/app디랙토리를 WORKDIR로 설정한다.WORKDIR은 RUN, CMD,ENTRYPOINT의 명령이 실행될 디렉터리이다.
WORKDIR은 절대경로와 상대경로를 모두 사용 할 수 있다.

/가 기준이된다! /root/app은 절대 경로이다.

ADD . /app

현재 Dockerfile에 있는 경로의 모든 파일을 /app에 복사한다.

RUN npm install

npm install 을 한다. package.json이 복사되었다면 필요한 모듈들이 이 과정에서 설치 될 것이다.

EXPOSE 3000

가상 머신에 오픈할 포트이다.

CMD ["npm" , "start"]

docker image를 실행 시켰을 때 실행될 명령이다.

위 명령들을 정리하면, 아래와 같은 Dockerfile이 완성된다.

FROM node:10

RUN mkdir -p /app
WORKDIR /app
ADD . /app
RUN npm install

EXPOSE 3000
CMD ["npm", "start"]

Docker ignore

Docker File에서 .을 사용하면 전체 파일을 지칭하는 것으로 굉장히 편하다.
하지만, 이것을 사용하면 빌드된 dist파일이나 node modules까지 복사되므로, docker ignore파일을 설정하는것이 좋을것이다.

.dockerignore을 작성하여 복사될 필요가 없는 파일을 지정해준다.

build docker image

도커 파일을 작성했다면, 도커 이미지를 빌드해야한다.
도커 이미지 빌드시 위에서 아래로 순차대로 실행되며 설정되고, 설치된다.

$ docker images

먼저, 명령으로 이미 생성되어있는 docker image 들을 볼 수 있다. 아직 아무이미지를 받지 않았다면 아무 이미지도 뜨지 않을것이다.나는 먼저 여러 이미지를 다운받거니 build했기때문에 여러 이미지 목록이 뜬다!

이후 doker image를 생성한다.

$ docker build -t kakao-login/kakaosample:kakaologin .

-t를 기준으로, kakao-login/kakaosample은 repository name으로, :이후에 작성한 kakaologin은 tag명으로 작성된다.
:를 작성하지 않을 경우 자동으로 latest tag로 작성된다.

명령이 오타없이 입력되었다면, 아래 예시와 같이 작성하였던 dockerfile이 위에서부터 아래로 순차적으로 실행되는 모습을 볼 수 있다.

kakaoLogin으로 만든 docker image는 실수로 창을 꺼버려..다른간단한 도커 이미지를 생성해보았는데, 실행 과정은 동일하다!

run docker image

도커이미지가 성공적으로 생성되었다면, docker images명령어로 docker image가 성공적으로 생성되었는지 확인해 볼 수 있으며, image에 부여된 id또한 확인 할 수 있다.

docker image를 실행시키는 명령으로 docker Image를 실행시킬 수 있고, 아래와 같이 포트번호를 맞춘다면 localhost와 연결 시킬 수 있다.

$ docker run -p 3000:3000 [IMAGEID]


이미지 id를 조회하고, 실행시킨 모습.
(위에 예시에서는 devoption으로 rm -rf dist를 켜두고 있는데, 수정할 예정이다^^;;)

정상적으로 실행되었다면, localhost:port로 접근 할 수 있다.

설정해놓았던 Swagger UI도 접근 가능하며, 모두 정상적으로 접근이 가능한 모습을 확인 할 수 있다.

Conclusion

docker Image를 간단히 생성하고, localhost로 접근해보았다.
현재 database가 RDS로 연결되어있는 상태라, 별도 설정 없이도 정상접근 가능하지만, 다음 포스팅에서는 로컬의 데이터베이스를, 도커 이미지로서 databas에 연결해보려고 한다.

docekr image끼리 연결을 하여 소통을 하라는 기업 과제를 받았었다. 당시에는 시간이 없고 마음이 너무 급해서 이해도 잘 하지 못한상태로 코드를 짜다보니 굉장히 헤메었던 기억이 난다. image도 잘 이해하지 못한상태로 짜고, docker-compose파일도 거의 튜토리얼대로..
결국에는 사소한 문제(?)로 연결을 하지 못하여 도움을 받았었는데, 지금 생각해보니 하나씩 차분히 공부하지않고 뱁새가 황새따라가듯 그렇게 코드를 짜려고 하다보니 (당연하지만) 잘 되지 않았던것같다.
급할수록 차분히 돌아가자..!

또, 아직은 어떻게하는지 잘 모르지만, 외부 API(이 프로젝트의 경우에는 카카오 로그인 API)로 testcase를 짜보고, CI/CD -> 자동배포환경까지 구성해보려고 한다.
어떻게 하는지 나는 아직 잘 모르지만, 구글님은 알고계시겠지..! :-) 화아이티잉

profile
개발을 즐겁게!

0개의 댓글