“`html
Docker 입문: 컨테이너 기술로 개발 환경 마스터하기
개발자라면 누구나 한 번쯤은 개발 환경 설정의 어려움을 겪어봤을 겁니다. “내 컴퓨터에서는 잘 되는데…”라는 악명 높은 문장을 외치지 않도록 도와주는 강력한 도구가 있습니다. 바로 Docker입니다. 이 글에서는 Docker의 기본 개념부터 설치, 사용법까지 초보자도 쉽게 따라 할 수 있도록 자세히 설명하겠습니다. 컨테이너 기술을 통해 개발 생산성을 극대화하는 방법을 배워보세요.
Docker란 무엇일까요?
Docker는 컨테이너 기반의 오픈소스 플랫폼입니다. 복잡한 애플리케이션을 패키징, 배포, 실행하는 과정을 단순화해줍니다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리, 설정)을 포함하는 격리된 환경입니다. 이 컨테이너는 어떤 환경에서도 일관되게 실행될 수 있다는 장점이 있습니다.
컨테이너 vs 가상 머신
컨테이너는 가상 머신(VM)과 유사하지만, 작동 방식에 큰 차이가 있습니다. VM은 각 VM마다 독립적인 운영체제를 가지는 반면, 컨테이너는 호스트 OS의 커널을 공유합니다. 따라서 컨테이너는 VM보다 훨씬 가볍고 빠르게 실행되며, 시스템 자원도 효율적으로 사용할 수 있습니다. 제 경험상, Docker를 사용하면서 개발 환경 구축 시간을 획기적으로 줄일 수 있었습니다.
Docker의 장점
Docker는 다음과 같은 다양한 장점을 제공합니다.
- 환경 일관성: 개발, 테스트, 운영 환경에서 동일한 환경을 유지하여 예상치 못한 오류를 방지합니다.
- 빠른 배포: 애플리케이션을 빠르게 패키징하고 배포할 수 있습니다.
- 자원 효율성: VM보다 가볍고 적은 자원을 사용합니다.
- 확장성: 컨테이너를 쉽게 복제하고 확장할 수 있습니다.
- 격리성: 애플리케이션을 격리된 환경에서 실행하여 보안성을 높입니다.
Docker 설치 및 기본 명령어
Docker를 사용하기 위해서는 먼저 Docker Desktop을 설치해야 합니다. Docker Desktop은 Windows, macOS, Linux를 지원하며, Docker 엔진, Docker CLI, Docker Compose 등을 포함하고 있습니다.
Docker Desktop 설치
Docker Desktop 공식 웹사이트 (https://www.docker.com/products/docker-desktop/) 에서 운영체제에 맞는 버전을 다운로드하여 설치합니다. 설치 과정은 간단하며, 화면의 안내에 따라 진행하면 됩니다. 설치 후 Docker Desktop을 실행하면 Docker 엔진이 자동으로 시작됩니다.
기본 Docker 명령어
Docker CLI는 명령줄 인터페이스로, Docker 엔진과 상호작용하여 컨테이너를 관리하고 이미지를 빌드하는 데 사용됩니다. 다음은 Docker의 기본적인 명령어입니다.
- docker version: Docker 버전 정보를 확인합니다.
- docker images: 로컬에 저장된 Docker 이미지 목록을 확인합니다.
- docker ps: 실행 중인 컨테이너 목록을 확인합니다. (
docker ps -a
는 모든 컨테이너 목록을 보여줍니다.) - docker run: 새로운 컨테이너를 실행합니다. (예:
docker run -d -p 8080:80 nginx
) - docker stop: 실행 중인 컨테이너를 중지합니다. (예:
docker stop [컨테이너 ID]
) - docker rm: 컨테이너를 삭제합니다. (예:
docker rm [컨테이너 ID]
) - docker pull: Docker Hub에서 이미지를 다운로드합니다. (예:
docker pull ubuntu
) - docker build: Dockerfile을 사용하여 이미지를 빌드합니다. (예:
docker build -t my-app .
)
Dockerfile 작성 및 이미지 빌드
Dockerfile은 Docker 이미지를 빌드하기 위한 명령어들을 담은 텍스트 파일입니다. Dockerfile을 사용하면 애플리케이션과 그 의존성을 코드로 정의하고, 재현 가능한 이미지를 쉽게 생성할 수 있습니다.
Dockerfile 예시
다음은 간단한 Node.js 애플리케이션을 위한 Dockerfile 예시입니다.
# 베이스 이미지 설정
FROM node:16
# 작업 디렉토리 설정
WORKDIR /app
# 패키지 매니저 파일 복사
COPY package*.json ./
# 의존성 설치
RUN npm install
# 소스 코드 복사
COPY . .
# 애플리케이션 실행 명령어
CMD ["npm", "start"]
이미지 빌드
Dockerfile을 작성한 후, 다음 명령어를 사용하여 이미지를 빌드할 수 있습니다.
docker build -t my-node-app .
-t
옵션은 이미지에 태그(이름)를 지정하는 것이고, .
은 현재 디렉토리를 빌드 컨텍스트로 지정하는 것입니다.
이미지 실행
이미지 빌드가 완료되면, 다음 명령어를 사용하여 컨테이너를 실행할 수 있습니다.
docker run -d -p 3000:3000 my-node-app
-d
옵션은 컨테이너를 백그라운드에서 실행하는 것이고, -p
옵션은 호스트 포트와 컨테이너 포트를 연결하는 것입니다. 이 예시에서는 호스트의 3000번 포트를 컨테이너의 3000번 포트에 연결합니다. 실제로 사용해보니, 이미지 빌드와 실행이 정말 간단해서 놀랐습니다.
Docker Compose를 이용한 다중 컨테이너 관리
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 관리하기 위한 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의하고, 한 번의 명령어로 모든 컨테이너를 실행할 수 있습니다.
docker-compose.yml 예시
다음은 Node.js 애플리케이션과 MongoDB 데이터베이스를 함께 실행하는 docker-compose.yml 예시입니다.
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- MONGO_URI=mongodb://db:27017/mydatabase
db:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- db_data:/data/db
volumes:
db_data:
Docker Compose 실행
docker-compose.yml 파일을 작성한 후, 다음 명령어를 사용하여 애플리케이션을 실행할 수 있습니다.
docker-compose up -d
-d
옵션은 컨테이너를 백그라운드에서 실행하는 것입니다. 이 명령어는 docker-compose.yml 파일에 정의된 모든 서비스를 빌드하고 실행합니다. 개인적으로는, Docker Compose를 사용하면서 복잡한 애플리케이션을 훨씬 쉽게 관리할 수 있게 되었습니다.
결론 및 다음 단계
이 글에서는 Docker의 기본 개념부터 설치, 사용법, Dockerfile 작성, Docker Compose를 이용한 다중 컨테이너 관리까지 다루었습니다. Docker는 개발 환경을 일관성 있게 유지하고 애플리케이션 배포를 간소화하는 데 매우 유용한 도구입니다. 이제 Docker를 사용하여 실제 프로젝트에 적용해보고, 더 나아가 Kubernetes와 같은 컨테이너 오케스트레이션 도구를 학습하여 컨테이너 기술을 마스터해보세요. 다음에는 Docker 이미지 최적화, Docker 네트워크 설정, Docker 보안 등에 대해 더 자세히 알아보도록 하겠습니다.
“`