“`html
Docker 입문: 컨테이너 기술의 기초부터 활용까지
Docker는 현대 소프트웨어 개발과 배포의 필수 도구가 되었습니다. 개발 환경을 일관되게 유지하고, 애플리케이션을 격리된 공간에서 실행하며, 배포 과정을 간소화하는 데 크게 기여합니다. 이 글에서는 Docker의 기본적인 개념부터 실제 활용 방법까지 초보자도 쉽게 이해할 수 있도록 자세히 설명하겠습니다.
Docker란 무엇일까요?
Docker는 컨테이너 기반의 가상화 플랫폼입니다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리, 설정 등)을 패키징한 것입니다. 컨테이너는 운영체제 커널을 공유하면서 호스트 시스템과 격리되어 실행되므로, 다양한 환경에서 일관된 방식으로 애플리케이션을 실행할 수 있습니다.
컨테이너 vs 가상 머신
컨테이너와 가상 머신(VM)은 모두 가상화 기술이지만, 동작 방식에 큰 차이가 있습니다. VM은 하이퍼바이저를 통해 전체 운영체제를 가상화하는 반면, 컨테이너는 호스트 운영체제의 커널을 공유하며 애플리케이션만 격리합니다. 따라서 컨테이너는 VM보다 훨씬 가볍고 빠르며, 시스템 자원도 효율적으로 사용합니다. 제 경험상, 개발 환경을 구축할 때 VM보다 Docker를 사용하는 것이 훨씬 간편하고 효율적이었습니다.
Docker의 장점
Docker를 사용하면 다음과 같은 장점을 얻을 수 있습니다.
- 일관성 있는 개발 환경: 개발, 테스트, 운영 환경을 동일하게 유지하여 “내 컴퓨터에서는 잘 되는데…” 문제를 해결할 수 있습니다.
- 빠른 배포: 컨테이너 이미지를 통해 애플리케이션을 빠르게 배포하고 확장할 수 있습니다.
- 자원 효율성: 가벼운 컨테이너를 사용하여 시스템 자원을 효율적으로 활용할 수 있습니다.
- 격리된 환경: 애플리케이션을 격리된 환경에서 실행하여 보안성을 높일 수 있습니다.
Docker 설치 및 기본 명령어
Docker를 사용하기 위해서는 먼저 Docker Engine을 설치해야 합니다. Docker Desktop은 Windows와 macOS에서 Docker를 쉽게 사용할 수 있도록 제공되는 도구입니다. 리눅스에서는 패키지 관리자를 통해 Docker Engine을 설치할 수 있습니다.
Docker 설치
Docker Desktop은 Docker 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 리눅스에서는 다음 명령어를 사용하여 Docker Engine을 설치할 수 있습니다 (Ubuntu 기준).
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
기본 명령어
Docker 설치 후에는 다음과 같은 기본 명령어를 사용하여 Docker 컨테이너를 관리할 수 있습니다.
docker run
: 컨테이너를 실행합니다.docker ps
: 실행 중인 컨테이너 목록을 보여줍니다.docker stop
: 컨테이너를 중지합니다.docker rm
: 컨테이너를 삭제합니다.docker images
: 다운로드된 이미지 목록을 보여줍니다.docker pull
: 이미지를 다운로드합니다.
예를 들어, docker run hello-world
명령어를 실행하면 “hello-world” 이미지를 다운로드하고 컨테이너를 실행하여 간단한 메시지를 출력합니다. 실제로 사용해보니, 이 명령어는 Docker 설치가 제대로 되었는지 확인하는 데 유용했습니다.
Docker 이미지와 Dockerfile
Docker 이미지는 컨테이너를 만들기 위한 템플릿입니다. 이미지는 파일 시스템, 라이브러리, 환경 변수 등 컨테이너 실행에 필요한 모든 것을 포함하고 있습니다. Dockerfile은 이미지를 만들기 위한 명령어 세트를 담은 텍스트 파일입니다.
Dockerfile 작성
Dockerfile은 다음과 같은 기본적인 명령어를 사용하여 작성합니다.
FROM
: 베이스 이미지를 지정합니다.RUN
: 명령어를 실행하여 이미지를 빌드합니다.COPY
: 파일을 이미지에 복사합니다.ADD
: 파일 또는 URL을 이미지에 복사합니다.WORKDIR
: 작업 디렉토리를 설정합니다.EXPOSE
: 포트를 개방합니다.CMD
: 컨테이너가 시작될 때 실행할 명령어를 지정합니다.
다음은 간단한 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을 작성한 후에는 docker build
명령어를 사용하여 이미지를 빌드할 수 있습니다.
docker build -t my-python-app .
빌드된 이미지는 docker run
명령어를 사용하여 컨테이너로 실행할 수 있습니다.
docker run -p 8000:8000 my-python-app
이 명령어는 호스트 시스템의 8000번 포트를 컨테이너의 8000번 포트에 연결합니다. 이제 웹 브라우저에서 http://localhost:8000
에 접속하여 애플리케이션을 확인할 수 있습니다.
Docker Compose를 활용한 다중 컨테이너 관리
Docker Compose는 여러 개의 Docker 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 데 사용되는 도구입니다. 예를 들어, 웹 애플리케이션, 데이터베이스, 캐시 서버 등을 함께 실행해야 하는 경우 Docker Compose를 사용하면 편리하게 관리할 수 있습니다.
docker-compose.yml 파일 작성
Docker Compose는 docker-compose.yml
파일에 서비스, 네트워크, 볼륨 등의 설정을 정의합니다. 다음은 웹 애플리케이션과 데이터베이스를 함께 실행하는 docker-compose.yml
파일 예시입니다.
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
Docker Compose 실행
docker-compose.yml
파일이 있는 디렉토리에서 docker-compose up
명령어를 실행하면 정의된 서비스들이 실행됩니다.
docker-compose up -d
-d
옵션은 컨테이너를 백그라운드에서 실행합니다. docker-compose ps
명령어를 사용하여 실행 중인 컨테이너의 상태를 확인할 수 있습니다. 개인적으로는 Docker Compose를 사용하면서 여러 개의 컨테이너를 일일이 관리하는 번거로움을 크게 줄일 수 있었습니다.
결론
Docker는 소프트웨어 개발과 배포를 혁신적으로 변화시킨 기술입니다. 이 글에서는 Docker의 기본적인 개념부터 Dockerfile 작성, Docker Compose를 활용한 다중 컨테이너 관리까지 다루었습니다. Docker를 통해 개발 환경을 일관되게 유지하고, 애플리케이션을 빠르게 배포하며, 시스템 자원을 효율적으로 활용할 수 있습니다.
다음 단계로는 Docker Hub를 이용하여 이미지를 공유하고, Docker Swarm이나 Kubernetes와 같은 컨테이너 오케스트레이션 도구를 학습하여 대규모 시스템을 관리하는 방법을 익히는 것을 추천합니다. Docker는 끊임없이 발전하는 기술이므로, 꾸준히 학습하고 실습하는 것이 중요합니다.
“`