
사내에서 프로젝트를 제작한 후, docker로 배포하여 보여줘야 할 일이 생겼다. 아직 docker를 능숙하게 다루지는 못하기에, 초간단 버전의 docker 배포 방법을 아주아주 간단하게 서술해두고자 한다.

프로젝트 최상단 디렉터리 경로에 Dockerfile을 생성한다. Dockerfile에 작성된 사항에 따라 '이미지'라는 걸 만들 수 있다.
본인은 다음과 같이 작성했다.
# 현재 사용 중인 node 버전에 맞춰 이미지 가져오기
FROM node:18.17.1
# 도커 내부 경로 지정
WORKDIR /
# 현재 디렉토리의 모든 파일을 WORKDIR에 복사
COPY . .
# 실행할 명령어 (모듈 설치 및 빌드)
RUN npm install \
&& npm run build
# 3000 port를 노출함
EXPOSE 3000
# 빌드 파일 기준 실행 명령어
CMD ["npx", "serve", "-s", "build", "-l", "3000"]
💡 이미지(Image)란?
이미지는 여러 모듈, 라이브러리, 컴파일된 사항 등 모든 걸 묶어둔 형태를 말한다.
예를 들어, 다음과 같은 세 개의 사항을 묶어둔 후 두고두고 쓰고 싶다는 생각이 드는 경우가 있다.
작업할 때마다 특정 버전의 Node.js와 Python, MySQL을 하나하나 설치해주는 일은 굉장히 귀찮다. 또한, 이 환경을 다른 개발자에게 똑같이 제공하고 싶어도 개발자의 실수 혹은 맞지 않는 OS, 의존성 충돌로 인해 고생할 수도 있다.
이미지는 이렇게 특정 파일들이 이미 설치되어 있는 독립적인 환경 그 자체라고 말할 수 있다.
docker build -t <docker-image-name> .
위 명령어를 통해 이미지를 생성할 수 있다.
<docker-image-name> : 이미지의 이름 (태그)docker image rm <docker-image-name>
위 명령어를 통해 이미지를 삭제할 수 있다.
docker image ls
위 명령어를 통해 생성된 이미지를 확인할 수 있다.
이미지를 생성함으로써, 프로젝트를 실행할 환경 세팅이 완료되었다. 이제 이 프로젝트를 실행할 도커 내부의 공간이 필요하다. 이 공간을 '컨테이너(Container)'라고 한다.
💡 Container(Container)란?
컨테이너는 특정 이미지를 실행할 수 있는 가상화된 공간(환경)이다. 따라서, 실행 중인 이미지 인스턴스라고 할 수 있다.
docker run -d --name <docker-container-name> <docker-image-name>
위 명령어를 통해 도커 컨테이너를 생성할 수 있다.
<docker-container-name> : 컨테이너 이름 (태그)-d : 컨테이너를 백그라운드에 실행하는 옵션, 실행 결과로 컨테이너 ID를 출력함docker ps
위 명령어를 통해 실행 중인 도커 컨테이너 현황을 볼 수 있다. 실행 중이지 않은 도커 컨테이너를 확인하고 싶다면 -a 옵션을 추가하면 된다.
앞서 설명한 도커 컨테이너 생성 명령어만으로는 3000 port에 접속해도 웹사이트가 뜨지 않는다. 포트 포워딩을 해주지 않아서 그렇다. 도커 내부 port와 로컬 port는 별개로 작동한다.
호스트에서 해당 컨테이너의 3000 port에 접근할 수 있도록 포트 포워딩을 해주면 된다.
docker run -d -p <host_port>:<container_port> --name <docker-image-name> <docker-container-name>
host_port : 사용자가 접근할 portcontainer_port : 컨테이너 내부 port따라서, 사용자가 <host_port>로 접근하면 도커 컨테이너 내부의 <container_port>로 접속할 수 있다.
여기까지 수행하면 사내 네트워크가 연결되어 있다면 도커로 배포된 웹사이트를 볼 수 있고, 생성된 이미지를 주고받음으로써 독립적인 환경을 구성할 수 있다.
제목에 써놨다싶이, 아주 간단한 도커 배포 방법이기 때문에 미숙한 부분이 많다. 유지보수, 업데이트는 어떻게 할 것인가... 도커 공부를 더 해봐야겠다는 생각이 들었다. 추후 Volume 또는 Bind Mount를 이용한 실시간 컨테이너 변경 사항 확인, 도커를 이용하여 더욱 퀄리티 있는 배포를 진행해볼 수 있을 것이라 생각한다.