[docker]4. compose/Kubernetes

호빵·2024년 8월 16일

docker

목록 보기
4/4
post-thumbnail

1. Docker Compose란?

  • 시스템 구축에 필요한 설정을 YAML포맷으로 정의한 파일을 이용하여 시스템을 일괄 실행,종료 및 삭제할수있는 도구
  • 도커엔진과 별개로 소프트웨어다.
  • docker-compose.yml로 파일의 이름이 정해져있고, 한폴더에 하나의 정의파일만 있을수있다.

2. docker-compose.yml 작성법

  • 주항목 → 이름추가 → 설정 순서대로 작성하면된다
  • 주항목은 복수형으로 쓴다
✏️<주 항목>
version : //버전 기재
services : //컨테이너 관련정보
networks : //네트워크 관련정보
volumes : //볼륨 관련 정보
- 주항목을 기준으로 아래에 설정내용을 작성하면된다

3. docker-compose.yml 작성

  • yml 형식에 맞춰서 작성해주면된다. 이전에 작성한 docker02(네트워크)가 기반이 된다고 보면된다
version: "1" # 사용 가능한 버전에 따라 변경 가능
services:
  mysql-container: # 첫번째 컨테이너 : mysql
    image: mysql:8.3.0 # mysql 이미지 
    networks:
      - net1 # mysql과 wordpress를 연결할 네트워크
    volumes:
      - mysql-vol:/var/lib/mysql
    restart: always # 재시작 설정
    command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] # mysql 8.0대 버전부터 인증방식이 바뀌어 추가
    environment: 
      - MYSQL_ROOT_PASSWORD=sunhorootpass
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=sunho
      - MYSQL_PASSWORD=sunhopass
  wordpress-container: # 두번째 컨테이너 : wordpress
    depends_on:
      - mysql-container # 의존할 관계
    image: wordpress
    networks:
      - net1
    volumes:
      - wordpress-vol:/var/www/html
    ports:
      - "8085:80" # 연결할 포트
    restart: always
    environment:
      - WORDPRESS_DB_HOST=mysql-container:3306
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_USER=sunho
      - WORDPRESS_PASSWORD=sunhopass
networks:
  net1:
volumes:
  mysql-vol:
  wordpress-vol:

⇒ 스크립트 작성하고 실행하면 잘되는데 해당 서버로 들어가면 500에러가난다….씌익

4. docker-compose 실행

docker-compose -f yml경로 up -d

5. docker-compose 종료

docker-compose -f yml경로 down


1. 쿠버네티스(Kubernetes)란?

  • 컨테이너 오케스트레이션 도구의 일종이다.
    • 컨테이너 오케스트레이션 : 시스템 전체를 통괄,여러개의 컨테이너를 관리
  • 번거러운 컨테이너 생성이나 관리의 수고를 덜어주는 도구

1-1. 쿠버네티스 클러스터 구성

클러스터 = 마스터 노드 + 워커노드 : 사람이 개입하지않고 자율적으로 동작한다.

  • 마스터 노드
    • 전체적인 제어 담당을 한다.
    • 컨테이너를 실행하지 않는다.
    • 컨테이너 등의 상태를 관리하기 위해서 etcd 라는 데이터베이스가 설치된다.
  • 워커 노드
    • 실제 서버에 해당하며, 실제 동작하는 서버
    • Container Engine 이 설치된다.

1-2. 쿠버네티스 용어

  • pod(파드) : 컨테이너 + 볼륨 / 컨테이너 관리의 단위
  • service(서비스) : 파드에 요청을 배분 / 로드밸런서 역할을 한다
  • ReplicaSet(레플리카세트) : 파드의 수를 관리하는 방식

2. 쿠버네티스 매니페스트 파일(정의 파일) 작성

  • docker desktop 에서 쿠버네티스를 지원해주기때문에 실행시킨다.
✏️ 매니페스트 파일
⇒ 파드(pod) 나 서비스(service)에 대한 설정 (YAML 형식으로 기재)
  • 파드 작성 항목

2-1. 매니페스트 파일 작성

  • 파드, 디플로이먼트 매니페스트 작성
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apa000dep
spec:
  selector:
    matchLabels:
      app: apa000kube
  replicas: 3
  template:
    metadata:
      labels:
        app: apa000kube
    spec:
      containers:
      - name: apa000ex91
        image: httpd
        ports:
        - containerPort: 80

  • 서비스 매니페스트 작성
apiVersion: v1
kind: Service
metadata:
  name: apa000ser
spec:
  type: NodePort
  ports:
  - port: 8099
    targetPort: 80
    protocol: TCP
    nodePort: 30080
  selector:
    app: apa000kube

<결과>

2-2. 쿠버네티스 명령어 추가 학습

  • 파드(pod)의 수 확인

kubectl get pods

  • 수동으로 파드 삭제시 자동으로 복구되는지 확인

kubectl delete pod ~

: 파드하나 삭제후 다시 조회하면 새로운 ID의 파드가 보충됨을 확인할수있다.

❓ 컨테이너만 삭제시 파드는 어떻게 될까? ⇒ 쿠버네티스는 기본단위는 파드이기때문에 파드에 포함된 컨테이너가 망가지거나 삭제되면 해당 컨테이너뿐만 아니라 파드 전체가 새로 만들어진다.
  • 디플로이먼트 , 서비스 삭제

delete -f 디플로이먼트,서비스 경로

  • 디플로이먼트

  • 서비스
    업로드중..

0개의 댓글