도커란?
도커란?
도커(Docker)</span>는 애플리케이션을 더 빠르고 효율적으로 배포하고 관리할 수 있게 해주는 오픈 소스 플랫폼입니다. 주로 컨테이너 기술을 기반으로 작동하는 데, 컨테이너는 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 라이브러리, 의존성 등을 함께 패키징하여 독립적인 환경에서 실행할 수 있게 합니다.
경량 가상화 기술 리눅스 컨테이너를 구현하는 애플리케이션
VirtualBox나 VMWare 같은 가상 머신은 하드웨어부터 에뮬레이션하지만 Doker를 사용하면 실행하고자하는 프로세스만 격리된 환경에서 실행하는 것이 가능합니다.
도커의 주요 개념
컨테이너(Container)
애플리케이션과 그에 필요한 모든 환경을 포함한 독립된 실행 단위입니다. 컨테이너는 운영 체제의 커널을 공유하면서도 다른 프로세스와 격리된 환경에서 실행됩니다. 이는 가상 머신보다 훨씬 가볍고 빠르게 실행됩니다.
이미지(Image)
애플리케이션을 실행할 수 있는 환경을 정의한 읽기 전용 템플릿입니다. 예를 들어, 웹 애플리케이션을 위한 이미지가 있을 수 있습니다. 이미지는 컨테이너를 실행하는 데 사용됩니다.
도커파일(Dockerfile)
이미지를 만들기 위한 설정 파일입니다. 이 파일에는 이미지가 어떤 애플리케이션을 포함하고, 어떻게 환경을 설정할지에 대한 명령이 들어 있습니다.
도커 허브(Docker Hub)
도커 이미지를 공유할 수 있는 중앙 저장소입니다. 사용자들은 도커 허브에서 다른 사람들이 만든 이미지를 다운로드하거나 자신의 이미지를 업로드할 수 있습니다.
도커의 장점
이식성
컨테이너는 어디서나 동일하게 실행됩니다. 개발 환경, 테스트 환경, 실제 운영 환경 모두 동일한 방식으로 실행됩니다.
효율성
컨테이너는 가상 머신보다 가벼워서 더 적은 자원으로도 더 많은 애플리케이션을 실행할 수 있습니다.
빠른 배포
애플리케이션과 환경 설정을 함께 패키징하여 빠르고 쉽게 배포할 수 있습니다.
확장성
여러 개의 컨테이너를 쉽게 관리하고 배포할 수 있어 애플리케이션의 확장이 용이합니다.
프론트엔드에서 도커의 사용
프론트엔드에서는 개발 환경을 컨테이너화하여 여러 명의 개발자가 동일한 환경에서 작업 할 수 있도록 하거나, 빌드 도구나 테스트 도구를 컨테이너화하여 개발 환경을 일관되게 만들 수 있습니다.
-
개발 환경 통일화
로컬 환경에서 개발할 때 각자의 시스템 환경 차이로 인해 문제가 생길 수 있습니다. 도커를 사용하면, 모든 개발자가 동일한 컨테이너 안에서 작업하므로 환경 차이로 인한 문제를 줄일 수 있습니다.
-
배포 환경 준비
프론트엔드 애플리케이션을 빌드하고 배포할 때 도커를 사용하면 일관된 배포환경을 유지할 수 있습니다.
Node.js
,React
,Vue.js
등 의 프레임워크와 그 의존성들이 정확히 동일하게 설정된 도커 이미지를 만들어 배포할 수 있습니다. -
빌드 및 테스트 환경 격리
프론트엔드 빌드 도구(Webpack, Babel, ESLint 등)나 테스트 도구(Jest, Cypress 등)를 컨테이너 내에서 실행함으로써 개발 환경을 격리하고, 로컬 시스템에 영향을 주지 않고 환경을 관리할 수 있습니다.
도커 설치
[윈도우 Docker 설치 완벽 가이드(Home 포함)을 참고합니다.
도커 Windows Home 과 Pro에서 Doker 설치차이 이해하기
설치하기 전에 사용중인 Windows가 어떤 에디션인지 확인해봅니다.
저는 Windows 11을 사용하고 있습니다.
Docker를 사용할 때 Windows Home Edition과 Windows Pro Edition의 가장 큰 차이는 Hyper-V 기능의 지원여부인데 Home 버전에서는 사용할 수 없습니다.
- Windows 10/11 Professional / Education / Enterprise 에디션
- WSL2 기반 Docker Engine 사용 가능
- Hyper-V 기반 Docker Engine 사용 가능
- Windows 10/11 Home 에디션
- WSL2 기반 Docker Engine 사용 가능
WSL은 Windows Subsystem for Linux 2의 줄임말로 윈도우에서 리눅스를 사용할 수 있게 해주는 기능입니다.
Home에디션에서는 Docker를 사용하려면 WSL2가 필수입니다.
Pro 사용자는 WSL2를 사용하지 않더라도 Hyper-V 기반 가상화를 사용해 Doker Engine을 사용하는 것이 가능합니다.
WSL2를 설치하고 활성화 하는 법
Windows 11에서는 wsl
명령어로 WSL2를 설치할 수 있습니다.
터미널 앱을 사용하거나 PowerShell을 사용해서 설치 가능합니다.
먼저 윈도우 터미널이나 PowerShell을 관리자 권한을 실행합니다.
Win
+ S
를 눌러 PowerShell을 검색 후 우클릭하면 관리자 권한으로 실행할 수 있습니다.
이후에 다음 명령어를 실행합니다.
$ wel --install
설치가 끝나고 다음 명령어를 실행해, WSL 버전 기본값을 2로 변경해줍니다.
$ wsl --set-default-version 2
WSL를 성공적으로 설치했다면 이제 리눅스를 설치합니다. WSL에 리눅스 배포판이 직접 포함되어있지는 않습니다.
리눅스 배포판을 설치하는 방법은 두 가지가 있습니다. 하나는 마이크로소프트 스토어에 업도르 되어있는 리눅스 배포판을 설치하는 방법이고, 다른 하나는 직접 리눅스 배포판 이미지를 구해서 WSL로 임포는 하는 방법입니다.
-
WSL에서 우분투 최신 버전 사용하는 방법
Microsoft Store 앱을 열고 Ubuntu를 검색합니다.
이를 다운받아 줍니다.
설치가 끝나고 앱이 실행되면 터미널이 열리고 설치가 자동으로 진행됩니다.
이 때 에러가 발생했습니다.
발생한 에러의 해결책은 위와 같은데 저는 컴퓨터를 재부팅해보겠습니다.
컴퓨터를 재부팅하고 진행하니까 잘 설치되는 것을 볼 수 있습니다!
WSL를 설치하시고 Ubuntu를 설치할 때 오류가 뜬다면 재부팅하고 진행해보세요!
처음에installing. this may take few minutes...
라는 메시지가 나오는데 조금 지나면 사용할 사용자 이름과 패스워드를 지정하는 입력창이 나타납니다. 사용하고자하는 사용자 이름과 패스워드를 입력하면passwd
로 패스워드가 업데이트 됩니다. -
이렇게 잘 실행이 됩니다!
이제 다시 윈도우 터미널을 실행합니다. (관리자모드 아니여도 됨)wsl -l -v
명령어를 입력해서 현재 설치된 리눅스를 확인해봅니다.앞에
*
는 디폴트 머신을 뜻하고 버전 컬럼은 WSL의 버전을 의미합니다. 2가 출력된다면 그대로 사용하시면 됩니다.
WSL을 사용할 때 하나 알아두어야 하는 점은, WSL이 Hyper-V 기반의 경량화된 리눅스 머신이라는 점입니다. 따라서 WSL 머신은 상태를 가집니다. 처음 wsl 명령어를 실행하면 머신이Running
상태가 됩니다.머신을 종료할 때는
-t
옵션을 사용합니다.wsl -t Ubuntu
명령어를 실행하면 Running에서 Stopped 상태가 됩니다.
Docker Desktop 다운로드 및 설치방법
도커 공식 홈페이지에서 Download for Windows를 클릭해서 다운로드 받습니다.
Products > Docker Desktop으로 들어가서 다운로드 가능합니다.
다운로드 하고 설치를 진행합니다!
Configuration이 나오면 둘다 체크하고 다음으로 넘어갑니다.
첫 번째 옵션은 WSL 관련, 두 번째 옵션은 바탕화면에 아이콘 추가 여부를 묻는 것입니다.
설치가 끝나면 Installation succeeded 가 나타납니다. Close and restart를 눌러 인스톨러를 종료합니다.
저는 재부팅 되어 다시 켰습니다.
컴퓨터 재부팅 후에 Docker Desktop을 실행합니다.
Accept를 눌러서 회원가입해줍니다.
우측 상단의 톱니바퀴 아이콘을 클릭하고 Resources > WSL Integration메뉴로 들어가서 Enable Integration with my default WSL distro
가 체크 되어있는지 확인하고고 체크 되어있지 않다면 체크하고 Apply합니다.
이렇게 WSL2 기반 Docker 설치가 완료되었습니다.
도커 사용법: 프론트엔드 개발 환경 설정하기
-
도커 설치
- 도커를 사용하려면 먼저 도커를 설치해야 합니다. 도커 공식 홈페이지에서 각 운영 체제에 맞는 설치 방법을 참고하여 설치합니다.
-
도커파일(Dockerfile) 작성 프론트엔드 프로젝트를 도커화하려면
Dockerfile
을 작성해야 합니다. 예를 들어, React 애플리케이션을 도커화하려면 다음과 같이Dockerfile
을 작성할 수 있습니다.Dockerfile복사# 1. Node.js 이미지를 기반으로 설정 FROM node:16 # 2. 작업 디렉토리 설정 WORKDIR /app # 3. package.json과 package-lock.json을 컨테이너에 복사 COPY package*.json ./ # 4. 의존성 설치 RUN npm install # 5. 나머지 소스 코드 복사 COPY . . # 6. 빌드 명령 실행 RUN npm run build # 7. 3000번 포트로 애플리케이션 실행 CMD ["npm", "start"] EXPOSE 3000
FROM node:16
: Node.js 이미지를 기반으로 컨테이너를 만듭니다.WORKDIR /app
:/app
이라는 디렉토리를 생성하고 그 안에서 작업을 진행합니다.COPY package*.json ./
:package.json
과package-lock.json
파일을 컨테이너에 복사하여 의존성을 설치합니다.RUN npm install
: 필요한 Node.js 의존성들을 설치합니다.RUN npm run build
: 프로젝트를 빌드합니다.CMD ["npm", "start"]
: 컨테이너가 시작될 때 React 앱을 실행합니다.EXPOSE 3000
: 3000번 포트를 열어 프론트엔드 애플리케이션을 실행합니다.
-
도커 이미지 빌드 위의
Dockerfile
을 작성한 후, 해당 디렉토리에서 도커 이미지를 빌드합니다.bash 복사 docker build -t my-react-app .
-t my-react-app
: 이미지를my-react-app
이라는 이름으로 태그합니다..
: 현재 디렉토리에서Dockerfile
을 찾아 이미지를 빌드합니다.
-
도커 컨테이너 실행 이미지를 빌드한 후, 도커 컨테이너를 실행할 수 있습니다. 다음 명령어로 컨테이너를 실행할 수 있습니다.
bash 복사 docker run -p 3000:3000 my-react-app
-p 3000:3000
: 호스트의 3000번 포트를 컨테이너의 3000번 포트에 매핑하여, 웹 브라우저에서http://localhost:3000
으로 애플리케이션을 접근할 수 있게 합니다.
-
도커 컨테이너 실행 상태 확인 실행 중인 도커 컨테이너를 확인하려면 다음 명령어를 입력합니다.
bash 복사 docker ps
이 명령은 실행 중인 도커 컨테이너 목록을 보여줍니다.
-
도커 컨테이너 종료 실행 중인 도커 컨테이너를 종료하려면,
docker ps
로 컨테이너 ID를 확인한 후 다음 명령어로 종료할 수 있습니다.bash 복사 docker stop <container_id>
도커 Compose 사용 (여러 서비스가 필요한 경우)
프론트엔드 애플리케이션 외에도 백엔드 서버나 데이터베이스가 필요한 경우, 도커 Compose를 사용하여 여러 컨테이너를 한 번에 관리할 수 있습니다. 예를 들어, 프론트엔드와 백엔드를 한 번에 실행할 수 있는 docker-compose.yml
파일을 작성할 수 있습니다.
예시 docker-compose.yml
:
yaml복사version: '3'
services:
frontend:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
backend:
image: node:16
volumes:
- ./backend:/app
working_dir: /app
command: npm start
ports:
- "5000:5000"
frontend
서비스는 React 애플리케이션을 실행합니다.backend
서비스는 Node.js 백엔드 애플리케이션을 실행합니다.ports
는 호스트와 컨테이너 간의 포트를 매핑합니다.
도커 컴포즈를 사용하면, 여러 서비스가 동시에 실행되며 docker-compose up
명령어로 모든 서비스를 간편하게 실행할 수 있습니다.
결론
프론트엔드 개발에서 도커를 사용하는 것은 개발 환경을 일관되게 유지하고, 빌드 및 배포 프로세스를 자동화하는 데 매우 유용합니다. 도커를 사용하면 환경 차이로 인한 문제를 줄이고, 개발과 배포에서의 효율성을 높일 수 있습니다.
댓글남기기