[89] NodeJS 컨테이너의 볼륨, 바인딩 마운트 및 폴리싱 (Polishing) NodeJS 컨테이너 최적화: 볼륨과 개발 환경 설정 볼륨 설정으로 데이터 지속성과 개발 효율성 확보로그 데이터 지속성 (명명된 볼륨)-v logs:/app/logs로그 파일을 컨테이너 외부에 저장컨테이너 재시작/제거 후에도 로그 유지 소스 코드 실시간 반영 (바인드 마운트)-v /로컬경로:/app로컬 소스 코드와 컨테이너 내부 동기화코드 변경 즉시 반영 가능 node_modules 보존 (익명 볼륨)-v /app/node_modules로컬 환경과 충돌 방지컨테이너 내부 의존성 패키지 유지바인드 마운트보다 우선 적용(더 구체적인 경로) 개발 환경 개선1. Nodemon 설정package.json에 추가"devDependencies": { "nodemon": "^2.0.4"},"scripts": { .. [88] 볼륨으로 MongoDB에 데이터 지속성 추가하기 [88] 볼륨으로 MongoDB에 데이터 지속성 추가하기MongoDB 컨테이너에 데이터 지속성과 보안 추가하기 문제 인식MongoDB 컨테이너 중지/제거 시 모든 데이터 손실데이터베이스 접근에 보안 제한 없음 데이터 지속성 추가볼륨 설정docker run --name mongodb -v data:/data/db --rm -d --network goals-net mongo명명된 볼륨 data 사용MongoDB 내부 데이터 경로(/data/db)에 연결컨테이너가 제거되어도 데이터 유지작동 원리첫 실행: Docker가 볼륨 생성, 데이터 저장재실행: 기존 볼륨의 데이터 로드결과: 컨테이너 생명주기와 독립적인 데이터 유지 접근 제한 설정환경변수를 통한 인증 설정docker run --name mongodb \.. [86] 효율적인 컨테이너 간 통신을 위한 Docker 네트워크 추가하기 Docker 네트워크를 활용한 다중 컨테이너 애플리케이션 구성 Docker 네트워크 설정네트워크 생성docker network create goals-net 사용 가능한 네트워크 확인docker network ls 컴포넌트별 컨테이너 설정1. MongoDB 컨테이너docker run --name mongodb --rm -d --network goals-net mongo포트 게시(-p) 없음: 동일 네트워크 내 컨테이너만 접근 가능외부(호스트)에서 직접 접근 불필요 2. Node.js 백엔드 컨테이너docker run --name goals-backend --rm -d -p 80:80 --network goals-net goals-nodeMongoDB 접근: mongodb://mongodb:27017/c.. [81-85] Docker로 다중 컨테이너 애플리케이션 구축하기 Docker로 다중 컨테이너 애플리케이션 구축하기 애플리케이션 구성 요소MongoDB 데이터베이스데이터 저장소데이터 지속성 필요접근 제한 설정Node.js 백엔드REST API 제공로그 파일 지속성 필요소스 코드 변경 실시간 반영React 프론트엔드단일 페이지 애플리케이션(SPA)소스 코드 변경 실시간 반영백엔드 API와 통신 컴포넌트별 도커화 과정1. MongoDB 컨테이너docker run --name mongodb --rm -d -p 27017:27017 mongo공식 MongoDB 이미지 사용포트 27017 노출백그라운드 실행 2. Node.js 백엔드 컨테이너DockerfileFROM nodeWORKDIR /appCOPY package.json .RUN npm installCOPY . .EXPO.. [72-80] Docker 컨테이너 통신의 세 가지 방식과 솔루션 Docker 컨테이너 통신의 세 가지 방식과 솔루션 컨테이너-WWW 통신컨테이너에서 외부 웹/API로의 통신은 기본적으로 가능특별한 설정 없이 인터넷 상의 API에 HTTP 요청 가능 컨테이너-호스트 머신 통신문제 : 컨테이너 내에서 localhost로 호스트 머신 접근 불가해결책 : localhost 대신 host.docker.internal 사용도커가 자동으로 호스트 머신의 IP 주소로 변환 컨테이너 간 통신기본 솔루션: IP 주소 직접 사용docker container inspect [컨테이너명]으로 IP 주소 확인문제점: IP 주소가 변경될 때마다 코드/이미지 수정 필요 우아한 솔루션: Docker Networks네트워크 생성docker network create [네트워크명] 컨테이너를 네트워.. [68, 69, 70, 71] 도커 컨테이너 통신 패턴 3가지 도커 컨테이너 통신 패턴 3가지 컨테이너-WWW 통신특징컨테이너 내부 애플리케이션이 외부 웹사이트/API와 통신HTTP 요청을 통한 데이터 송수신기본적으로 제한 없이 가능예시컨테이너에서 실행 중인 Node.js 앱이 스타워즈 API에 HTTP 요청Axios와 같은 라이브러리로 외부 API 호출웹 서비스 간 데이터 교환 컨테이너-호스트 머신 통신특징컨테이너가 호스트 컴퓨터에서 실행 중인 서비스와 통신로컬에 설치된 데이터베이스 등과 연결도커 없이 실행되는 서비스와의 통신예시컨테이너화된 앱이 호스트 머신의 MongoDB와 통신호스트에 설치된 SQL 데이터베이스 접근로컬 파일 시스템 접근 컨테이너 간 통신특징서로 다른 컨테이너 간의 데이터 교환각 컨테이너가 단일 책임을 갖는 마이크로서비스 아키텍처도커 네트워.. [64] 빌드 인수 (ARG) 사용하기 빌드 인수 (ARG) 사용하기 ARG 기본 개념Dockerfile에서 ARG 사용# 빌드 시 사용할 인수 정의ARG DEFAULT_PORT=80# 환경변수에 ARG 값 할당ENV PORT $DEFAULT_PORT 빌드 시 인수 전달 # 다른 포트로 개발용 이미지 빌드docker build -t feedback-node:dev --build-arg DEFAULT_PORT=8000 .# 프로덕션용 이미지는 다른 포트로 빌드docker build -t feedback-node:prod --build-arg DEFAULT_PORT=80 . ARG의 특징사용 범위Dockerfile 내부에서만 사용 가능컨테이너 실행 시에는 사용 불가CMD 명령에서는 사용 불가 용도빌드 시점에 값 주입환경변수의 기본값 설정동일 .. [62] 환경 변수 & '.env' 파일 작업 환경 변수 & '.env' 파일 작업Docker의 인수(ARG)와 환경 변수(ENV) 이해하기 개요인수(ARG)와 환경 변수(ENV)의 차이ARG : 빌드 타임에 사용 (Dockerfile 내부)ENV: 런타임에 사용 (실행 중인 컨테이너) 환경 변수(ENV) 사용Dockerfile에서 설정ENV PORT 80EXPOSE $PORT 실행 시 설정 방법 # 직접 설정docker run --env PORT=8000 ...docker run -e PORT=8000 ...# 환경변수 파일 사용docker run --env-file ./.env ... 애플리케이션에서 사용 // Node.js 예시const port = process.env.PORT; 사용 사례포트 설정개발/프로덕션 환경별 다른 포트 사용동적 .. [60] 모든것을 복사하진 마세요 : "dockerignore" 파일 사용하기 모든것을 복사하진 마세요 : "dockerignore" 파일 사용하기 .dockerignore 개념Dockerfile의 COPY 명령어에서 제외할 파일/폴더 지정.gitignore와 유사한 역할이미지 크기 최적화와 빌드 성능 향상에 도움 기본 구성# 일반적인 제외 항목node_modules.gitDockerfile 사용 이유node_modules 제외 이유이미지 내부에서 새로 설치되는 의존성과 충돌 방지빌드 시간 단축이미지 크기 최적화기타 제외 대상버전 관리 파일 (.git)설정 파일 (Dockerfile)임시 파일로그 파일 장점성능 최적화불필요한 파일 복사 방지빌드 시간 단축이미지 크기 감소안정성 향상의존성 충돌 방지클린 빌드 환경 보장일관된 빌드 결과이러한 설정으로 더 효율적이고 안정적인 Dock.. [59] COPY 사용 vs 바인드 마운트 사용 COPY 사용 vs 바인드 마운트 사용COPY vs 바인드 마운트: 개발과 배포 환경의 차이 개발 환경 (바인드 마운트)docker run -v /local/path:/app ...장점실시간 코드 변경 반영빠른 개발 피드백로컬 개발 용이 프로덕션 환경 (COPY)COPY . /app장점코드 스냅샷 보장환경 독립성안정적인 배포 왜 둘 다 필요한가?개발 시나리오바인드 마운트 사용코드 변경 즉시 반영빠른 테스트 가능배포 시나리오COPY 명령어 사용특정 시점 코드 스냅샷안정적인 버전 관리 주요 차이점목적바인드 마운트 : 개발 편의성COPY : 배포 안정성사용 시점바인드 마운트 : 개발 중COPY : 배포 시특징바인드 마운트 : 동적 업데이트COPY : 정적 스냅샷결론: COPY 명령어는 프로덕션 배포를 위해.. [58] Docker 볼륨 관리하기 Docker 볼륨 관리하기Docker 볼륨 관리 상세 가이드 도커 볼륨 관리 기본 명령어볼륨 조회docker volume ls # 모든 볼륨 목록특징명명된 볼륨과 익명 볼륨만 표시바인드 마운트는 표시되지 않음 (도커 관리 대상 아님) 볼륨 생성docker volume create 볼륨이름 # 수동으로 볼륨 생성 볼륨 상세 정보 docker volume inspect 볼륨이름 # 볼륨 세부 정보 확인 볼륨 삭제 # 특정 볼륨 삭제docker volume rm 볼륨이름# 미사용 볼륨 모두 삭제docker volume prune 볼륨 유형별 관리 특성명명된 볼륨컨테이너 독립적 유지수동 삭제 필요volume prune으로 삭제되지 않음익명 볼륨컨테이너와 생명주기 연결컨테이너 제거 시 자동 삭제미사용 .. [57] 읽기 전용 볼륨 살펴보기 읽기 전용 볼륨 살펴보기Docker 볼륨의 읽기/쓰기 권한 관리 읽기 전용(Read-Only) 바인드 마운트기본 설정docker run -v /host/path:/app:ro:ro 플래그: 읽기 전용(read-only) 설정컨테이너가 바인드 마운트된 폴더 수정 불가호스트 시스템에서만 수정 가능 볼륨 우선순위와 권한 관리전체 프로젝트 폴더 (읽기 전용)-v "/local/path:/app:ro"특정 폴더 쓰기 허용 -v feedback:/app/feedback # 명명된 볼륨-v /app/temp # 익명 볼륨-v /app/node_modules # 익명 볼륨 더 구체적인 하위 볼륨을 특정한다면 그 하위 볼륨이 메인 볼륨보다 더 우선한다고 할 수 있다.**[.. 이전 1 2 3 4 5 ··· 14 다음