[스파르타코딩클럽] 94

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 사용 이유 애플리케이션 개발과 배포가 편해진다..

[240219] CI/CD 공부 (2) CD

CI/CD 공부 (1) CI https://jinjinjincode.tistory.com/256 [240110] CI/CD 공부 CI/CD란? Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미 기본 개념 지속적인 통합(Continuous Integration): 자동화된 빌드와 자동화된 테스트를 제공 지속적 jinjinjincode.tistory.com 수동 배포 https://jinjinjincode.tistory.com/259 [240114] AWS, docker로 수동 배포하기 CD를 구축하기 전에 먼저 배포 과정을 익히기 위해서 수동 배포를 해보려고 한다. 지난번에 AWS RDB와 EC2를 만들었고 그..

[240128] docker + nginx 무중단배포 구축하기

기존에는 코드가 수정되면 CI/CD를 통해 도커 이미지가 올라가게 되고, EC2 서버에서 해당 이미지를 컨테이너로 실행하여 배포를 진행해야 했다. 이 과정에서는 코드가 수정될 때마다 수정 내용을 반영하기 위해 중간에 서버를 멈추고 다시 시작해줘야 한다는 문제점이 발생한다. 사용자 테스트를 앞두고 서버가 중간에 멈추는 일을 방지하기 위해서 무중단 배포를 구축하고자 했다. Nginx - Nginx는 웹 서버로서의 역할을 하며, 백엔드 서버에 대한 요청을 받아 이를 처리하는 역할을 합니다. 무중단 배포를 위해 새로운 버전의 애플리케이션을 배포할 때 이전 버전과 새로운 버전을 함께 관리할 수 있으며, 요청이 들어오면 새로운 버전이 완전히 배포될 때까지 이전 버전으로 요청을 전달할 수 있습니다. - Reverse..