← 전체로 돌아가기
스킬 docker

Docker Compose 앱 빌드 및 실행

Docker Compose로 앱 빌드 및 실행하는 방법과 `docker build`/`run` 변환

dockerdocker-composecontainerdevopsdeployment

Docker Compose로 앱 빌드 및 실행하는 방법이야. Dockerfile, docker-compose.yml 준비 후 다음 명령어를 쓰면 돼.

1. 파일 구성

  • Dockerfile: 이미지 빌드 지시, CMD0.0.0.0 바인딩 실행.
  • docker-compose.yml: 서비스 정의, build, ports, volumes, env_file 설정.
  • .dockerignore: 빌드 시 불필요 파일 제외.

2. Docker Compose 실행

docker compose up -d --build
  • 빌드부터 실행까지 한 번에 처리됨.

3. docker build / docker run 분리

# 이미지 빌드
docker build -t my-app-image .

# 컨테이너 실행
docker run -d -p 127.0.0.1:5008:5008 -v $(pwd):/app my-app-image

docker-compose.yml 옵션과 매핑됨.

여기서 배울 것

  1. `docker compose up -d --build`로 앱 빌드 및 실행하는 방법
  2. `Dockerfile`, `docker-compose.yml`, `.dockerignore`의 핵심 역할
  3. `docker build`와 `docker run`으로 개별 빌드/실행하는 방법
  4. 컨테이너 포트 바인딩 (`0.0.0.0`) 및 볼륨 연결
원본 파일 보기 (.claude/skills/tn-docker-compose-build-run/SKILL.md)
---
name: Docker Compose 앱 빌드 및 실행
description: Use when the user asks to build and run a Docker application using `docker compose`, or needs to convert `docker-compose.yml` settings into `docker build` and `docker run` commands.
version: 1.0.0
source: /home/son/prj/resume/backup_notes_260317/notion/Tech Note/docker compose 2ded7efd824b80d98cbbf4af32d477dd.md
---

# docker compose

docker image 굽는법

```bash
Dockerfile

# 1. 베이스 이미지 (가벼운 버전의 파이썬 3.11)
FROM python:3.11-slim

# 2. 작업 디렉토리 설정
WORKDIR /app

# 3. 라이브러리 목록 복사 및 설치
# (캐시 효율을 위해 requirements.txt만 먼저 복사합니다)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 4. 소스 코드 전체 복사
COPY . .

# 5. 실행 명령어 (Gunicorn)
# 주의: 도커 내부에서는 127.0.0.1이 아니라 0.0.0.0을 써야 외부(Host)와 연결됩니다.
CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5008", "horangApp_admin:app"]
```

```bash
docker-compose.yml

version: '3.8'

services:
  horang-app:
    build: .
    container_name: horang_container
    ports:
      - "127.0.0.1:5008:5008"  # Host의 5008번과 Container의 5008번을 연결
    restart: always  # 죽거나 재부팅되면 자동 부활
    volumes:
      # (선택사항) 코드를 수정하면 재빌드 없이 바로 반영되게 연결
      - ./:/app
    env_file:
      - .env #env를 여기서 넣어줌
```

```bash
.dockerignore

# 가상환경 폴더 (도커 안에서 새로 설치하니까 필요 없음)
.venv
venv
env

# 파이썬 캐시 파일 (지저분함)
__pycache__
*.pyc

# 깃 버전 관리 폴더
.git
.gitignore

# 환경설정 파일 (비밀번호 들어있을 수 있으니 주의)
.env

```

docker compose up -d --build

로 실행

( 그 결과, image빌드하고, 실행도 해줌 )

```bash
(.venv) son@son-wtr:~/prj/horangGotgam_server$ docker images
                                                                                                       i Info →   U  In Use
IMAGE                                   ID             DISK USAGE   CONTENT SIZE   EXTRA
horanggotgam_server-horang-app:latest   3bbd946ee683        131MB          114MB    U   

(.venv) son@son-wtr:~/prj/horangGotgam_server$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                      NAMES
9be666ba738b   horanggotgam_server-horang-app   "gunicorn -w 2 -b 0.…"   25 minutes ago   Up 25 minutes   127.0.0.1:5008->5008/tcp   horang_container

```

만약 compose가 없다면,

`docker compose`는 "빌드"와 "실행"을 한 번에 해주지만, `docker run`은 오직 **"실행"**만 하는 명령어입니다. 그래서 **2단계(빌드 → 실행)**로 나눠서 진행해야 합니다.

사용자님의 `docker-compose.yml` 설정을 그대로 `docker run` 명령어로 변환하면 아래와 같습니다.

---

### 1단계: 이미지 빌드하기 (Build)

먼저 `Dockerfile`을 읽어서 이미지를 구워야 합니다. 이미지 이름은 임의로 `horang-image`라고 지었습니다.

Bash

`# 점(.)은 현재 폴더의 Dockerfile을 쓰겠다는 뜻입니다.
docker build -t horang-image .`

### 2단계: 컨테이너 실행하기 (Run)

이제 방금 만든 이미지를 실행합니다. 옵션이 좀 깁니다.

Bash

`docker run -d \
  --name horang_container \
  --restart always \
  -p 127.0.0.1:5008:5008 \
  -v $(pwd):/app \
  --env-file .env \
  horang-image`

### 옵션 설명 (Compose와 비교)

- **`d`**: 백그라운드 실행 (`up -d`와 동일)
- **`-name horang_container`**: 컨테이너 이름 지정 (`container_name`과 동일)
- **`-restart always`**: 죽으면 자동 부활 (`restart: always`와 동일)
- **`p 127.0.0.1:5008:5008`**: 호스트 전용 포트 연결 (`ports`와 동일)
- **`v $(pwd):/app`**: 현재 폴더(`$(pwd)`)를 컨테이너의 `/app`에 연결 (`volumes`와 동일)
- **`-env-file .env`**: 환경변수 파일 주입 (`env_file`과 동일)
- **`horang-image`**: 1단계에서 만든 이미지 이름