-
Notifications
You must be signed in to change notification settings - Fork 0
KR_Virt_Docker
somaz edited this page Mar 30, 2026
·
1 revision
Docker는 소프트웨어 컨테이너 내에서 애플리케이션을 배포하기 위한 오픈 소스 플랫폼이다. 리눅스의 운영체제 수준 가상화에 대한 추가적인 추상화 및 자동화를 제공한다.
Docker는 리눅스 커널의 리소스 격리 기능(예: cgroups 및 커널 네임스페이스)과 유니온 파일 시스템(OverlayFS와 같은)을 사용하여 단일 리눅스 인스턴스 내에서 독립적인 컨테이너가 실행될 수 있도록 하여 가상 머신을 시작하고 유지하는 오버헤드를 방지한다.
- 컨테이너화: 애플리케이션과 그 의존성을 컨테이너에 패키징하여 개발, 테스트 및 프로덕션 환경에서 일관성을 보장한다.
- 경량성: 컨테이너는 기계의 OS 커널을 공유하고 애플리케이션당 OS를 요구하지 않아 가상 머신보다 더 가볍다.
- 이식성: Docker로 컨테이너화된 애플리케이션은 Docker를 지원하는 모든 플랫폼에서 어디에서나 실행될 수 있다.
- 격리: Docker는 각 컨테이너가 격리되도록 보장한다. 컨테이너는 자체 파일 시스템, 네트워킹 및 고유한 프로세스 공간을 가진다.
- Docker Hub: Docker Hub는 Docker 이미지를 위한 저장소이다. 사용자는 Docker Hub에서 이미지를 가져와 애플리케이션의 기반으로 사용할 수 있다.
Dockerfile은 이미지를 조합하기 위해 사용자가 커맨드 라인에서 호출할 수 있는 모든 명령어를 포함하는 텍스트 문서이다. docker build를 사용하면 연속적인 커맨드 라인 지시어를 수행하는 자동화된 빌드를 생성할 수 있다.
- FROM: 기반 이미지를 지정한다.
- RUN: 현재 이미지 위에 새 레이어에서 명령을 실행하고 결과를 커밋한다.
-
COPY:
src에서 새 파일, 디렉토리 또는 원격 파일 URL을 복사하고 컨테이너의dest경로에 추가한다. -
CMD: 실행 중인 컨테이너에 대한 기본값을 제공한다. 마지막
CMD만 효과가 있다. - EXPOSE: Docker에게 컨테이너가 런타임에 지정된 네트워크 포트를 사용한다고 알린다.
-
ENV: 환경 변수
<key>를 값<value>로 설정한다. - ENTRYPOINT: 실행 가능한 컨테이너를 구성할 수 있도록 한다.
# 공식 Python 런타임을 부모 이미지로 사용(Docker Hub 다운로드)
FROM python:3.7-slim
# 컨테이너 내의 작업 디렉토리 설정
WORKDIR /usr/src/app
# 현재 디렉토리의 내용을 컨테이너의 /usr/src/app에 복사
COPY . .
# requirements.txt에 명시된 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt
# 컨테이너 외부에서 포트 80 사용 가능하도록 설정
EXPOSE 80
# 환경 변수 정의
ENV NAME World
# 컨테이너가 시작될 때 app.py 실행
CMD ["python", "./app.py"]- 해당 Dockerfile은 Python 환경을 만들고, 작업 디렉토리를 설정하고, 현재 디렉토리의 내용을 복사하고, 의존성을 설치하고, 포트를 공개하고, 환경 변수를 설정하고, 컨테이너 시작 시 명령어를 지정한다.
Docker Compose는 여러 컨테이너를 정의하고 실행하기 위한 도구입니다. docker-compose.yml 파일을 사용하여 애플리케이션의 서비스, 네트워크 및 볼륨을 구성할 수 있다.
version: "3"
services:
web:
image: "webapp:latest"
ports:
- "5000:5000"
db:
image: "postgres:latest"
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password- 해당
docker-compose.yml파일은 웹 애플리케이션 서비스와 PostgreSQL 데이터베이스 서비스를 정의한다. 웹 서비스는 5000 포트에서 실행되며, db 서비스는 환경 변수를 통해 구성된다.