2024.07.11

김무영·2024년 7월 11일

war를 사용한 web Service

  1. tomcat이미지를 다운 (hub.docker.com)
    • docker pull tomcat:9.0
  2. 실행
    • docker run -d -p 80:8080 --name 컨테이너명 이미지명:버전
    • docker run -d -p 80:8080 --name tomcat-service tomcat:9.0

  1. 컨테이너 접속 ( exec ) => vim설치 => webapps/ROOT 디렉토리 생성
    • docker exec -it mvc-service /bin/bash
  • 도커가 사용하는 네트워크 확인( 브릿지 네트워크 )
    • docker network ls
  1. mvc-service 진입 후 apt-get 업데이트 후 vim설치(선택, 필요한 패키지 설치)
  1. webapps디렉토리로 이동 후 ROOT 디렉토리 생성
  • index.html 작성
  1. index.html , war 복사

    • docker cp 복사할경로 컨테이너명:/위치
    • index.html
      - docker cp C:\dev\workspace_spring\jenkins_prj\src\main\webapp\index.html mvc-service:/usr/local/tomcat/webapps/ROOT

    • war 복사
      - docker cp C:\dev\spring_mvc.war mvc-service:/usr/local/tomcat/webapps
  2. stu14.sist.co.kr 검색 후 결과 확인

도커 이미지 생성 > Docker Hub에 올리기 (공개)

  1. 실행중인 컨테이너를 이미지로 commit

    • docker commit 컨테이너명 계정명/이미지명:버전
    • docker commit mvc-service yeongking/mvc-app:latest
  2. Docker Hub 로그인

    • docker login
  3. 이미지를 Docker Hub 푸시

    • docker push 계정명/이미지명:버전
    • docker push yeongking/mvc-app:latest

도커 허브 이미지 다운

  1. 도커 로그인

    • docker login
  2. 이미지 다운로드

    • docker pull 계정명/이미지명:latest
  3. 실행

    • docker run -d -p 80:8080 yeongking/mvc-app:latest

Docker script

  • 개별 Docker 이미지를 정의하고 빌드하기 위해서.
  • 이미지 생성을 자동화 할 수 있다.
  • 컨테이너 실행 시 필요한 모든 종속성, 설정 및 초기화를 할 수 있다.
  • Dockerfile을 생성하여 script을 정의
  • docker build명령을 사용하여 이미지를 생성.
  • 주 명령
    • FROM : 이미지를 저장
    • WORKDIR : 작업디렉토리
    • RUN : 이미지를 빌드할 때 실행할 명령어를 지정
    • COPY/ADD : 이미지에 파일이나 폴더를 추가할 때 사용
    • EXPOSE : 이미지가 통신에 사용할 PORT (web server : 80, tomcat : 8080)
    • CMD : 컨테이너를 실행할 때 실행할 명령어를 지정
    • ENTRYPOINT : 컨테이너를 실행할 때 실행할 명령어를 강제 지정

Dockerfile 실행명령

  • Dockerfile이 기본 파일명인 Dockerfile일 때:
    • docker build -t 이미지명 dockerfile경로
    • 이미지 생성
  • Dockerfile이 다른 이름의 파일에 저장되어 있을 때:
    • docker build -t 이미지명 -f 다른파일명 dockerfile경로
    • 다른파일명이 존재하는 경로로 이동하여 실행해야 함. 경로를 사용할 수 없음.


# 기본 이미지 설정
FROM tomcat:9.0

# 작업 디렉토리 설정
WORKDIR /usr/local/tomcat/webapps

# 필요한 파일을 복사
COPY spring_mvc.war ./spring_mvc.war

# ROOT 디렉토리를 생성한 후 index.html 파일 생성
RUN mkdir -p /usr/local/tomcat/webapps/ROOT && \
    echo '<!DOCTYPE html><html><head><script>location.href="http://stu14.sist.co.kr/spring_mvc/index.html";</script></head><body></body></html>' > /usr/local/tomcat/webapps/ROOT/index.html

# 포트 설정
EXPOSE 8080

