Vue.js 및 Docker: 애플리케이션 빌드와 배포 최적화
이 블로그 포스트에서는 Vue.js 애플리케이션을 Docker 를 사용하여 이미지화하고, 이를 통해 애플리케이션을 효과적으로 빌드하는 방법에 대해 알아보겠습니다.
Docker 는 컨테이너 기반의 가상화 플랫폼으로, 개발 환경을 일관되게 유지하고 배포를 간편하게 만들어줍니다.
Vue.js는 현대적인 웹 애플리케이션을 개발하기 위한 프론트엔드 프레임워크로, Docker와의 통합은 개발 및 배포 프로세스를 단순화하는 데 도움이 됩니다.
목차
1. Docker 란
1-1. Docker 이미지와 컨테이너의 역할
2. Vue.js 란
2-1. Vue.js 의 특징과 장점
3. Vue.js 애플리케이션 Docker화
3-1. Dockerfile 작성하기
4. Docker 이미지 빌드하기
4-1. 빌드된 이미지의 구조와 특징
5. Docker Hub 를 활용한 애플리케이션 배포
1. Docker 란

Docker는 컨테이너 기반 가상화를 제공하는 오픈 소스 플랫폼으로, 소프트웨어를 패키징하고 배포하는 프로세스를 단순화합니다. 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 완전히 독립적인 환경을 제공하며, 호스트 시스템과는 격리되어 있습니다. 이를 통해 개발자는 애플리케이션의 환경을 일관되게 유지하고, 서로 다른 환경에서도 동일한 동작을 보장할 수 있습니다.
1-1. Docker 이미지와 컨테이너의 역할
이미지와 컨테이너는 Docker의 핵심 요소로, 개발 환경의 일관성 유지, 배포 프로세스의 간소화, 확장성 및 이식성 향상 등을 가능하게 합니다.
Docker를 사용하면 개발자는 애플리케이션의 종속성 관리와 배포를 훨씬 효율적으로 처리할 수 있습니다.
Docker 이미지:
- Docker 이미지는 애플리케이션 실행에 필요한 모든 것을 포함하는 템플릿입니다.
- 이미지는 파일 시스템, 라이브러리, 실행 환경 및 애플리케이션 코드 등을 포함합니다.
- 이미지는 Dockerfile을 사용하여 정의되며, 빌드된 후에는 읽기 전용으로 존재합니다.
- 동일한 이미지는 여러 개의 컨테이너에서 실행될 수 있습니다.
Docker 컨테이너:
- Docker 컨테이너는 Docker 이미지의 인스턴스입니다.
- 컨테이너는 격리된 환경에서 실행되며, 호스트 시스템과는 독립적으로 동작합니다.
- 각 컨테이너는 자체 파일 시스템을 가지며, 다른 컨테이너와는 완전히 격리됩니다.
- 컨테이너는 가상 머신처럼 동작하지만, 가상화 오버헤드가 적고 더 가볍습니다.
- 컨테이너는 Docker 엔진에 의해 관리되며, 시작, 중지, 삭제 등의 작업을 수행할 수 있습니다.
2. Vue.js 란

Vue.js 는 현대적인 웹 애플리케이션 개발을 위한 프론트엔드 프레임워크로, 가볍고 유연한 구조를 가지고 있어 개발자들에게 많은 인기를 얻고 있습니다.
아래와 같은 Vue.js 의 장점은 웹 애플리케이션 개발을 보다 쉽고 효율적으로 만들어주며, Docker와의 통합을 통해 개발 및 배포 프로세스를 더욱 간편하게 할 수 있습니다.
2-1. Vue.js 의 특징과 장점
- 가독성과 직관성: Vue.js 는 간결한 문법과 직관적인 구조를 가지고 있어, 코드의 가독성이 높고 개발자들이 빠르게 익힐 수 있습니다.
- 컴포넌트 기반 아키텍처: Vue.js 는 컴포넌트 기반 아키텍처를 채택하여 UI를 재사용 가능한 작은 조각으로 나눌 수 있습니다. 이는 코드의 재사용성과 유지보수성을 높여주며, 대규모 애플리케이션의 개발과 관리를 용이하게 만듭니다.
- 반응성: Vue.js 는 데이터와 DOM을 양방향으로 바인딩하여 데이터의 변화에 따라 자동으로 화면을 갱신합니다. 이를 통해 애플리케이션의 반응성을 높이고, 사용자 경험을 향상시킵니다.
- 가상 DOM(Virtual DOM): Vue.js 는 가상 DOM을 활용하여 실제 DOM과의 비교를 최소화하고 성능을 향상시킵니다.
- 생태계와 커뮤니티: Vue.js 는 활발한 커뮤니티와 다양한 생태계를 가지고 있어, 다양한 플러그인, 라이브러리, 도구 등을 활용하여 개발을 보다 효율적으로 진행할 수 있습니다.
3. Vue.js 애플리케이션 Docker화
Vue.js 애플리케이션을 Docker 컨테이너로 패키징하려면 Dockerfile을 작성해야 합니다.
Dockerfile은 Docker 이미지를 빌드하는 데 사용되는 스크립트로, 애플리케이션의 실행 환경과 종속성을 정의합니다.
3-1. Dockerfile 작성하기
Dockerfile은 Vue.js 의 프로젝트 디렉토리에서 작성합니다.

1. 베이스 이미지 선택: Dockerfile은 베이스 이미지로부터 시작합니다. Vue.js 애플리케이션의 경우, Node.js가 포함된 공식 이미지를 사용하는 것이 일반적입니다. 예를 들어, node:lts 이미지를 베이스로 선택할 수 있습니다.

