티스토리 뷰
2025.06.29 - [Docker & AWS] - [Docker 1] Docker의 장점과 Image
[Docker 1] Docker의 장점과 Image
https://hub.docker.com/_/docker docker - Official Image | Docker HubDocker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and ar
up-one-coding.tistory.com
2025.07.02 - [Docker & AWS] - [Docker 2] Container
[Docker 2] Container
2025.06.29 - [Docker & AWS] - [Docker 1] Docker의 장점과 Image [Docker 1] Docker의 장점과 Imagehttps://hub.docker.com/_/docker docker - Official Image | Docker HubDocker Official Images are a curated set of Docker open source and drop-in solution r
up-one-coding.tistory.com
이번 글에서는 여러 컨테이너를 정의하고 관리할 수 있는 Docker Compose에 대해 알아보겠습니다. 복잡한 애플리케이션 (ex : 웹 서버 + 데이터베이스 + 백엔드 등)을 yaml 파일 하나로 관리하고, 컨테이너와 주변 환경을 생성하고 네트워크 볼륨까지 만들 수 있는 것이 Docker Compose입니다.
https://docs.docker.com/compose/
Docker Compose
Learn how to use Docker Compose to define and run multi-container applications with this detailed introduction to the tool.
docs.docker.com
Docker Compose의 가장 대표적인 장점들은 멀티 컨테이너 관리의 최소화와 환경 이식성이 있습니다.
- yaml 파일 하나와 명령어 한 줄 (docker-compose up)으로 모든 서비스를 실행
- 동일한 yaml 파일만 있으면 어디서든 동일한 환경 재현 가능 (로컬과, EC2, CI환경), 운영체제에 따라 설정 충돌 없이 실행 가능
1. Docker Compose 실행을 위한 Command
- docker compose up -d : yaml 파일에 정의된 서비스 생성 및 시작
- docker compose ps : 현재 실행 중인 서비스 상태 표시
- docker compose build : 현재 실행중인 서비스의 이미지만 빌드
- docker compose logs : 실행 중인 서비스의 로그 표시
- docker compose down : yaml 파일에 정의된 서비스 종료 및 제거
2. 최종 실행 흐름
- Docker Compose 실행 (docker-compose up)
- 사용자가 실행하는 진입점
- Image 확보
- Compose가 필요한 이미지를 확인
- 이미지가 로컬에 있으면 그대로 사용 or Dockerfile로 이미지 빌드 or Docker hub에서 pull
- 컨테이너 생성 및 실행
- 이미지를 기반으로 각 서비스를 위한 컨테이너를 생성하고 실행
3. Docker-Compose.yml
Flask 애플리케이션을 EC2에서 실행하기 위한 구성이며, 단일 서비스(flask_app)를 중심으로 이미지 빌드부터 볼류, 포트, 환경변수까지 정의한 예시
# Compose 파일 포맷 버전 지정
version : '3.8'
# 컨테이너 정의
services:
flask_app:
build: .
container_name: flask_app
ports:
- "80:5000"
volumes:
- /home/ec2-user/db:/app/db
command: python app.py
restart: always
environment:
- RESET_DB=False
- PYTHONDONTWRITEBYTECODE=1
- PYTHONUNBUFFERED=1
- DB_PATH=/app/db/contents.sqlite
- services
- flask_app이라는 단일 서비스를 정의
- 서비스 이름은 Compose 내부 DNS 이름으로도 사용되어 컨테이너 간 통신에 활용
- build & container_name
- 현재 디렉터리에 있는 Dockerfile을 기반으로 이미지를 빌드하고, 변경사항이 있을 때마다 이미지가 다시 빌드
- container name을 고정하기
- ports로 호스트와 컨테이너를 연결
- "호스트 포트 : 컨테이너 포트"
- 컨테이너 내부에서 컨테이너 포트로 실행되는 Flask 서버를 호스트 포트로 노출시키기
- 사용자가 브라우저에서 "http://EC2_IP"로 접속하면 Flask 앱에 도달
- volums을 통한 데이터 공유 및 영속화
- EC2의 디렉터리를 컨테이너 경로에 연결
- Flask앱이 /app/db에 접근하면, 그 내용은 실제 EC2 서버의 DB 디렉터리에 저장되어 컨테이너가 삭제되어도 데이터를 보존
- command로 원하는 작업 실행
- Flask 앱의 진입점인 app.py 실행
- restart를 always로 설정해 컨테이너가 종료되거나 예기치 않게 중단되었을 때 자동 재시작
- environment로 컨테이너 내부 환경 변수 설정
- db 초기화 등 실행 조건 제어
4. Image & Container & Compose
- Image : 실행할 앱의 설계도 -> 반죽 틀 (쿠키를 만들기 위한 설계도)
- Container : Image로부터 만들어진 실행 인스턴스 -> 반죽 틀로 찍어낸 쿠키
- Compose : 여러 이미지 기반의 컨테이너를 자동으로 만들고 실행하고 연결하는 매니저 -> 여러 개의 쿠키를 한 번에 만들고 굽는 자동화 기계
'Docker & AWS' 카테고리의 다른 글
| [Docker 2] Container (0) | 2025.07.02 |
|---|---|
| [Docker 1] Docker의 장점과 Image (1) | 2025.06.29 |
- #opencv #이미지 연산 #합성
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- #웹 프로그래밍 #서버 #클라이언트 #http #was
- nlp #토큰화 #nltk #konply
- #프로그래머스 #안전지대 #시뮬레이션
- # 할인행사 #counter #딕셔너리 #프로그래머스
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- # 프로그래머스 # 카펫 # 완전탐색
- #django #mvt 패턴
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- #docker #container #docker command
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- python #프로그래머스 #겹치는선분의길이
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- #with recursive #입양시각 구하기(2) #mysql
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- 머신러닝 #xgboost #
- # 프로그래머스 #연속된 부분수열의 합 #이중 포인터 #누적합
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- 잘라서 배열로 저장하기 #2차원으로 만들기
- #docker #docker compose
- 머신러닝 #lightgbm #goss #ebf
- #attention #deeplearning
- #seq2seq #encoder #decoder #teacher forcing
- 머신러닝 #project #classification #dacon
- #docker #image #build #dockerfile
- #tf idf
- #polars #대용량 데이터셋 처리