# Tomcat 실행
CMD ["catalina.sh", "run"]
  • docker build -t 이미지명 .
  • docker run -d -p 80:8080 --name 이름 이미지명

kubernetes(K8S)

  • 기능을 축소하여 배포하는 K3S도 제공
  • 컨테이너화된 애플리케이션의 배포, 관리, 확장 및 네트워킹을 자동화하는 오픈소스 플랫폼.
  • Google에서 개발, 현재 CNCF(Cloude Native Computing Foundation)에서 관리

특징

  • 자동화된 배포 및 롤 아웃
    • 롤 아웃 : 새로운 버전이나 업데이트를 점진적으로 배포하는 과정
    • 단계적 배포로 가용성, 안정성이 유지
  • 새로운 애플리케이션을 쉽게 배포하거나 롤백할 수 있다.
  • CI/CD에 용이
  • 스토리지 오케스트레이션
  • 셀프 힐링
    • 장애가 발생한 컨테이너를 자동으로 재시작하고, 문제가 있는 노드를 격리한다.
    • deployment에서 설정한 상태에 따라 컨테이너를 복구하여 원하는 상태로 유지한다.

Kubernetes의 주요 구성 요소

  • Master Node
    • API Server : 클러스터의 모든 구성요소와의 상호작용을 관리합니다.
    • Controller Manager : 클러스터 상태를 관리하고, 원하는 상태로 유지합니다.
    • Scheduler : 새로 생성된 컨테이너를 적절한 워커 노드에 할당합니다.
    • etcd : 클러스터의 상태 정보를 저장하는 분산 Key-Value 저장소입니다.
  • Worker Node
    • Kubelet : 각 노드에서 실행되며, 컨테이너의 라이프사이클을 관리합니다.
      • 각 노드에서 실행되는 agent로 노드의 Pod(파드)와 Container를 관리합니다.
      • 주요기능
        • Pod 라이프사이클(컨테이너를 생성,시작,중지)관리
        • 헬스체크 : 각 Pod, 컨테이너의 상태를 주기적으로 점검하고, 문제가 발생하면 다시 시작하거나 , 재배포
        • 노드의 리소스 관리 : 노드 CPU, 메모리, 네트워크 리소스를 관리하고 사용량을 모니터링.
        • 로그와 메트릭 수집 : 수집된 로그와 메트릭을 중앙 로그 시스템이나 모니터링 시스템 전달.
    • Container Runtime : Docker, Containerd 등의 컨테이너를 관리하는 소프트웨어입니다.
    • Kube-proxy : 네트워크 프록시 및 로드밸런서로써 서비스 간의 네트워크 동선을 관리합니다.
  • 기타 구성 요소
    • Kubeadm : 쿠버네티스 클러스터를 설치하고, 초기화하는 도구로 클러스터의 설치 및 설정을 자동화해줍니다.
      • 주요기능
        • 클러스터 초기화 : kubeadm init 명령어를 사용하여 새로운 쿠버네티스 클러스터를 초기화.(마스터노드를 설정)
        • 노드 조인 : kubeadm join 명령어를 사용하여 워커노드를 기존 노드에 추가
        • 클러스터 업그레이드 : kubeadm upgrade 명령어를 사용하여 K8S를 최신상태로 유지
    • Kubectl : 쿠버네티스 클러스터와 상호작용하기 위한 명령줄 도구로 클러스터의 리소스를 관리하고 애플리케이션을 배포하는데 사용됩니다.
      • 주요기능
        • 리소스관리 : Pod, service, deployment, namespace 등 다양한 K8S 리소스를 생성, 조회, 업데이트, 삭제하는일.
          • 예 ) kubectl create, kubectl get
        • 애플리케이션 배포 : YAML파일 사용하여 애플리케이션을 클러스터에 배포한다.
          • 예 ) kubectl apply -f deployment.yaml
        • 로그 확인 : pod, container의 로그를 조회
          • 예 ) kubectl logs pod-name
        • 디버깅, Pod내 명령어를 실행

0개의 댓글