2. 작업 디렉토리 설정: Docker 컨테이너 내에서 작업할 디렉토리를 설정합니다. 보통 /app과 같은 경로를 사용합니다.

3. 의존성 설치: 애플리케이션의 의존성을 설치하기 위해 Vue 프로젝트 디렉토리 내에 있는 package.json과 package-lock.json을 컨테이너 내로 복사한 후, npm install 명령을 실행합니다.

4. 애플리케이션 파일 추가: Vue.js 애플리케이션의 소스 코드 및 정적 파일을 Docker 이미지에 추가합니다. 이를 위해 COPY 명령을 사용하여 로컬 파일 시스템의 애플리케이션 소스 코드를 컨테이너 내의 작업 디렉토리로 복사합니다.

5. 빌드 프로세스 실행: 애플리케이션을 빌드하는 명령을 Dockerfile에 추가합니다. 보통은 Vue CLI를 사용하여 npm run build 또는 yarn build와 같은 명령을 실행합니다.

6. 애플리케이션 실행 환경 설정: 빌드된 애플리케이션을 실행하기 위해 필요한 환경 설정을 Dockerfile에 추가합니다. 이는 정적 파일을 제공하기 위한 웹 서버를 설정하는 것과 관련될 수 있습니다.

7. 컨테이너 실행 시 실행할 명령 정의: 컨테이너가 시작될 때 실행할 명령을 Dockerfile에 추가합니다. 일반적으로는 웹 서버를 시작하는 명령을 포함합니다. Vue.js 애플리케이션의 경우, 보통은 nginx 등의 웹 서버를 사용하여 정적 파일을 제공합니다.

다음은 샘플 Dockerfile에 대한 명세입니다. 해당 Dockerfile은 참고용 샘플이기 때문에, 실사용에선 더욱 정교한 Dockerfile 작성을 권장합니다.
# Dockerfile
# 베이스 이미지 설정
FROM node:lts AS build
# 작업 디렉토리 설정
WORKDIR /app
# 의존성 설치
COPY package*.json ./
RUN npm install
# 애플리케이션 파일 추가
COPY . .
# 애플리케이션 빌드
RUN npm run build
# 최종 이미지 설정
FROM nginx:alpine
# 애플리케이션 파일 복사
COPY --from=build /app/dist /usr/share/nginx/html
# 컨테이너 실행 시 실행할 명령 정의
CMD ["nginx", "-g", "daemon off;"]
4. Docker 이미지 빌드하기
Docker 이미지를 빌드하는 과정은 Dockerfile에 정의된 명령을 실행하여 애플리케이션을 패키징하고 컨테이너 환경을 설정하는 과정입니다. 이 과정에서 빌드된 이미지의 구조와 특징을 이해하는 것이 중요합니다.
4-1. 빌드된 이미지의 구조와 특징
Docker 이미지는 여러 레이어로 구성되어 있습니다. 각 레이어는 Dockerfile에서 정의된 명령의 결과물을 나타내며, 이러한 레이어들은 서로 의존성을 가지고 있습니다.
이미지의 구조와 특징은 다음과 같습니다.
- 레이어 기반 구조: Docker 이미지는 여러 개의 레이어로 구성되어 있으며, 각 레이어는 Dockerfile에서 실행된 명령의 결과물을 나타냅니다.
- 캐싱: Docker는 이미지 빌드 시 이전 레이어를 캐싱하여 중복 작업을 피하고 빌드 속도를 향상시킵니다. 이는 Dockerfile의 각 명령이 캐시된 결과물을 활용하여 빌드되는 것을 의미합니다.
- 최적화된 이미지 크기: Docker는 레이어 기반의 구조를 통해 중복을 최소화하고 압축하여 이미지 크기를 최적화합니다.
- 가변성: Docker 이미지는 레이어 기반으로 구성되어 있기 때문에 개별 레이어를 변경하거나 업데이트할 수 있습니다.
5. Docker Hub 를 활용한 애플리케이션 배포
Docker를 활용한 애플리케이션 배포는 개발 환경과 프로덕션 환경 간의 일관성을 유지하고, 애플리케이션을 빠르고 안정적으로 배포하는 데 도움이 됩니다.
아래는 Docker를 사용하여 애플리케이션을 배포하는 과정을 자세히 설명한 것입니다.
3-1. Dockerfile 작성하기 에서 작성했던 Dockerfile을 통해 이미지를 빌드하고, 해당 이미지를 Docker Hub를 통해 업로드하여 배포할 수 있습니다.
1. Docker 이미지 빌드
docker build -t your-image-name:tag .
여기서 your-image-name은 이미지의 이름을 나타내며, tag는 이미지의 버전을 나타냅니다. .은 Dockerfile이 위치한 디렉토리를 의미합니다.
2. Docker Hub에 이미지 Push:
먼저 docker login 명령을 사용하여 Docker Hub에 로그인한 후, docker push 명령을 사용하여 이미지를 Push합니다. your-docker-username은 Docker Hub 사용자 이름입니다.
docker login
docker push your-docker-username/your-image-name:tag
Docker Hub에 공개적으로 Push된 이미지를 통해 Kubernetes 클러스터나, 기타 컨테이너 오케스트레이션 도구를 활용해 CI/CD를 구축하고 빌드 및 배포를 자동화할 수 있습니다.
NGINX STORE에 문의하여 Vue.js 및 Docker 를 사용해 마이크로서비스와 애자일 방법론에 한 발자국 더 깊게 다가가는 방법에 대해 자세히 알아보세요.
댓글을 달려면 로그인해야 합니다.