Docker 입문 가이드: 애플리케이션 컨테이너화 빠르게 시작하기
Docker 입문 가이드: 애플리케이션 컨테이너화 빠르게 시작하기
Docker는 현대 소프트웨어 개발 및 배포에서 없어서는 안 될 부분이 되었습니다. Kubernetes에 대한 논의가 쏟아지고 있지만 Docker는 여전히 많은 회사에서 애플리케이션을 구축, 테스트 및 배포하는 데 선호하는 도구입니다. 이 기사에서는 Docker를 빠르게 시작하고 핵심 개념을 이해하며 애플리케이션 컨테이너화를 시작하는 데 도움이 되는 실용적인 예를 제공합니다.
Docker 핵심 개념
실습을 시작하기 전에 Docker의 몇 가지 핵심 개념을 이해하는 것이 중요합니다.
-
이미지 (Image): 이미지는 읽기 전용 템플릿으로, 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임 환경, 시스템 도구, 라이브러리 및 종속성)을 포함합니다. 가상 머신 이미지와 유사하지만 훨씬 가볍습니다.
-
컨테이너 (Container): 컨테이너는 이미지에서 생성된 실행 인스턴스입니다. 이미지의 런타임 인스턴스이며 애플리케이션과 모든 종속성을 포함합니다. 컨테이너는 서로 격리되어 자체 파일 시스템, 프로세스 및 네트워크 공간을 갖습니다.
-
Docker Hub: Docker Hub는 공개 이미지 저장소로, 미리 빌드된 이미지를 다운로드하거나 자신의 이미지를 업로드할 수 있습니다. GitHub와 유사하지만 Docker 이미지 전용입니다.
-
Dockerfile: Dockerfile은 Docker 이미지를 빌드하기 위한 모든 지침이 포함된 텍스트 파일입니다. Dockerfile을 작성하여 이미지 생성 프로세스를 자동화할 수 있습니다.
-
Docker Compose: Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하는 데 사용되는 도구입니다. YAML 파일을 사용하여 애플리케이션 서비스를 구성한 다음 단일 명령으로 모든 서비스를 시작하거나 중지할 수 있습니다.
Docker 설치
먼저 Docker를 설치해야 합니다. Docker는 다양한 운영 체제용 설치 패키지를 제공합니다. Docker 공식 웹사이트를 방문하여 해당 지침에 따라 설치하십시오.
설치가 완료되면 docker --version 명령을 실행하여 Docker가 올바르게 설치되었는지 확인할 수 있습니다.
간단한 Python 애플리케이션 컨테이너화
간단한 Python 애플리케이션을 만들고 Docker를 사용하여 컨테이너화합니다.
1. Python 애플리케이션 만들기
app.py라는 파일을 만들고 다음 코드를 포함합니다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
이 간단한 Flask 애플리케이션은 루트 경로 /에서 "Hello, Docker!"를 반환합니다.
2. requirements.txt 파일 만들기
애플리케이션은 Flask 라이브러리에 의존하므로 이러한 종속성을 선언하기 위해 requirements.txt 파일을 만들어야 합니다.
Flask
3. Dockerfile 만들기
Dockerfile이라는 파일을 만들고 다음 내용을 추가합니다.
# 공식 Python 이미지를 기본 이미지로 사용
FROM python:3.9-slim-buster
# 작업 디렉토리 설정
WORKDIR /app
# requirements.txt 파일을 작업 디렉토리에 복사
COPY requirements.txt .
# 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
# 복사 애플리케이션 코드
COPY app.py .
# 포트 5000을 노출 (Flask 기본 포트)
EXPOSE 5000
# 애플리케이션 실행
CMD ["python", "app.py"]
4. 이미지 빌드
Dockerfile이 있는 디렉토리에서 다음 명령을 실행하여 Docker 이미지를 빌드합니다.
docker build -t my-python-app .
5. 컨테이너 실행
이미지가 빌드되면 다음 명령을 사용하여 컨테이너를 실행할 수 있습니다.
docker run -d -p 5000:5000 my-python-app
이제 브라우저에서 http://localhost:5000을 방문하면 "Hello, Docker!" 메시지가 표시됩니다.
Docker Compose 사용 (선택 사항)
Docker Compose를 사용하면 여러 컨테이너를 쉽게 관리할 수 있습니다. docker-compose.yml 파일을 만들고 다음 내용을 추가합니다.
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
그런 다음 다음 명령을 실행하여 애플리케이션을 시작합니다.
docker-compose up -d
결론
이 가이드에서는 Docker의 기본 사항을 소개하고 간단한 Python 애플리케이션을 컨테이너화하는 방법을 보여주었습니다. Docker는 애플리케이션을 구축, 배포 및 관리하는 데 매우 강력한 도구이며, 이 가이드가 Docker 여정을 시작하는 데 도움이 되었기를 바랍니다.# 애플리케이션 코드를 작업 디렉터리에 복사 COPY app.py .
포트 5000 노출
EXPOSE 5000
시작 명령 정의
CMD ["python", "app.py"]
**Dockerfile 설명:**
* `FROM python:3.9-slim-buster`: 베이스 이미지를 Python 3.9의 슬림 버전으로 지정합니다.
* `WORKDIR /app`: 컨테이너 내부의 작업 디렉터리를 `/app`으로 설정합니다.
* `COPY requirements.txt .`: 현재 디렉터리의 `requirements.txt` 파일을 컨테이너의 `/app` 디렉터리로 복사합니다.
* `RUN pip install --no-cache-dir -r requirements.txt`: 컨테이너 내에서 `pip` 명령을 실행하여 `requirements.txt` 파일에 지정된 종속성을 설치합니다. `--no-cache-dir` 파라미터는 이미지 크기를 줄일 수 있습니다.
* `COPY app.py .`: 현재 디렉터리의 `app.py` 파일을 컨테이너의 `/app` 디렉터리로 복사합니다.
* `EXPOSE 5000`: 컨테이너가 5000 포트를 리스닝하도록 선언합니다.
* `CMD ["python", "app.py"]`: 컨테이너 시작 시 실행할 명령을 정의합니다.
### 4. Docker 이미지 빌드
`Dockerfile`이 포함된 디렉터리에서 다음 명령을 실행하여 Docker 이미지를 빌드합니다.
```bash
docker build -t my-python-app .
docker build: 이미지를 빌드하는 명령입니다.-t my-python-app: 이미지에 이름(my-python-app)을 지정합니다..: Dockerfile이 있는 디렉터리(현재 디렉터리)를 지정합니다.
빌드 프로세스는 네트워크 속도 및 종속성 크기에 따라 시간이 걸릴 수 있습니다.
5. Docker 컨테이너 실행
다음 명령을 사용하여 Docker 컨테이너를 실행합니다.
docker run -d -p 5000:5000 my-python-app
docker run: 컨테이너를 실행하는 명령입니다.-d: 분리 모드(백그라운드에서 실행)로 컨테이너를 실행합니다.-p 5000:5000: 호스트 시스템의 5000 포트를 컨테이너의 5000 포트에 매핑합니다.my-python-app: 사용할 이미지 이름을 지정합니다.
6. 애플리케이션 검증
브라우저에서 http://localhost:5000에 접속하면 "Hello, Docker!"가 표시되어야 합니다.
7. 컨테이너 중지 및 삭제
다음 명령을 사용하여 컨테이너를 중지합니다.
docker stop
`` 는 docker ps 명령으로 확인할 수 있습니다.
다음 명령을 사용하여 컨테이너를 삭제합니다.
docker rm
Docker Compose 시작하기
애플리케이션이 여러 서비스로 구성된 경우 Docker Compose를 사용하여 관리할 수 있습니다.
1. docker-compose.yml 파일 생성
docker-compose.yml이라는 파일을 만들고 다음 내용을 추가합니다.
version: "3.9"
services:
web:
image: my-python-app
ports:
- "5000:5000"
docker-compose.yml 설명:* version: "3.9": Docker Compose 파일의 버전을 지정합니다.
services: 애플리케이션의 서비스를 정의합니다.web: "web"이라는 서비스를 정의합니다.image: my-python-app: 서비스에서 사용할 이미지를 지정합니다.ports: 포트 매핑을 정의합니다.
2. 애플리케이션 시작
docker-compose.yml 파일이 포함된 디렉터리에서 다음 명령을 실행하여 애플리케이션을 시작합니다.
docker-compose up -d
docker-compose up: 애플리케이션을 시작하는 명령입니다.-d: 분리 모드로 컨테이너를 실행합니다.
3. 애플리케이션 중지
다음 명령을 사용하여 애플리케이션을 중지합니다.
docker-compose down
Docker 보안 모범 사례
논의에서 알 수 있듯이 Docker 이미지의 보안은 중요한 문제입니다. 다음은 몇 가지 Docker 보안 모범 사례입니다.
- 공식 이미지 사용: 가능한 한 공식적으로 제공되는 이미지를 사용하십시오. 이러한 이미지는 일반적으로 보안 검사를 거치고 유지 관리됩니다.
- 이미지 취약점 스캔: Trivy와 같은 도구를 사용하여 이미지에서 알려진 취약점을 스캔하고 이미지를 즉시 업데이트하십시오.
- 최소 권한 원칙 사용: root 사용자로 컨테이너를 실행하지 마십시오.
- 컨테이너 리소스 제한: cgroups를 사용하여 컨테이너의 CPU 및 메모리 사용량을 제한합니다.
- 정기적인 이미지 업데이트: 보안 취약점을 수정하기 위해 이미지를 최신 상태로 유지하십시오.
- 보안 스캔 도구 사용: Snyk, Clair 등과 같은 도구를 CI/CD 프로세스에 통합하여 이미지 취약점을 자동으로 스캔할 수 있습니다.





