패스트캠퍼스 캐시백 챌린지 55일차
Docker-compose를 활용해 명시적으로 컨테이너를 관리하는 내용의 클립을 수강하는 식으로 챌린지를 진행하였다.
docker-compose.yml의 세부 설정과 옵션들에 대해서 자세하게 설명해주셔서 많이 도움이 되었다. scale 옵션을 주는경우에 주의사항으로 충돌이 어느경우에 생길 수 있는지에 대해서도 알 수 있어서 좋았다. 다음 포스팅으로는 grafana와 mysql을 구성하는 내용을 포스팅할 예정이다.
도커 컴포즈 소개
- 단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리
- docker compose.yml YAML 파일을 통해 명시적 관리
- 프로젝트 단위로 도커 네트워크와 볼륨 관리
- 프로젝트 내 서비스 간 의존성 정의 가능
- 프로젝트 내 서비스 디스커버리 자동화
- 손 쉬운 컨테이너 수평 확장
프로젝트(Project)
- 도커 컴포즈에서 다루는 워크스페이스 단위
- 함께 관리하는 서비스 컨테이너의 묶음
- 프로젝트 단위로 기본 도커 네트워크가 생성됨
서비스(Service)
- 도커 컴포즈에서 컨테이너를 관리하기 위한 단위
- scale을 통해 서비스 컨테이너의 수 확장 가능
컨테이너(Container)
- 서비스를 통해 컨테이너 관리
docker-compose.yml
- version,services,networks,volumes 총 4개의 최상위 옵션
- 버전(version)
⇒ 가능한 최신 버전 사용 권장
⇒ 도커 엔진 및 도커 컴포즈 버전에 따른 호환성 매트릭스 참조할 것 (https://docs.docker.com/compose/compose-file/compose-file-v3/)
⇒ 버전 3부터 Docker Swarm과 호환 : Swarm 서비스를 docker-compose.yml로 정의가능
- 도커 스왐(Docker Swarm)
⇒ 여러 서버를 기반으로 스왐 클러스터를 형성하여 컨테이너를 관리하는 컨테이너 오케스트레이션 시스템
⇒ 쿠버네티스와 동일 목적으로 만들어졌지만 인기를 끌지 못함
docker-compose 명령어 : 프로젝트 목록
실습자료는 하단의 링크에 존재한다.
https://github.com/tedilabs/fastcampus-devops/tree/main/3-docker-kubernetes/4-docker-compose/build
# 실행중인 프로젝트 목록 확인
$ docker-compose ls
# 전체 프로젝트 목록 확인(version 2이상부터 사용가능하다.)
$ docker-compose ls -a
# 도커 컴포즈의 버전 확인
$ docker-compose version
# Foreground로 도커 컴포즈 프로젝트 실행
$ docker-compose up
docker-compose up 으로 프로젝트를 생성하면 브릿지 네트워크가 기본적으로 생성된다. 브릿지 네트워크는 default명으로 생성되는데, build_default로 생성되었음을 확인할 수 있다. 이때 build는 프로젝트명(명시해주지 않으면 디렉토리명 사용)을 의미하고, default는 서비스명이라고 할 수 있다.
다른예로 build-redis-1은 build는 프로젝트명, redis는 서비스명, 1은 컨테이너 index라고 할 수 있다.
# Background로 도커 컴포즈 프로젝트 실행
$ docker-compose up -d
# -p옵션:프로젝트명 변경 , -d옵션:백그라운드로 실행
$ docker-compose -p my-project up -d
# 프로젝트 내 컨테이너 및 네트워크 종료 및 제거
$ docker-compose down
# 프로젝트 내 컨테이너, 네트워크 및 볼륨 종료 및 제거
$ docker-compose down -v
docker-compose로 프로젝트 명을 변경해 실행하고, 백그라운드로 돌아가고 있는 모습을 확인할 수 있다.
cd ..
cd wordpress
cat docker-compose.yml
해당 docker-compose 파일을 보면 version,services,networks,volumes 4가지 최상위 옵션이 모두 있다. service로는 db와 wordpress service가 있다. volume은 db 서비스에 mount 되어있는 것을 확인할 수 있고, networsk로는 wordpress가 만들어져있어서 각각의 서비스에 연결되어있는 것을 확인할 수 있다.
networks에서 {}로 옵션을 주지 않았기에 bridge driver를 사용해서 네트워크를 생성하게 되고,
db도 옵션을 주지 않아 이경우 기본 도커 볼륨을 사용하게 된다.
volume 까지 제거하고싶으면 -v 옵션을 주면된다.
docker-compose 명령어 : 명령어 확장
# web 서비스를 3개로 확장
$ docker-compose up --scale web=3
scaling을 진행하여 컨테이너가 3개 생긴것을 확인할 수 있다. 이때 주의할점은 docker-compose.yml에서 host port를 지정할경우 같은 port에 대해서 여러개의 컨테이너를 생성할때 충돌이 발생할 수 있기에 port 지정을 하지 않는것이 좋다고 한다. 지금은 지정을 하지 않은 상태여서 사용가능한 port들이 연결된 모습이다. 그외에 container_name을 설정하는경우에도 충돌이 발생할 수 있다고 한다.
docker-compose 명령어
# 프로젝트 내 서비스 로그 확인
$ docker-compose logs
# 프로젝트 내 컨테이너 이벤트 확인
$ docker-compose events
# 프로젝트 내 이미지 목록
$ docker-compsoe images
# 프로젝트 내 컨테이너 목록
$ docker-compose ps
# 프로젝트 내 실행중인 프로세스 목록
$ docker-compose top
docker-compose 주요 사용 목적
- 로컬 개발 환경 구성
⇒ 특정 프로젝트의 로컬 개발 환경 구성 목적으로 사용
⇒ 프로젝트의 의존성(Redis,MYSQL,Kafka)를 쉽게 띄울 수 있음
- 자동화된 테스트 환경 구성
⇒ CI/CD 파이프라인 중 쉽게 격리된 테스트 환경을 구성하여 테스트 수행 가능
- 단일 호스트 내 컨테이너를 선언적 관리
⇒ 단일 서버에서 컨테이너를 관리할 때 YAML 파일을 통해 선언적으로 관리 가능
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.