쿠버네티스와 Compose의 차이점과 Compose사용

이동명·2023년 10월 13일
0
post-thumbnail

두가지 모두 container 을 관리하는 기능이다 둘의 차이점은 무엇이있을까?

결론부터 말하면 Compose는 단순히 여러 개의 컨테이너를 한번에 관리하는 것이고, 쿠버네티스는 클러스터 환경에서 컨테이너를 관리하기 위한 도구이다.

Compose

하나의 업무를 구성하는 여러 개의 컨테이너를 한번에 관리하는 기술이다

  • 도커에서 자체적으로 제공한다.

  • yaml파일을 통해 업무를 구성할 수 있다(서비스, 네트워크, volume을 설정하여 구성)

  • docker-compose.yaml 작성과 활용, yaml 파일은 크게 버전, 서비스(컨테이너 이미지 목록), 볼륨, 네트워크 4가지 항목으로 구성된다.

  • 도커 컴포즈는 yaml 파일은 탭(tab)을 인식하지 못하므로 2개의 공백을 사용하여 하위 항목을 작성한다.

compose파일 작성

version: '2.10'
services: 
  tomcat1: 
    image: tomcat1  //사용할 컨테이너 이미지 이름
    container_name: tomcat3 ////컨테이너 이름을 정해야 name오류가 안뜸
    ports:
      - 8080:8080  //컨테이너 포워딩 설정

  mysql2:
    image: mysql2
    container_name: mysql2
    ports:
      - 3307:3306
    environment:  //환경변수 설정
      MYSQL_PASSWORD: root

윈도우 cmd의 현재디렉터리를 yml파일위치와 동일하게 하는 것을 권장
기본적으로 현재 디렉토리(윈도우cmd 의 현재위치) 또는 상위 디렉토리에서 docker-compose.yml 파일을 찾아 컨테이너를 생성하는데, -f 옵션을 이용해서 위치와 이름을 지정할 수도 있다.

compose 실행

docker-compose -f [파일경로] up -d

예시(cmd의 현재위치와 yml파일 위치가 같으면 -f옵션 생략가능)
docker-compose -f "C:\Users\docker-compose.yml" up

compose 명령어 모음

  • 도커 컴포즈 컨테이너들 실행 $ docker-compose up -d

  • 도커 컴포즈 컨테이너들 중지 $ docker-compose down

  • 도커 컴포즈 컨테이너들 다시 시작하기 $ docker-compose restart

  • 도커 컴포즈 컨테이너들 로그를 계속해서 읽기$ docker-compose logs -f

  • 도커 컴포즈 컨테이너들 상태 확인 $ docker-compose ps
    예시) docker-compose -f "C:\Users\docker-compose.yml" ps

  • 도커 컴포즈 설정 확인 $ docker-compose config

Compose로 생성된 컨테이너에 접근과 사용은 이전과 동일하게 사용

내 프로젝트에서 사용한 Docker-compose.yml

services:
  # 이런 container 를 만들건데..
  my-mysql:
    image: mysql:latest
    container_name: my-mysql
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: test
    ports:
      - 3307:3306
    volumes:
      - /tmp/mysql:/var/lib/mysql
    networks:
      test1:
    restart: always
  back:
    #image: dongmyounglee/spring-test
    build: .
    container_name: back
    environment:
      DB_USER: root
    ports:
      - 8081:8001
    networks:
      test1:
    # my-mysql 이 start 될 때 까지 기다리겠다..
    depends_on:
      - my-mysql
    # 꺼지면 항상 restart 하겠다.
    restart: always

networks:
  test1:

volumes:
  back:
  my-mysql:
compose 보다 각각의 container로 관리하는게 더 추천되긴함.

왜냐..

docker-compose 파일을 어디다둘까 ? git 에 올릴수도없고 ..

배포서버와 서비스서버가 있다고 치면

서비스 서버에 compose파일을 넣어놔야겠지? 그럼 서비스 서버 에서 작성을 해야한다.

배포서버에선 이미지 빌드하고 repo에 푸시하면 됨

서비스 서버는 compose만 실행하면 되고

로컬 개발할땐 Dokcerfile 만 있음되고..

서비스 서버에서 빌드된 이미지만 가져와서 container 실행하면 되는데 굳이 compose로 같이 엮을 이유가 있나.. ?

그리고 만약 수정이 되면 엮은거 다 다시 실행해야 하네 ?

서버건드렸는데 db가 reload 되야 하는 것 도 에러

컨테이너 이름도 다 같아야 하고, 종속도 많이 됨.

단점은 이정도 ..? 

쿠버네티스

쿠버네티스는 크게 마스터(Master)와 노드(Node) 두 개의 컴포넌트로 분리된다. 마스터는 쿠버네티스의 설정 환경을 저장하고 전체 클러스터를 관리하는 역할을 맏고있고, 노드는 pod나 컨테이너 처럼 쿠버네티스 위에서 동작하는 워크로드를 호스팅하는 역할을 한다.

API서버를 이용하여 REST API를 통해 쿠버네티스의 기능을 제공하고 명령을 처리한다.

쿠버네티스 아키텍처

node

는 하나의 가상머신 또는 물리머신 이다.

Pod

node내에 존재하고 container여러 개로 구성되어있다.

profile
Web Developer

0개의 댓글