Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 55일차

DEV_BLOG 2022. 6. 11. 22:11

수강 인증샷

 

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 파일을 통해 선언적으로 관리 가능

 

 

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.