war를 사용한 web Service
- tomcat이미지를 다운 (hub.docker.com)
- 실행
- docker run -d -p 80:8080 --name 컨테이너명 이미지명:버전
- docker run -d -p 80:8080 --name tomcat-service tomcat:9.0

- 컨테이너 접속 ( exec ) => vim설치 => webapps/ROOT 디렉토리 생성
- docker exec -it mvc-service /bin/bash
- 도커가 사용하는 네트워크 확인( 브릿지 네트워크 )
- docker network ls

- mvc-service 진입 후 apt-get 업데이트 후 vim설치(선택, 필요한 패키지 설치)

- webapps디렉토리로 이동 후 ROOT 디렉토리 생성

- index.html 작성

-
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

-
stu14.sist.co.kr 검색 후 결과 확인

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

-
실행중인 컨테이너를 이미지로 commit
- docker commit 컨테이너명 계정명/이미지명:버전
- docker commit mvc-service yeongking/mvc-app:latest

-
Docker Hub 로그인
- docker login

-
이미지를 Docker Hub 푸시
- docker push 계정명/이미지명:버전
- docker push yeongking/mvc-app:latest

도커 허브 이미지 다운
-
도커 로그인
-
이미지 다운로드
- docker pull 계정명/이미지명:latest
-
실행
- 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내 명령어를 실행
