docker compose 앱 빌드/실행
docker compose로 앱 빌드/실행, 또는 docker build/run으로 분리
docker image 굽는법
Dockerfile
# 1. 베이스 이미지 (가벼운 버전의 파이썬 3.11)
FROM python:3.11-slim
# 2. 작업 디렉토리 설정
WORKDIR /app
# 3. 라이브러리 목록 복사 및 설치
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"]
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를 여기서 넣어줌
.dockerignore
# 가상환경 폴더 (도커 안에서 새로 설치하니까 필요 없음)
.venv
venv
env
# 파이썬 캐시 파일 (지저분함)
__pycache__
*.pyc
# 깃 버전 관리 폴더
.git
.gitignore
# 환경설정 파일 (비밀번호 들어있을 수 있으니 주의)
.env
docker compose up -d --build
로 실행. image빌드하고 실행도 해줌.
(.venv) son@son-wtr:~/prj/horangGotgam_server$ docker images
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가 없다면,
1단계: 이미지 빌드하기
Dockerfile 읽어서 이미지 구움. 이름은 horang-image로 퉁침.
docker build -t [이미지이름] .
- 점(.)은 현재 폴더의 Dockerfile 쓰겠다는 뜻.
2단계: 컨테이너 실행하기
방금 만든 이미지 실행. 옵션 좀 김.
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: 현재 폴더를 컨테이너/app에 연결 (volumes와 동일)--env-file .env: 환경변수 파일 주입 (env_file과 동일)horang-image: 1단계에서 만든 이미지 이름
여기서 배울 것
- Dockerfile 기본 구조 잡기
- docker-compose.yml로 앱 빌드/실행 한방에 끝
- docker compose 없으면 build/run 나눠서 진행
- .dockerignore로 불필요한 파일 빌드에서 제외
원본 파일 보기 (.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단계에서 만든 이미지 이름