docker
Docker-Compose란?
devsh247
2022. 1. 8. 17:11

- 일반적으로 하나의 애플리케이션은 여러개의 서비스로 구성되어 있습니다. 이를 도커로 관리하기 위해서 서비스마다 run 명령어를 사용할수도 있지만 docker-comose.yaml 파일을 사용한다면 여러 컨테이너를 하나의 파일에서 쉽게 관리할 수 있습니다
예시 및 간단한 설명
version: '3' # 버전에 따라 지원하는 도커 엔진 버전이 달라지는데 일반적으로 3을 사용한다
services: # 실행할 컨테이너들 정의
nginx: # 컨테이너(서비스) 이름
image: nginx:latest # 이미지 정보 [저장소이름]/[이미지이름]:[태그]
ports: # host-container 간 포트를 연결 [host포트]:[container포트]
- "60080:80"
volumes: # .는 현재 디렉토리를 의미하며 현재 디렉토리와 컨테이너의 디렉토리를 연결해 데이터를 host쪽에 저장
- .:/usr/share/nginx/html/
restart: always # 컨테이너가 예기치 않게 종료 되었을 때 어떻게 할 지 결정 (no(default)/always/on-failure)
environment: # 컨테이너에서 사용할 환경변수들
- KEY = VALUE
django:
build: # 별도의 Dokerfile에서 이미지 빌드 후 사용
context: . # docker build 명령을 실행할 디렉터리 경로
dockerfile: ./compose/django/Dockerfile-dev # 이미지를 빌드할 dockerfile 지정
volumes:
- db_data:/app
links: # 다른 컨테이너와 연결하기 위한 설정 [연결할 컨테이너 이름]:[해당 컨테이너에서 참조할 이름]
- mysql:db # version 3부터 links를 사용하지 않더라도 한 네트워크 안에 있는 서비스끼리 서로 통신 가능
depends_on: # 컨테이너의 의존 관계를 명시
- mysql # mysql 컨테이너 실행 후 django 컨테이너 실행
network_mode: host # bridge:해당 네트워크 안에서만 통신
# host:호스트와 똑같은 네트워크 환경
# none: 네트워크 사용 x
# 도커가 관리하는 볼륨 생성, 컨테이너에서 해당 볼륨에 데이터 저장 가능
volumes:
db_data: {}
주요 명령어
docker-compose pull
- 필요한 이미지를 다운
docker-compose build
- 필요한 이미지를 빌드
docker-compse up [service 이름] [옵션]
- 서비스 실행
- -d : 서비스 실행 후 콘솔로 나옴
- —force-recreate : 컨테이너 지우고 다시 생성
- —build : 서비스 시작 전 이미지 새로 만듦
docker-compose ps
- 현재 실행 중인 서비스 목록
docker-compose logs -f
- 서비스 로그 보기
docker-compose top
- 서비스 내에서 실행 중인 프로세스 목록
docker-compose stop
- 서비스 멈춤
docker-compose start
- stop된 서비스의 컨테이너 실행
docker-compose run [service 이름]
- 해당 서비스에 컨테이너를 하나 더 실행
- -e, -p, —rm 과 같은 옵션 사용 가능
docker-compose exec [service 이름] [명령어]
- 서비스의 컨테이너에서 명령어 실행
docker-compose down [service 이름]
- 서비스 멈추고 컨테이너 삭제