docker로 서비스 이미지 빌드부터 컨테이너화 해보기

wonjun.Aden·2022년 9월 21일
1
post-thumbnail

현재 A 서비스는 따로 docker 기반으로 운영되고 있지 않는데...이거를 차근차근 docker화 시키고 compose화 시키고 CI/CD TOOL도 붙이는 것이 1차 목표이다. 2차 목표는 설계한 환경을 그대로 쿠버네티스 환경으로 이식하는 것이다.
이것을 해보면 첫번째로 DevOps에 대한 첫 걸음은 뗄수 있을 것이라고 생각한다.
그렇기 때문에 우선 처음으로는 서비스를 이미지로 빌드하고 컨테이너까지 실행하여 로컬 환경에서 띄워보는 것이다.

서비스를 이미지로 빌드하기

우선 서비스를 이미지화 하기 위해 필요한 것은 무엇일까?
Dockerfile, .dockerignore 만 있으면 지금 현재의 서비스에서는 빠르게 이미지를 빌드하고 컨테이너를 실행할 수 있다.
지금 현재 A서비스는 Nodejs + express 환경이다. 이것도 리뉴얼할 때 NestJs 프레임워크를 이용해보는것도 좋을 것 같다.

물론 nodejs+express에서 nestJS로 갈아타려는 이유를 잘 비교해서 따져보는 것이 첫번째일 것이다. 추후에 알아봐야겟다.

다시 본론으로 돌아와서.
A서비스를 이미지로 빌드하기 위하여 Dockerfile과 .dockerignore 파일을 생성하였다.

Dockerfile

# base Image with light size image alpine
FROM node:16-alpine


# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install dependencies
COPY package.json .
RUN npm install

# Bundle app source
COPY . .

# 환경 변수 NODE_ENV의 값 development로 설정
# 실제 production 환경에서는 어떤식으로 적용시킬지에 대한 개선 필요
ENV NODE_ENV = ${NODE_ENV}
ENV NODE_PATH .

CMD [ "npm", "start" ]

# Exports
EXPOSE 8330 3000

우선 base-image는 alpine리눅스 기반의 node 16버전으로 정했다. 왜냐하면 이미지의 용량이 훨씬 가볍기 때문이다.
그리고 app의 dir을 생성하고 app의 dir을 설정하였다. 그리고 dependencies를 복사하고 RUN 명령어를 통하여 패키지를 설치하였다.
소스를 다 copy하고 환경변수를 설정하였다. 환경변수는 음... 개발환경으로 띄울꺼냐~ 실제 prod환경으로 띄울거냐~ 설정하는것이다.

그리고 EXPOSE는 어떤 포트를 열어줄 것이냐를 설정하는 것인데 개발환경은 8330 운영환경은 3000이기 때문에 8330과 3000을 설정하여 포트를 열어줬다.
이렇게만 하면 빠르게 서비스를 이미지화 시켜 컨테이너를 실행시킬 수 있다.
아 그리고 이미지 빌드할 때 사용하는 명령어들은 따로 포스팅하여 정보를 공유할 수 있도록 해보겠ㄷr.

.dockerignore

node_modules
npm-debug.log

이미지로 빌드할 때 gitignore처럼 특정 폴더나 파일을 제외할 것인지 명시하는 파일이다.

이미지로 빌드

docker build --build-arg NODE_ENV=development -t Aapp-develop:0.1 .

컨테이너 실행

docker run -d -p 8080:8080 --name Aapp-develop Aapp-develop:0.1

이렇게 하면 이미지 빌드부터 컨테이너 실행까지 대 성공이다.
후후.

다음 편은 이제 docker-compose로 nginx + A서비스를 만들어 다중컨테이너를 설정해 볼 것이다.

profile
아프리카의 BackEnd Developer 장원준입니다.

0개의 댓글