도커란 무엇인가
도커는 컨테이너 기술을 사용하여 애플리케이션과 그 의존성을 하나의 패키지로 묶어주는 플랫폼이다.
쉽게 말해, "내 컴퓨터에서 잘 되던 코드가 다른 환경에서도 동일하게 동작하게 만들어주는 도구"라고 생각하면 된다.
도커의 핵심 개념
- 이미지 (Image)
- 애플리케이션과 필요한 모든 파일, 의존성을 포함한 실행 가능한 패키지.
- 불변성을 가지며, 컨테이너를 생성하는 템플릿 역할을 한다.
- 예: "Node.js 앱"을 실행하기 위한 이미지.
- 컨테이너 (Container)
- 도커 이미지를 실행한 상태.
- 가볍고 독립적인 실행 환경으로, 각 컨테이너는 서로 격리되어 있다.
- 예: "Node.js 앱"이 실행 중인 상태.
- 도커 파일 (Dockerfile)
- 이미지를 생성하기 위한 설정 파일.
- 도커 파일에 명령어를 정의하여, 이미지 생성 과정을 자동화한다.
FROM node:14 WORKDIR /app COPY . . RUN npm install CMD ["node", "app.js"] - 도커 허브 (Docker Hub)
- 도커 이미지를 공유하는 저장소.
- 공식 이미지와 사용자 생성 이미지를 다운로드하거나 업로드할 수 있다.
CI/CD에서의 도커 역할
- CI (지속적 통합)
- 개발자가 코드를 수정하면 자동으로 테스트하고 빌드한다.
- 빌드 결과물을 도커 이미지로 생성하여, 배포 준비를 한다.
docker build -t my-app:1.0 . docker run -p 8080:8080 my-app:1.0 - CD (지속적 배포)
- 생성된 도커 이미지를 EC2 같은 서버에 배포.
- 배포 과정에서 컨테이너를 실행하여 애플리케이션을 가동한다.
docker push my-app:1.0 ssh ec2-user@<ec2-ip> "docker run -d -p 8080:8080 my-app:1.0"
도커와 젠킨스
- 젠킨스(Jenkins): CI/CD 파이프라인을 구축하는 데 사용되는 자동화 도구.
- 도커와 젠킨스의 조합:
- 젠킨스가 코드를 빌드하고 테스트한 후, 도커 이미지를 생성.
- 생성된 이미지를 도커 허브에 푸시하거나 EC2에 배포.
도커의 장점
- 환경 일관성
- 개발, 테스트, 운영 환경 간 차이를 줄여준다.
- "내 컴퓨터에서 잘 되던 코드"가 다른 환경에서도 동일하게 실행.
- 경량화
- 가상 머신(VM)보다 가벼운 컨테이너 기술로, 빠르게 실행 가능.
- 빠른 배포
- 컨테이너를 실행하면 즉시 애플리케이션이 동작.
- 이식성
- 도커 이미지는 어디서든 실행 가능(로컬, 클라우드, 온프레미스 등).
도커가 어렵다고 느껴진다면
처음부터 도커의 모든 것을 처음부터 완벽히 이해할 필요는 없다.
다음과 같은 기본적인 흐름만 익히면 충분하다.
- 이미지 생성: Dockerfile 작성.
- 컨테이너 실행: 도커 이미지를 실행하여 앱 가동.
- 도커 허브 사용: 이미지를 공유하거나 가져오기.
이 기본 흐름을 이해한 후, 실무에서 사용하는 상황에 맞게 하나씩 익히면 된다.
도커는 어디서든 사용할 가능성이 높기 때문에, 기본 개념과 실습 경험을 쌓아두면 큰 도움이 된다.