“`html
Docker 완전 정복: 개발 환경 구축부터 배포까지
최근 몇 년간 Docker는 개발과 운영 환경에서 필수적인 기술로 자리 잡았습니다. 개발자라면 누구나 한 번쯤은 들어봤을 Docker, 하지만 막상 시작하려니 어디서부터 시작해야 할지 막막하신가요? 이 글에서는 Docker의 기본 개념부터 실질적인 활용 방법까지, 초보자도 쉽게 따라 할 수 있도록 자세하게 설명합니다. 제 경험상, Docker는 개발 생산성을 극대화하는 데 정말 큰 도움이 됩니다. 이제 Docker의 세계로 함께 떠나볼까요?
Docker란 무엇일까요?
Docker는 컨테이너 기반의 가상화 플랫폼입니다. 컨테이너는 애플리케이션과 그 의존성을 하나의 패키지로 묶어서 격리된 환경에서 실행할 수 있게 해줍니다. 쉽게 말해, 여러분의 애플리케이션과 필요한 모든 것을 ‘상자’ 안에 넣어서 어떤 환경에서도 동일하게 실행될 수 있도록 해주는 기술입니다. 개인적으로는 Docker를 사용하면서 개발 환경 설정에 들이는 시간을 획기적으로 줄일 수 있었습니다.
컨테이너와 가상 머신의 차이점
컨테이너와 가상 머신(VM)은 모두 격리된 환경을 제공하지만, 작동 방식에 큰 차이가 있습니다. VM은 각자 독립적인 운영체제를 가지고 있는 반면, 컨테이너는 호스트 운영체제의 커널을 공유합니다. 따라서 컨테이너는 VM보다 훨씬 가볍고 빠르게 실행될 수 있습니다. 이러한 장점 덕분에 Docker는 개발, 테스트, 배포 단계를 효율적으로 관리할 수 있게 해줍니다.
Docker의 주요 장점
- 환경 일관성: 개발, 테스트, 운영 환경에서 동일한 애플리케이션 실행 보장
- 리소스 효율성: VM보다 가볍고 적은 리소스로 실행 가능
- 빠른 배포: 컨테이너 이미지를 통해 신속한 배포 가능
- 확장성: 필요에 따라 컨테이너를 쉽게 확장 가능
Docker 설치 및 기본 명령어
이제 Docker를 실제로 설치하고 기본적인 명령어를 사용해 보겠습니다. Docker Desktop은 Windows와 macOS에서 간편하게 Docker를 사용할 수 있도록 해주는 훌륭한 도구입니다.
Docker Desktop 설치
Docker Desktop은 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 운영체제에 맞는 버전을 선택하여 설치하면 됩니다. 설치 과정은 매우 간단하며, 대부분의 경우 기본 설정으로 진행해도 무방합니다. 실제로 사용해보니, Docker Desktop은 GUI 환경을 제공하여 Docker를 처음 접하는 사용자도 쉽게 사용할 수 있도록 도와줍니다.
기본 Docker 명령어
Docker 설치가 완료되면 터미널(또는 명령 프롬프트)을 열고 다음 명령어를 실행해 보세요.
docker --version
: Docker 버전 확인docker pull <이미지_이름>
: Docker 이미지 다운로드 (예:docker pull ubuntu
)docker images
: 다운로드된 Docker 이미지 목록 확인docker run <이미지_이름>
: Docker 컨테이너 실행 (예:docker run -it ubuntu bash
)docker ps
: 실행 중인 Docker 컨테이너 목록 확인docker stop <컨테이너_ID>
: Docker 컨테이너 중지docker rm <컨테이너_ID>
: Docker 컨테이너 삭제
docker run -it ubuntu bash
명령어는 Ubuntu 이미지를 기반으로 새로운 컨테이너를 실행하고, 터미널을 통해 컨테이너에 접속하는 명령어입니다. 이 명령어를 통해 컨테이너 내부에서 다양한 작업을 수행할 수 있습니다.
Docker 이미지 생성 및 관리
Docker 이미지는 컨테이너를 생성하기 위한 템플릿입니다. 직접 이미지를 만들어서 사용하면, 원하는 환경을 쉽게 구축하고 공유할 수 있습니다.
Dockerfile 작성
Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. Dockerfile에는 운영체제, 필요한 패키지, 애플리케이션 코드 등 이미지를 구성하는 데 필요한 모든 정보가 담겨 있습니다. 다음은 간단한 Python 애플리케이션을 위한 Dockerfile 예시입니다.
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
위 Dockerfile은 Python 3.9 이미지를 기반으로 하고, requirements.txt
파일에 정의된 패키지를 설치한 후, 애플리케이션 코드(app.py
)를 컨테이너에 복사하고 실행하는 과정을 정의합니다. 제 경험상, Dockerfile을 꼼꼼하게 작성하는 것이 안정적인 이미지를 만드는 데 매우 중요합니다.
Docker 이미지 빌드
Dockerfile을 작성했으면, 다음 명령어를 사용하여 Docker 이미지를 빌드할 수 있습니다.
docker build -t my-python-app .
-t
옵션은 이미지에 태그(이름)를 지정하는 옵션입니다. 위 명령어는 현재 디렉토리(.
)에 있는 Dockerfile을 사용하여 my-python-app
이라는 이름의 이미지를 빌드합니다.
Docker 이미지 저장소 활용 (Docker Hub)
Docker Hub는 Docker 이미지를 공유하고 관리할 수 있는 클라우드 기반의 서비스입니다. 직접 만든 이미지를 Docker Hub에 업로드하여 다른 사람들과 공유하거나, 다른 사람들이 만들어 놓은 이미지를 다운로드하여 사용할 수 있습니다. Docker Hub 계정을 생성하고, docker login
명령어를 사용하여 로그인한 후, 다음 명령어를 사용하여 이미지를 Docker Hub에 푸시할 수 있습니다.
docker push my-python-app
Docker Compose를 활용한 멀티 컨테이너 애플리케이션 배포
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 데 사용되는 도구입니다. 예를 들어, 웹 애플리케이션을 개발할 때, 웹 서버(예: Nginx), 데이터베이스(예: MySQL), 애플리케이션 서버(예: Python Flask)를 각각 다른 컨테이너로 실행하고, 이들을 서로 연결해야 할 수 있습니다. Docker Compose를 사용하면 이러한 복잡한 설정을 간단하게 관리할 수 있습니다.
docker-compose.yml 파일 작성
docker-compose.yml
파일은 애플리케이션을 구성하는 컨테이너, 네트워크, 볼륨 등의 설정을 정의합니다. 다음은 간단한 웹 애플리케이션을 위한 docker-compose.yml
파일 예시입니다.
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
위 docker-compose.yml
파일은 Nginx 웹 서버와 MySQL 데이터베이스 컨테이너를 정의합니다. Nginx 컨테이너는 80번 포트를 호스트의 80번 포트에 매핑하고, ./html
디렉토리를 컨테이너의 /usr/share/nginx/html
디렉토리에 마운트합니다. MySQL 컨테이너는 루트 비밀번호를 설정하고, 3306번 포트를 호스트의 3306번 포트에 매핑합니다.
Docker Compose 실행
docker-compose.yml
파일이 있는 디렉토리에서 다음 명령어를 실행하여 애플리케이션을 실행할 수 있습니다.
docker-compose up -d
-d
옵션은 컨테이너를 백그라운드에서 실행하는 옵션입니다. 위 명령어를 실행하면, docker-compose.yml
파일에 정의된 컨테이너들이 자동으로 생성되고 실행됩니다. 개인적으로는 Docker Compose를 사용하면서 여러 개의 컨테이너를 동시에 관리하는 것이 훨씬 편리해졌습니다.
결론 및 다음 단계
이 글에서는 Docker의 기본 개념부터 설치, 이미지 생성, 컨테이너 관리, Docker Compose를 활용한 배포까지 Docker의 핵심 내용을 다루었습니다. Docker는 처음에는 어렵게 느껴질 수 있지만, 꾸준히 사용하다 보면 개발 생산성을 크게 향상시킬 수 있는 강력한 도구입니다. 이제 Docker를 활용하여 자신만의 개발 환경을 구축하고, 애플리케이션 배포를 자동화해 보세요. 다음 단계로는 Dockerfile 최적화, Docker 네트워크 설정, Docker 볼륨 관리 등에 대해 더 자세히 알아보시는 것을 추천합니다.
“`