About/Docker
[Docker] Docker Compose를 이용한 웹 애플리케이션 생성
김징어
2021. 9. 5. 13:58
Compose 구성 파일
1. 애플리케이션 구조
샘플 애플리케이션의 구조는 다음과 같습니다.
.
├── app.py
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── static
│ ├── css
│ │ └── bootstrap.css
│ └── images
│ ├── docker-machine-01.jpg
│ ├── docker-machine-02.jpg
│ ├── docker-machine-03.jpg
│ ├── docker-machine-04.jpg
│ └── docker-machine-05.jpg
└── templates
└── index.html
2. Compose 정의 파일 확인
docker-compose.yml 파일은 다음과 같이 정의되어 있습니다.
version: '3.3'
services:
# WebServer config
webserver:
build: .
ports:
- "80:80"
depends_on:
- redis
# Redis config
redis:
image: redis:4.0
- version : 버전 지정
- webserver는 현재 디렉토리의 Dockerfile 에 정의한 구성의 이미지를 빌드하고, 외부에 대하여 80번 포트를 공개 하여 컨테이너를 실행합니다.
- redis 이미지는 Docker Hub에 공개되어 있는 Redis의 공식 이미지인 'redis'의 4.0 버전을 베이스 이미지로 컨테이너를 실행합니다.
현재 폴더의 Dockerfile은 다음과 같이 정의되어 있습니다.
# Base Image
FROM python:3.6
# Upgrade pip
RUN pip install --upgrade pip
# Install Path
ENV APP_PATH /opt/imageview
# Install Python modules needed by the Python app
COPY requirements.txt $APP_PATH/
RUN pip install --no-cache-dir -r $APP_PATH/requirements.txt
# Copy files required for the app to run
COPY app.py $APP_PATH/
COPY templates/ $APP_PATH/templates/
COPY static/ $APP_PATH/static/
# Port number the container should expose
EXPOSE 80
# Run the application
CMD ["python", "/opt/imageview/app.py"]
여러 Docker 컨테이너 실행
docker-compose up 명령어를 통하여 정의한 2개의 컨테이너를 실행합니다.
$ docker-compose up
- Docker Hub로 부터 Redis 서비스에서 사용할 redis:4.0의 이미지가 다운로드 되며 그 다음 webserver에서 사용할 이미지가 Dockerfile을 바탕으로 빌드됩니다.
- 다운로드가 끝나면 redis 서비스의 컨테이너를 시작하고, 계속해서 webserver 서비스의 컨테이너가 시작됩니다.
로컬의 80번 포트로 접속하면 애플리케이션이 정상적으로 시작됩니다.
터미널을 하나 더 생성하여 작동중인 컨테이너의 상태를 확인할 수 있습니다.
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
chap07_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
chap07_webserver_1 python /opt/imageview/app.py Up 0.0.0.0:80->80/tcp
여러 컨테이너의 정지
Docker Compose 에서 관리하고 있는 컨테이너를 정지할 때는 다음 명령어를 사용합니다.
$ docker-compose stop
Stopping chap07_webserver_1 ... done
Stopping chap07_redis_1 ... done
Localhost:80에 접속하면 서비스가 정지된 것을 확인할 수 있습니다.
Docker Compose에서 이용한 리소스를 삭제하려면 다음 명령어를 실행합니다.
$ docker-compose down
Removing chap07_webserver_1 ... done
Removing chap07_redis_1 ... done
Removing network chap07_default
여러 의존관계에 있는 컨테이너들을 모아서 관리할 수 있는 것이 Docker Compose 입니다.
Docker Compose를 실행해보며 알아보았습니다.