**Docker**는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있도록 해주는 플랫폼입니다. 초보자들도 도커를 활용하면 개발, 배포, 테스트 환경을 손쉽게 설정할 수 있습니다. 이 글에서는 도커의 기본 개념과 사용법을 소개하고, 간단한 애플리케이션을 실행해보는 예제를 함께 살펴보겠습니다.
---
1. 도커란 무엇인가?
도커는 **컨테이너 기반 가상화** 기술로, 애플리케이션과 그 실행에 필요한 모든 것을 하나의 패키지로 묶어 배포할 수 있도록 해줍니다. 도커를 사용하면 다음과 같은 장점을 누릴 수 있습니다:
- **환경 일관성**: 개발 환경, 테스트 환경, 프로덕션 환경 간의 차이를 줄일 수 있습니다.
- **경량화**: 가상 머신보다 더 가볍고 빠르며, 필요할 때만 리소스를 사용합니다.
- **이식성**: 운영 체제에 독립적으로 애플리케이션을 실행할 수 있습니다.
도커의 주요 개념
- **이미지(Image)**: 컨테이너 실행에 필요한 파일, 설정 등을 포함한 읽기 전용 템플릿.
- **컨테이너(Container)**: 이미지를 기반으로 실행되는 격리된 애플리케이션 환경.
- **도커파일(Dockerfile)**: 이미지를 빌드하기 위한 명령어가 포함된 텍스트 파일.
- **레지스트리(Registry)**: 도커 이미지를 저장하고 공유할 수 있는 저장소. (예: [Docker Hub](https://hub.docker.com/))
---
2. 도커 설치하기
도커를 사용하려면 먼저 시스템에 도커를 설치해야 합니다.
Windows / macOS
- 도커 공식 홈페이지에서 [Docker Desktop](https://www.docker.com/products/docker-desktop) 다운로드 및 설치.
- 설치 후 Docker Desktop을 실행하여 도커 데몬(Docker Daemon)이 실행 중인지 확인.
Linux
```bash
패키지 업데이트 및 도커 설치
sudo apt update
sudo apt install docker.io
도커 데몬 실행 및 부팅 시 자동 시작 설정
sudo systemctl start docker
sudo systemctl enable docker
```
설치가 완료되면 터미널에서 다음 명령어로 도커가 제대로 설치되었는지 확인합니다:
```bash
docker --version
```
---
3. 도커 기본 명령어
도커를 다루기 위해서는 몇 가지 기본 명령어를 이해해야 합니다. 여기서는 자주 사용하는 명령어와 그 용도를 소개합니다.
명령어 | 설명 |
---|---|
`docker run` | 이미지를 기반으로 컨테이너 실행 |
`docker pull` | 레지스트리에서 이미지 다운로드 |
`docker ps` | 실행 중인 컨테이너 목록 확인 |
`docker stop` | 실행 중인 컨테이너 중지 |
`docker rm` | 컨테이너 삭제 |
`docker rmi` | 이미지 삭제 |
예를 들어, 아래 명령어는 `hello-world`라는 도커 이미지를 실행하여 테스트합니다:
```bash
docker run hello-world
```
이 명령어는 다음을 수행합니다:
- `hello-world` 이미지를 도커 허브에서 다운로드 (`docker pull hello-world`).
- 컨테이너를 실행하고, "Hello from Docker!" 메시지를 출력.
- 실행이 완료된 후 자동으로 종료.
---
4. 간단한 애플리케이션 실행하기
이번에는 간단한 웹 서버 애플리케이션을 도커 컨테이너로 실행해 보겠습니다. `nginx`라는 유명한 웹 서버를 사용해보겠습니다.
- **nginx 이미지 다운로드 및 실행**
```bash
docker run --name mynginx -p 8080:80 -d nginx
```
- `--name mynginx`: 컨테이너 이름을 `mynginx`로 설정.
- `-p 8080:80`: 호스트의 8080 포트를 컨테이너의 80 포트에 매핑.
- `-d`: 백그라운드 모드로 실행.
**웹 브라우저로 확인**
- 브라우저에서 `http://localhost:8080\`에 접속합니다.
- Nginx 환영 페이지가 보이면 도커가 성공적으로 애플리케이션을 실행한 것입니다.**컨테이너 중지 및 삭제**
```bash
docker stop mynginx
docker rm mynginx
```
---
5. Dockerfile로 사용자 정의 이미지 만들기
도커의 진정한 강점은 **사용자 정의 이미지**를 만들 수 있다는 점입니다. 예를 들어, 간단한 Python 애플리케이션을 실행하기 위한 이미지를 만들어보겠습니다.
- 프로젝트 폴더에 `Dockerfile` 생성:
```dockerfile
베이스 이미지로 Python 사용
FROM python:3.9
애플리케이션 파일 복사
COPY app.py /app/
작업 디렉토리 설정
WORKDIR /app
애플리케이션 실행
CMD ["python", "app.py"]
```
- `app.py` 파일 생성:
```python
app.py
print("Hello from Docker!")
```
- **이미지 빌드 및 실행**:
```bash
현재 디렉토리의 Dockerfile로 이미지 빌드
docker build -t mypythonapp .
컨테이너 실행
docker run mypythonapp
```
이 명령어를 실행하면 "Hello from Docker!" 메시지가 출력됩니다.
---
6. 도커 컴포즈(Docker Compose) 사용하기
도커 컴포즈는 여러 컨테이너를 정의하고, 일괄적으로 관리할 수 있게 해주는 도구입니다. 예를 들어, 데이터베이스와 웹 애플리케이션을 동시에 실행해야 할 때 유용합니다.
- `docker-compose.yml` 파일 생성:
```yaml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
```
- 도커 컴포즈 실행:
```bash
docker-compose up -d
```
이제 `nginx`와 `mysql`이 동시에 실행됩니다.
---
7. 결론
도커는 초보자도 손쉽게 사용할 수 있는 도구로, 개발 환경 설정부터 애플리케이션 배포까지 다양한 상황에서 활용할 수 있습니다.