
Docker는 애플리케이션을 컨테이너(Container)라는 격리된 환경에서 실행하게 해주는 가상화 플랫폼임. 이 컨테이너 안에는 애플리케이션과 필요한 모든 구성 요소(라이브러리, 의존성, 설정 파일 등)가 포함되어 있어서 어떤 환경에서든 동일하게 실행 가능함.
컨테이너는 애플리케이션을 실행하기 위한 독립적인 환경으로, 가상 머신과 비슷하지만 훨씬 가볍고 효율적임. 가상 머신이 운영체제 전체를 가상화하는 반면, 컨테이너는 호스트 운영체제의 커널을 공유해서 더 적은 자원을 사용하고 빠르게 실행됨.
개발할 때 쓰는 컴퓨터와 서버에 배포할 때의 환경이 다를 수 있음. 예를 들어:
이런 환경 차이 때문에 로컬에서는 잘 돌아가던 코드가 서버에서는 문제가 생길 수 있음. Docker는 이 문제를 해결하는 데 유용함. 컨테이너를 사용하면 애플리케이션이 실행될 모든 환경이 동일해짐. 로컬에서 테스트한 컨테이너를 그대로 서버에 배포할 수 있어서, 환경 차이로 인한 문제를 피할 수 있음.
배포는 일반적으로 다음 순서로 진행됨:
Docker 이미지 생성: 애플리케이션과 필요한 모든 걸 포함한 이미지(Image)를 생성함. 이미지는 컨테이너를 만들기 위한 템플릿 역할을 함.
Docker Hub 또는 레지스트리에 이미지 저장: 생성한 이미지를 Docker Hub 또는 프라이빗 레지스트리(저장소)에 저장해서 공유함.
서버에서 이미지 실행: 배포 서버에서 이 이미지를 가져와 실행하면 끝. 서버에서는 이 이미지를 사용해 컨테이너를 실행하고 애플리케이션을 동일한 환경에서 구동함.
Dockerfile이라는 설정 파일로 컨테이너 실행에 필요한 명령어를 관리함. Dockerfile을 기반으로 이미지를 빌드한 후 이를 서버에 배포하는 과정이 단순하고 자동화되어 있어서 빠르고 일관된 배포 가능.Docker 이미지(Image): 컨테이너 실행에 필요한 모든 정보와 소프트웨어가 포함된 템플릿.
Docker 컨테이너(Container): 이미지를 실행해 만들어진 독립적인 실행 환경. 각 컨테이너는 고유의 애플리케이션을 실행하지만, 다른 컨테이너와는 격리됨.
Dockerfile: 애플리케이션을 컨테이너로 만들기 위한 설정 파일. 애플리케이션을 어떻게 빌드하고 실행할지에 대한 명령어가 포함됨.
Docker Hub: Docker 이미지를 공유할 수 있는 온라인 저장소. 다른 사람들이 만든 이미지를 가져다 쓸 수도 있고, 본인이 만든 이미지를 업로드할 수도 있음.
Docker Compose: 여러 Docker 컨테이너를 정의하고 실행하는 도구. 예를 들어, 애플리케이션과 데이터베이스를 각각 다른 컨테이너에서 실행하고 이를 함께 구동 가능.
Dockerfile 작성: Node.js 애플리케이션을 위한 Dockerfile을 작성함.
# Node.js 베이스 이미지 사용
FROM node:14
# 작업 디렉토리 설정
WORKDIR /app
# package.json 파일 복사하고 의존성 설치
COPY package.json /app
RUN npm install
# 애플리케이션 코드 복사
COPY . /app
# 애플리케이션 실행
CMD ["node", "app.js"]
# 컨테이너가 3000번 포트 사용하게 함
EXPOSE 3000
Docker 이미지 빌드:
docker build -t my-node-app .
Docker 컨테이너 실행:
docker run -p 3000:3000 my-node-app
이 과정을 통해 애플리케이션이 컨테이너에서 실행되고, 브라우저에서 localhost:3000으로 접속하면 애플리케이션이 실행된 걸 확인 가능함.
다음에는 도커 적용한 프로젝트도 보여주세요!