“`html
Docker 입문: 개발 환경 구축과 컨테이너 관리 완벽 가이드
Docker란 무엇일까요?
컨테이너 기술의 혁명
Docker는 컨테이너 기반의 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션과 그 종속성을 패키징하여 격리된 환경에서 실행할 수 있게 해줍니다. 마치 가상 머신과 비슷하지만, 훨씬 가볍고 빠릅니다. Docker를 사용하면 개발, 배포, 실행 환경의 일관성을 유지하고, 애플리케이션을 어디든 쉽게 이동시킬 수 있습니다.
제 경험상, 개발 환경 설정에 시간을 낭비하는 경우가 많았습니다. Docker를 사용하면서 이러한 문제가 해결되었고, 생산성이 크게 향상되었습니다. 이제 개발자는 코딩에만 집중할 수 있습니다.
Docker의 핵심 개념
Docker를 이해하려면 몇 가지 핵심 개념을 알아야 합니다.
- 이미지(Image): 컨테이너를 만들기 위한 읽기 전용 템플릿입니다. 애플리케이션, 라이브러리, 설정 파일 등을 포함합니다.
- 컨테이너(Container): 이미지를 기반으로 실행되는 격리된 환경입니다. 이미지를 실행한 인스턴스라고 생각하면 됩니다.
- Docker Hub: 이미지 레지스트리 서비스입니다. 공개된 이미지를 공유하고 다운로드할 수 있습니다.
- Dockerfile: 이미지를 만들기 위한 명령어들을 담은 텍스트 파일입니다.
Docker 설치 및 기본 사용법
Docker 설치하기
Docker는 Windows, macOS, Linux 등 다양한 운영체제에서 사용할 수 있습니다. Docker 공식 웹사이트에서 운영체제에 맞는 버전을 다운로드하여 설치할 수 있습니다.
설치 과정은 운영체제마다 조금씩 다르지만, 기본적으로 설치 파일을 실행하고 안내에 따라 진행하면 됩니다. 설치 후에는 Docker가 정상적으로 실행되는지 확인해야 합니다. 터미널에서 `docker –version` 명령어를 실행하여 Docker 버전 정보를 확인할 수 있습니다.
Docker 이미지 다루기
Docker 이미지는 Docker Hub에서 다운로드하거나, 직접 만들 수 있습니다. Docker Hub에는 다양한 공식 이미지와 커뮤니티 이미지가 존재합니다. `docker pull [이미지 이름]` 명령어를 사용하여 이미지를 다운로드할 수 있습니다.
예를 들어, Ubuntu 이미지를 다운로드하려면 `docker pull ubuntu` 명령어를 실행합니다. 다운로드한 이미지는 `docker images` 명령어로 확인할 수 있습니다.
개인적으로는 Docker Hub에서 필요한 이미지를 검색하고, 공식 이미지를 사용하는 것을 선호합니다. 공식 이미지는 보안 업데이트와 관리가 잘 되어 있어 안정성이 높습니다.
Docker 컨테이너 실행 및 관리
다운로드한 이미지를 사용하여 컨테이너를 실행할 수 있습니다. `docker run [이미지 이름]` 명령어를 사용하여 컨테이너를 실행합니다. 예를 들어, Ubuntu 이미지를 사용하여 컨테이너를 실행하려면 `docker run -it ubuntu bash` 명령어를 실행합니다.
`-it` 옵션은 상호작용 모드로 컨테이너에 접속할 수 있게 해줍니다. `bash`는 컨테이너 내에서 실행할 쉘을 지정합니다. 컨테이너가 실행되면 터미널 프롬프트가 컨테이너 내부로 변경됩니다.
컨테이너를 종료하려면 `exit` 명령어를 입력합니다. 실행 중인 컨테이너 목록을 확인하려면 `docker ps` 명령어를 사용합니다. 모든 컨테이너 목록을 확인하려면 `docker ps -a` 명령어를 사용합니다.
컨테이너를 중지하려면 `docker stop [컨테이너 ID]` 명령어를 사용하고, 삭제하려면 `docker rm [컨테이너 ID]` 명령어를 사용합니다. 컨테이너 ID는 `docker ps` 명령어를 통해 확인할 수 있습니다.
Dockerfile 작성 및 이미지 빌드
Dockerfile이란?
Dockerfile은 이미지를 만들기 위한 명령어들을 담은 텍스트 파일입니다. Dockerfile을 사용하면 이미지 생성 과정을 자동화하고, 재현 가능한 빌드를 할 수 있습니다. Dockerfile은 `FROM`, `RUN`, `COPY`, `WORKDIR`, `EXPOSE`, `CMD` 등 다양한 명령어를 지원합니다.
Dockerfile 작성 예시
다음은 간단한 Python 애플리케이션을 위한 Dockerfile 예시입니다.
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
각 명령어의 의미는 다음과 같습니다.
- FROM python:3.9-slim-buster: 베이스 이미지로 Python 3.9 이미지를 사용합니다.
- WORKDIR /app: 작업 디렉토리를 /app으로 설정합니다.
- COPY requirements.txt .: requirements.txt 파일을 현재 디렉토리로 복사합니다.
- RUN pip install -r requirements.txt: requirements.txt에 명시된 패키지를 설치합니다.
- COPY . .: 현재 디렉토리의 모든 파일을 /app 디렉토리로 복사합니다.
- CMD [“python”, “app.py”]: 컨테이너가 시작될 때 실행할 명령어를 설정합니다.
이미지 빌드하기
Dockerfile을 작성한 후에는 `docker build` 명령어를 사용하여 이미지를 빌드할 수 있습니다. `docker build -t [이미지 이름] .` 명령어를 사용하여 현재 디렉토리의 Dockerfile을 기반으로 이미지를 빌드합니다.
예를 들어, `docker build -t my-python-app .` 명령어를 실행하면 `my-python-app`이라는 이름으로 이미지가 빌드됩니다. 이미지 빌드 과정에서 Dockerfile의 각 명령어가 순서대로 실행됩니다.
Docker Compose 활용: 멀티 컨테이너 애플리케이션 관리
Docker Compose란?
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구입니다. Docker Compose 파일을 사용하여 애플리케이션의 서비스를 정의하고, 네트워크, 볼륨, 환경 변수 등을 설정할 수 있습니다. Docker Compose를 사용하면 복잡한 애플리케이션을 쉽게 관리할 수 있습니다.
Docker Compose 파일 작성 예시
다음은 간단한 웹 애플리케이션과 데이터베이스를 위한 Docker Compose 파일 예시입니다.
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
각 서비스의 의미는 다음과 같습니다.
- web: 웹 애플리케이션 서비스입니다. 현재 디렉토리의 Dockerfile을 사용하여 이미지를 빌드하고, 8000번 포트를 노출합니다. db 서비스에 의존성을 가집니다.
- db: 데이터베이스 서비스입니다. PostgreSQL 13 이미지를 사용하고, 환경 변수를 설정합니다.
Docker Compose 실행하기
Docker Compose 파일을 작성한 후에는 `docker-compose up` 명령어를 사용하여 애플리케이션을 실행할 수 있습니다. `docker-compose up -d` 명령어를 사용하면 백그라운드에서 실행됩니다. `docker-compose down` 명령어를 사용하여 애플리케이션을 중지하고 삭제할 수 있습니다.
실제로 사용해보니, Docker Compose는 복잡한 애플리케이션을 쉽게 관리할 수 있도록 도와줍니다. 여러 개의 컨테이너를 하나의 단위로 관리하고, 설정을 간소화할 수 있습니다.
결론 및 다음 단계
이번 글에서는 Docker의 기본적인 개념부터 설치, 이미지 다루기, Dockerfile 작성, Docker Compose 활용까지 살펴보았습니다. Docker는 개발 환경을 표준화하고, 애플리케이션 배포를 간소화하는 강력한 도구입니다. Docker를 사용하면 개발 생산성을 높이고, 애플리케이션의 안정성을 향상시킬 수 있습니다.
다음 단계로는 Docker 네트워크, 볼륨, Docker Swarm, Kubernetes 등 Docker의 고급 기능을 학습하는 것을 추천합니다. 이러한 고급 기능을 활용하면 더욱 복잡하고 확장 가능한 애플리케이션을 구축할 수 있습니다.
“`