[스파르타코딩클럽]/Docker & CICD 8

Docker Image 심화

Dockerfile 최적화 빠르게 만들기: Docker 이미지 만드는 시간을 줄일 수 있음 이미지 크기 줄이기: 저장 공간을 덜 차지하고 다운로드나 전송할 때도 더 빨라짐 재사용성 높이기: 여러 번, 여러 곳에서 쓸 수 있어서 편리 보안 강화 유지보수 쉽게: 나중에 수정하거나 업데이트할 때 훨씬 쉬움 # build 는 gradle 이미지에서 `builder`라는 이름으로. FROM gradle:8.5-jdk21-alpine AS builder WORKDIR /app COPY ./ ./ RUN gradle clean bootJar # App FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY --from=builder /app/build/libs/spring-bo..

Docker Network

Docker Network 이해 도커 컨테이너끼리 서로 통신할 수 있게 도와주는 네트워크 컨테이너 네트워크 모델(CNM) : 도커에서 네트워크를 쉽고 효율적으로 구축할 수 있도록 도와주는 네트워크 모델 샌드박스: 컨테이너를 외부 세계로부터 완전히 분리 엔드포인트: 외부 세계와 샌드박스 사이의 연결점 네트워크: 엔드포인트에서 다른 엔드포인트로 데이터를 보내는 길 실습 # back, front 네트워크 생성 docker network create --driver=bridge back docker network create --driver=bridge front # 각 서비스를 생성 및 실행 docker run --name=webapi -itd --net=front ubuntu:14.04 docker run ..

Docker volume

Volume 사용 이유 데이터 영속성: 컨테이너가 사라져도 데이터는 그대로 남음 같은 데이터를 여러 컨테이너가 사용 데이터를 백업하고 옯기기 쉬움 많은 양의 데이터를 다룰 때 더 빠르게 처리해줌 데이터를 안전하게 보관: 중요한 데이터를 컨테이너 밖에 따로 안전하게 보관 코드와 데이터를 따로: 코드를 바꿔도 데이터는 그대로 유지. 개발 및 운영에 편리 volume 컴퓨터의 특정 폴더 (대부분 /var/lib/docker/volumes/ 라는 곳)에 Docker가 관리해서 사용하는 데이터를 여기에 저장 볼륨의 좋은 점 백업하고 옮기기 쉬움 Docker 명령어로 관리 어디서나 잘 작동 여러 컨테이너와 함께 사용 가능 볼륨 드라이버로 더 많은 기능을 추가 가능 Mac이나 Windows에서 더 빠르게 돌아감 bi..

Docker 모니터링&로깅

도커 모니터링 컨테이너의 성능, 사용중인 자원(CPU, 메모리), 네트워크 사용량 같은 것들을 확인 모니터링 정보를 통해 문제를 빨리 발견하고 해결할 수 있음 컨테이너를 효율적으로 관리하고 최적화할 수 있음 docker stats : Docker에서 제공하는 간단하고 실용적인 모니터링 도구 CPU 사용률, 메모리 사용량, 네트워크 I/O, 디스크 I/O 등 여러 중요한 정보를 보여줌 특정 컨테이너의 상태만 보고 싶다면 docker stats [컨테이너 이름 또는 ID] htop : 시스템 모니터링의 필수 도구 리눅스 시스템을 모니터링하는데 사용되는 도구 주요 기능 실시간 모니터링: CPU, 메모리, 스왑 사용량을 실시간으로 볼 수 있음 프로세스 관리: 실행 중인 프로세스를 쉽게 확인하고 필요하면 종료시킬..

Docker Compose

Docker Compose 사용 이유 편하게 설정: 여러 컨테이너를 한 번에 쉽게 설정 가능 자동 배포: 설정 파일이 있으면 Docker Compose가 알아서 컨테이너들을 만들어 주고 실행 의존성 관리: 컨테이너들이 서로 의존하는 관계 관리 모니터링과 로깅 확장성: 여러 컨테이너를 하나의 그룹으로 관리하고 확장하기 쉬움 유연성: 개발 환경, 테스트 환경, 실제 운영 환경에서도 같은 설정 파일을 써서 일관성을 유지 가능 보안 강화: 컨테이너들의 네트워크를 분리해서 외부로부터의 접근을 제한 유지보수가 쉬워요: 설정 파일 하나로 컨테이너들을 관리하기 때문에 파일만 수정하면 됨 Docker Compose 사용 환경 개발 환경에서 앱을 따로 떼어 놓고 실행하고 테스트할 수 있는 환경 Compose 파일은 앱이 ..

Dockerfile

Dockerfile이란? 앱을 컨테이너로 만들 때 이미지를 만드는 용도로 사용 Dockerfile을 작성하여 똑같은 앱 환경을 쉽게 만들고 그 과정을 자동화할 수 있음 예시 # Dockerfile FROM ubuntu:latest MAINTAINER Your Name RUN apt-get update && apt-get install -y nginx COPY index.html /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] FROM: 베이스 이미지를 선택 MAINTAINER: 이미지를 만든 사람의 정보 RUN: 이미지에 명령을 실행하여 파일을 추가하거나 삭제 COPY: 파일을 이미지에 복사 EXPOSE: 컨테이너가 노출할 포트를 설..

Github Actions와 CI/CD

Github Actions Github에 내장된 CI/CD 도구 github와 통합이 쉽고 CI/CD 서버가 내장되어 따로 구축할 필요가 없으며 일정 수준까지 가격이 무료 무료 버전: 스토리지 500MB, 월 2000분 동작 방법: .github/workflows 폴더 아래에 yaml 파일이 위치 작성된 actions 파일들을 github에서 자동으로 실행 CI test를 통과한 코드만 develop 브랜치와 main 브랜치에 merge되도록 하여 오류를 방지하고 안정적인 코드를 배포하며 버그를 빠르게 발견 예시 # Actions 이름 github 페이지에서 볼 수 있다. name: 'CI' # Event Trigger 특정 액션 (Push, Pull_Request)등이 명시한 Branch에서 일어나면 ..

CI/CD와 Docker

CI/CD의 정의 CI(Continuous Integration, 지속적인 통합) 자동화된 빌드와 자동화된 테스트 제공 안정적인 코드를 빠르게 제공 CD(Continuous Delivery, 지속적인 서비스 제공) CD(Continuous Deployment), 지속적인 배포) 배포 자동화로 배포 시간을 단축하고 결과물을 빠르게 지속적으로 제공 과거의 배포: 폭포수 개발 방식 현대적인 개발 과정: 애자일 개발 방식 특정 주기마다 개발, 테스트 및 프로덕션에 통합된 기능을 출시 Docker를 통해 서버를 표준화하고 같은 환경에서 테스트 및 배포 테스트를 진행하고 이 과정을 자동화 Docker가 테스트 뿐만 아니라 실제 배포도 담당 Docker 기초 Docker 사용 이유 애플리케이션 개발과 배포가 편해진다..