*.pyc
project.lock.json
bin/
obj/
.vs/
node_modules/
.git
.cache
logs/
*.md
**/*.class
Dockerfile
에서 COPY 명령 docker-compose.yml
혹은 docker-compose.yaml
로 설정한다.docker-compose build
docker-compose up
docker-compose pull
docker-compose ps
docker-compose down
docker-compose start
docker-compose stop
docker-compose rm
$docker-compose --version
으로 버전 확인을 할 수 있다.Docker Image
지정과 Docker Container
실행으로 구성됨Dockerfile
을 가지고 있어야 함docker hub
등에서 이미지 다운로드services:
frontend:
build: ./frontend
ports: #해당 포트로 forwarding
- 3000:3000
backend:
build: ./backend
ports:
- 3001:3001
environment:
DB_URL: mongodb://database/vidly
database:
image: mongo:4.0-xenial #offical image
ports:
- 27017:27017
volumes: #volume을 지정
- vidly: /data/db #vidly라는 이름으로 지칭, db로 마운팅
volumes:
vidly:
#만약 networks가 필요하다면 volumes와 같은 레벨로 작성
docker-compose.yml
에 포함된 Container끼리는 서로 접근 가능하다.docker-compose.yml
내에서 이름만으로 호출 가능하다.networks
에 네트워크를 나열하고 네트워크 서비스를 지정해 준다.docker-compose -f docker-compose.mac.yml build
를 하면 세 개의 이미지가 build 된다.docker-compose -f docker-compose.mac.yml pull
을 해 주면 다음과 같이 공식 이미지도 build 된 것을 볼 수 있다.docker-composer up
을 해 주면 build
, create
, start
명령어를 한 번에 실행해 주는 명령어이다.postgreSQL
이 제대로 돌지 않아 투표는 되지만 투표 결과가 반영이 안 됐는데 docker-compose 실습에서는 투표 결과가 제대로 반영되는 것을 볼 수 있다.docker-compose -f docker-compose.mac.yml down
를 통해 모든 컨테이너를 중지 및 삭제해 준다. 다만 down
을 사용하는 경우 stop
명령과 remove
명령이 순차적으로 실행되지만 Container만 삭제되고 Image는 삭제되지 않는다. 📌 postgres Container 확인
docker exec -it --user=postgres example-voting-app-db-1 sh
를 통해 postgres Container에 접근한다.$whoami
를 입력하면 접근 계정이 나오게 된다.$psql
을 입력하면 postgres shell이 실행된다.\c
를 통해 database와 user 정보를 모두 볼 수 있고\dt
를 통해 스키마와 테이블을 볼 수 있다.
depends on
depends_on
을 통해 기술한다.condition
뒤에 붙는 것은 조건이며 선수행의 서비스가 조건에 충족할 때 해당 서비스가 실행된다. (필수 아니고 옵션) vote:
build: ./vote
command: python app.py
depends_on:
redis:
condition: service_healthy
healthcheck
는 해당 서비스의 건강을 나타내주는 확인 기술이다.healthcheck
가 실행되며 15 초 주기로 실행되며 실패 이후 최대 3 번까지 retry한다. healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
environment
는 해당 서비스가 컨테이너 안에서 실행될 때 환경 변수들을 지정해 준다. db:
image: postgres:15-alpine
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
volumes:
- "db-data:/var/lib/postgresql/data"
- "./healthchecks:/healthchecks"
# map
environment:
RACK_ENV: development
SHOW: "true"
USER_INPUT:
#array
environment:
- RACK_ENV=development
- SHOW=true
- USER_INPUT
worker:
build:
context: ./worker
airflow-common
이라는 별칭을 가지며 여러 서비스에서 공유하는 공통 구성을 정의한다. _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
값을 통해 airflow 실행 시 꼭 필요한 패키지들을 설치해 줄 수 있도록 설정한다. x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.5.1}
environment:
&airflow-common-env
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
…
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
user: "${AIRFLOW_UID:-50000}:0"
depends_on:
&airflow-common-depends-on
redis:
condition: service_healthy
postgres:
condition: service_healthy
<<: *airflow-common
는 앞서 airflow-common
에서 설정해 준 내용을 반복하겠다는 뜻이다.command
를 통해 해당 airflow 이미지를 build하고 실행할 때 이 내용을 scheduler
로 오버라이드 하겠다.depends_on
을 통해 airflow-init
의 condition은 service_completed_successfully
리소스가 충분한지를 확인하고, 이게 충분하다면 airflow
와 관계된 docker container
를 실행한다. airflow-scheduler:
<<: *airflow-common
command: scheduler
healthcheck:
test: ["CMD-SHELL", 'airflow jobs check --job-type SchedulerJob --hostname "$${HOSTNAME}"']
interval: 10s
timeout: 10s
retries: 5
restart: always
depends_on:
<<: *airflow-common-depends-on
airflow-init:
condition: service_completed_successfully
x-airflow-common
에서 _PIP_ADDITIONAL_REQUIREMENTS
의 값을 변경해 주면 된다. _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinance pandas numpy(설치해야 할 모듈)}
1. .gitignore
.gitignore
파일은 git의 root 디렉토리에 저장되어 Git Repository에 추가되지 말아야 할 폴더나 파일을 정의해 주는 파일이다..gitignore
에 정의된 파일은 git track 하지 않도록 설정하는 역할을 한다.- 📚 .gitignore 예시