1. Stateful 컨테이너의 특성일반적인 API 서버는 stateless 구조이므로 컨테이너가 삭제되고 새로 생성되어도 문제가 없다.하지만 데이터베이스와 같은 stateful 서비스는 다음 두 가지 조건이 반드시 필요하다.1) 데이터의 지속성컨테이너가 삭제되거나 재생성되어도 데이터는 유지되어야 한다.이를 위해 볼륨(Volume) 또는 Bind Mount를 사용한다.2) 고유한 식별자클러스터 환경에서 여러 개의 DB 인스턴스가 실행될 경우각 인스턴스는 자신만의고유한 스토리지(볼륨)고유한 네트워크 식별자를 가져야 한다.그렇지 않으면 데이터 충돌 또는 덮어쓰기 문제가 발생한다.2. Host → Container Bind Mount 개념Bind Mount의 목적컨테이너 이미지 안에 소스코드를 포함하지 않고,..
1. Dockerfile 구성 요소 (적용 시점 주의)Dockerfile 명령어들은 빌드 시점과 컨테이너 실행 시점에 따라 역할이 다르다.빌드 시점 전용ARGkey=value 형태빌드할 때만 사용컨테이너(애플리케이션) 실행 시에는 사용 불가이미지/컨테이너 공통FROM베이스 이미지 지정Repository:Tag 형식LABEL이미지 메타데이터이미지 관리용Kubernetes 환경에서 매우 중요ENVkey=value컨테이너 실행 시에도 사용 가능2. 파일 및 디렉토리 처리ADD파일 또는 디렉토리 복사원격 URL 다운로드 가능 실무에서 더 자주 사용COPY로컬 파일/디렉토리 복사다른 이미지에서 가져오는 용도ADD보다 기능 제한적이라 상대적으로 덜 사용됨3. 실행 환경 관련 설정USER컨테이너에서 사용할 사용자 권..
1. 컨테이너란 무엇인가컨테이너의 정의서비스의 추상화서비스를 오래 안정적으로 운영하기 위해 자동화를 위한 추상화 계층→ 이것이 곧 DevOps의 핵심 개념컨테이너의 핵심 특징격리 (Isolation)다른 컨테이너와 프로세스/자원 충돌 없음추상화 (Abstraction)실행 환경(OS, 라이브러리, 설정)을 하나의 단위로 묶음비유거실 = OS Kernel (공통, 격리됨)각 방 = 컨테이너각자 독립된 환경에서 서비스 실행2. 서비스 관점에서의 요구사항DB 사용 시 고려사항요구사항에 따라 DB 선택이 달라짐Redis vs Memcached요구사항에 따라 다음이 결정됨성능 사양메모리/스토리지 용량지속성 여부3. 이미지(Image)란 무엇인가이미지의 정의여러 개의 레이어(layer)로 구성된 불변 객체레이어가 ..
웹 프로젝트 구성 요소MongoDBNode.js 백엔드React 프론트엔드목표 요약세 가지 코드 블럭(프론트, 백엔드, 데이터베이스) 도커화세 컨테이너를 네트워크로 연결MongoDB 데이터 영구 저장백엔드 로그 데이터 유지백엔드 코드 변경 시 자동 반영프론트엔드 코드 변경 시 자동 반영목표 1. 세 가지 코드 블럭 도커화1-1. MongoDB 도커화DockerHub에서 제공하는 공식 MongoDB 이미지를 기반으로 컨테이너를 생성:docker run --name mongodb --rm -d mongo 1-2. 백엔드(Node.js) 도커화FROM node:16-alpineWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .CMD ["node", "app.j..
Docker 컨테이너 네트워킹 - 3가지 케이스 1. 컨테이너 내부 애플리케이션이 외부 웹사이트(API)와 통신하는 경우컨테이너 내부에서 실행 중인 애플리케이션은 외부 웹사이트나 API 서버로 HTTP 요청을 전송 가능일반적인 Node.js, Python 등 애플리케이션에서 fetch, axios, requests 등의 모듈로 외부 데이터를 요청하는 것과 동일하게 작동예를 들어, 컨테이너 안에서 axios.get('https://api.example.com/data') 같은 코드를 실행하면 문제없이 외부 서버로 요청2. 컨테이너 내부에서 외부 데이터베이스(DB)에 연결하려는 경우로컬 컴퓨터에서 실행 중인 데이터베이스에 Docker 컨테이너가 접근하려면, 보통 우리가 사용하는 localhost는 작동 X ..
Docker 데이터의 세 가지 유형1. Application Data 정의: 애플리케이션의 소스 코드나 설정 파일 등 실행에 필요한 코드특징: 읽기 전용, 컨테이너 실행 시 변경 불가관리 방법: 애플리케이션 코드를 수정하려면 새로운 이미지를 빌드해야 함2. Temporary App Data정의: 애플리케이션 실행 중 생성되는 임시 데이터 (캐시, 세션 등).특징: 컨테이너가 종료되면 사라짐.사용 예: 사용자 요청에 따른 임시 파일 생성, 애플리케이션 로그 (로그 파일은 영구 데이터로 관리할 수도 있음).3. Permanent App Data정의: 컨테이너 종료 시에도 손실되지 않아야 하는 데이터특징: 로컬 파일 시스템(호스트)과 연결된 Docker 볼륨을 통해 관리사용 예: 데이터베이스 파일, 사용자 업..