“`html
Docker 입문: 컨테이너 가상화로 개발 환경 구축하기
서론: 왜 Docker를 배워야 할까요?
현대 소프트웨어 개발에서 Docker는 필수적인 도구로 자리 잡았습니다. Docker는 컨테이너 가상화 기술을 통해 개발, 테스트, 배포 환경을 일관성 있게 유지하고, 애플리케이션의 이식성을 극대화합니다. 더 이상 “내 컴퓨터에서는 잘 되는데…”라는 문제를 겪지 않아도 됩니다! 이 글에서는 Docker의 기본 개념부터 실제 사용법까지, 초보자도 쉽게 따라 할 수 있도록 자세히 설명하겠습니다. 제 경험상, Docker를 배우면 개발 생산성이 눈에 띄게 향상되는 것을 체감할 수 있습니다.
Docker를 사용하면 개발 환경 구축에 드는 시간과 노력을 크게 줄일 수 있습니다. 각 개발자가 서로 다른 환경을 사용하는 경우 발생하는 충돌 문제도 해결할 수 있습니다. 또한, 애플리케이션을 컨테이너로 패키징하여 클라우드, 온프레미스 등 다양한 환경에 손쉽게 배포할 수 있습니다.
Docker 기본 개념 이해하기
컨테이너란 무엇일까요?
컨테이너는 애플리케이션 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정)을 포함하는 표준화된 패키지입니다. 컨테이너는 호스트 OS의 커널을 공유하므로 가상 머신보다 가볍고 빠르게 실행됩니다. 마치 독립된 작은 운영체제처럼 작동한다고 생각하시면 됩니다.
이미지란 무엇일까요?
이미지는 컨테이너를 만들기 위한 템플릿입니다. 이미지에는 애플리케이션과 그 종속성이 정의되어 있습니다. Docker Hub와 같은 레지스트리에서 이미지를 다운로드하거나, 직접 이미지를 빌드할 수 있습니다. 이미지 위에 변경 사항을 쌓아 새로운 이미지를 만들 수도 있습니다.
Dockerfile이란 무엇일까요?
Dockerfile은 이미지를 빌드하기 위한 명령어 집합을 담고 있는 텍스트 파일입니다. Dockerfile을 사용하면 이미지를 재현 가능하고 자동화된 방식으로 빌드할 수 있습니다. Dockerfile에는 베이스 이미지 지정, 필요한 패키지 설치, 환경 변수 설정, 애플리케이션 코드 복사 등의 명령어가 포함됩니다.
Docker 설치 및 기본 명령어 사용법
Docker 설치하기
Docker는 Windows, macOS, Linux 등 다양한 운영체제에서 사용할 수 있습니다. Docker 공식 웹사이트(https://www.docker.com/)에서 자신의 운영체제에 맞는 Docker Desktop을 다운로드하여 설치하세요. 설치 과정은 비교적 간단하며, 공식 문서에 자세한 설명이 나와 있습니다.
Docker 명령어 사용하기
Docker를 설치했다면, 터미널 또는 명령 프롬프트에서 Docker 명령어를 사용할 수 있습니다. 몇 가지 기본적인 명령어는 다음과 같습니다.
docker run [이미지 이름]
: 컨테이너를 실행합니다.docker ps
: 실행 중인 컨테이너 목록을 표시합니다.docker images
: 로컬에 저장된 이미지 목록을 표시합니다.docker pull [이미지 이름]
: Docker Hub에서 이미지를 다운로드합니다.docker stop [컨테이너 ID]
: 컨테이너를 중지합니다.docker rm [컨테이너 ID]
: 컨테이너를 삭제합니다.
실제로 사용해보니, 처음에는 명령어가 낯설 수 있지만, 꾸준히 사용하다 보면 금방 익숙해질 것입니다. docker --help
명령어를 통해 각 명령어의 자세한 사용법을 확인할 수 있습니다.
Dockerfile 작성 및 이미지 빌드 실습
간단한 웹 애플리케이션을 위한 Dockerfile 작성
다음은 Node.js 기반의 간단한 웹 애플리케이션을 위한 Dockerfile 예시입니다.
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
위 Dockerfile은 다음과 같은 순서로 동작합니다.
FROM node:16
: Node.js 16 버전을 베이스 이미지로 사용합니다.WORKDIR /app
: 컨테이너 내 작업 디렉토리를 `/app`으로 설정합니다.COPY package*.json ./
: `package.json` 및 `package-lock.json` 파일을 작업 디렉토리에 복사합니다.RUN npm install
: 애플리케이션의 종속성을 설치합니다.COPY . .
: 애플리케이션의 모든 코드를 작업 디렉토리에 복사합니다.EXPOSE 3000
: 컨테이너의 3000번 포트를 외부로 노출합니다.CMD ["npm", "start"]
: 컨테이너가 시작될 때 `npm start` 명령어를 실행합니다.
이미지 빌드 및 컨테이너 실행
Dockerfile이 있는 디렉토리에서 다음 명령어를 실행하여 이미지를 빌드합니다.
docker build -t my-node-app .
-t
옵션은 이미지에 태그(이름)를 지정하는 데 사용됩니다. 이미지 빌드가 완료되면 다음 명령어를 실행하여 컨테이너를 실행합니다.
docker run -p 3000:3000 my-node-app
-p
옵션은 호스트의 포트와 컨테이너의 포트를 연결하는 데 사용됩니다. 이제 웹 브라우저에서 `localhost:3000`에 접속하면 애플리케이션을 확인할 수 있습니다.
Docker Compose를 활용한 멀티 컨테이너 애플리케이션 관리
Docker Compose란 무엇일까요?
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스를 정의하고, 단일 명령어로 모든 서비스를 시작, 중지, 재시작할 수 있습니다. 개인적으로는 Docker Compose를 사용하면 복잡한 애플리케이션 관리가 훨씬 간편해진다고 생각합니다.
Docker Compose 파일 작성
다음은 Node.js 웹 애플리케이션과 MySQL 데이터베이스를 함께 실행하기 위한 Docker Compose 파일 예시입니다.
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- NODE_ENV=development
- DB_HOST=db
- DB_USER=root
- DB_PASSWORD=password
- DB_NAME=mydb
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
위 Docker Compose 파일은 `web` 서비스와 `db` 서비스를 정의합니다. `web` 서비스는 Dockerfile을 사용하여 이미지를 빌드하고, `db` 서비스는 MySQL 8.0 이미지를 사용합니다. `depends_on` 옵션을 사용하면 `web` 서비스가 `db` 서비스에 의존한다는 것을 명시할 수 있습니다.
Docker Compose 실행
Docker Compose 파일이 있는 디렉토리에서 다음 명령어를 실행하여 애플리케이션을 실행합니다.
docker-compose up -d
-d
옵션은 백그라운드에서 컨테이너를 실행하는 데 사용됩니다. 이제 `docker ps` 명령어를 실행하면 두 개의 컨테이너가 실행 중인 것을 확인할 수 있습니다.
결론: Docker를 활용한 효율적인 개발 워크플로우 구축
이 글에서는 Docker의 기본 개념부터 실제 사용법까지, 초보자도 쉽게 따라 할 수 있도록 자세히 설명했습니다. Docker를 사용하면 개발 환경을 일관성 있게 유지하고, 애플리케이션의 이식성을 극대화하며, 개발 생산성을 향상시킬 수 있습니다. 제 경험상, Docker는 현대 소프트웨어 개발에서 없어서는 안 될 중요한 도구입니다.
다음 단계로는 Docker Hub에 자신의 이미지를 공유하거나, Docker를 활용하여 CI/CD 파이프라인을 구축하는 것을 고려해 볼 수 있습니다. Docker는 지속적으로 발전하고 있으며, 다양한 활용 방법이 존재합니다. Docker 공식 문서를 참고하여 자신에게 맞는 방식으로 Docker를 활용해 보세요. 앞으로도 Docker를 꾸준히 학습하고 실무에 적용하면서 더욱 능숙한 개발자가 되시길 바랍니다.
“`