Nginx의 필요성 Q. 개발환경 서버와 운영환경 서버가 달라야 하는 이유 개발에서 사용하는 서버(Dockerfile.dev) 소스 변경시 자동으로 전체 앱을 다시 빌드해서 변경 소스를 반영 → 개발환경에 특화 운영환경 서버(Dockerfile) 소스 변경시 변경 소스 반영X →개발에 필요한 기능들이 필요하지 않아 더 깔끔함 Nginx의 장점 Q. Docker에서 nginx를 사용하는 이유는? nginx(리버스 프록시 서버)는 백엔드 서버 앞에 위치해서 클라이언트 요청을 백엔드 서버로 전달 이로인해 아래와 같은 장점이 있음 백엔드 서버의 주소 숨길 수 있음(리버스 프록시) 들어오는 네트워크 트래픽을 여러 서버에 분산시켜 부하를 균등하게 분배(로드 밸런싱) 자주 요청되는 데이터(예: 이미지, CSS, Ja..
Docker Compose 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구 Docker Compose 사용 이유 여러 개의 컨테이너가 하나의 어플리케이션으로 동작시, 도커 컴포즈를 사용하지 않는다면, 이를 테스트하기 위해 각 컨테이너를 하나씩 생성해야 하기때문 ex. web application test = web server container,db container 각각 생성 Docker Compose 특징 run 명령어의 옵션을 그대로 사용 가능 각 컨테이너의 의존성,네트워크,볼륨등을 함께 정의 가능 Docker Compose 작성 방법 Compose에서는 YAML파일을 사용하여 application 서비스를 구성(명세)함 ..
Docker Storage 필요성 1. Docker Layer = Container Layer + Image Layer Image Layer = Read Only : Docker Image는 읽기전용이며 어떠한 경우에도 변경되지 않음(변경사항 적용X) Container Layer = Writable Writable Layer : 컨테이너가 생성될때, Dockers는 읽기 전용 이미지 위에 “Writable Layer”를 추가 → 이 레이어에서 컨테이너 내의 변경사항(파일 추가,수정,삭제 등)이 처리됨 Writable Layer의 휘발성 : Container 삭제시 Writable Layer에 저장된 모든 데이터도 함께 삭제됨 2. Container의 Data 저장 문제점(휘발성) Container의 Wr..
1. 생성된 레이어 재사용(캐싱) 기존코드1 문제점 Docker이미지 빌드시 Dockerfile의 각 명령어를 실행 → 해당 결과들을 새로운 레이어로 저장한다. 아래 코드는 소스 코드중 어떤 파일이든 변경되면 COPY ./ ./ 이후의 모든 레이어가 다시 빌드된다 → 소스의 작은 변경이라도 RUN npm install 가 다시 실행된다. FROM node:10 WORKDIR /usr/src/app COPY ./ ./ RUN npm install CMD ["node","server.js"] 수정코드1 수정된 이유 package.json 먼저 복사 package.json에 변경사항이 없다 → RUN npm install 명령어 까지의 모든 레이어 캐싱되어 재사용(npm 재설치 없이 빠르게 빌드 가능) pac..
Docker 컨테이너내에 구성요소들이 적용될수있는 이유는? Dockerfile을 통해 구성요소들을 설정해 준다. * Dockerfile 내용 FROM adptopenjdk:8-jdk-hotspot AS builder #베이스이미지+별칭 COPY gradlew . #gradlew 복사 COPY gradle gradle #gradle 복사 COPY build.grade . #build.gradle 복사 COPY settings.gradle #settings.gradle 복사 COPY src src #웹 어플리케이션 소스 복사 RUN chmod +x ./gradlew #gradlew 실행권한 부여 RUN ./gradlew bootJar #gradlew를 사용하여 실행 가능한 jar 파일 생성 FROM adop..
Docker Image란? An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run Docker Container를 ..
Containers vs. VMs 컨테이너란? A container is an isolated environment for your code. Docker Image를 통해 application을 실행하기 위해 모든것(코드,런타임,시스템 도구,시스템 라이브러리 설정등)을 포함하고 있는 기술인데, 이 기술을 통해 어느 환경에서나 일관된 방식으로 실행할수 있다. 컨테이너가 사용자가 가지고 있는 OS나 파일에 대한 정보 없이 Docker Desktop에 제공하는 환경에서 실행한다. 어떻게 컨테이너가 독립적으로 가능할까? Docker Desktop을 사용하여 컨테이너를 관리, 탐색하고 컨테이너가 기본 OS를 포함한 실행하려는 코드를 위한 모든것을 가지고 있기때문에 가능하다. 질문1. 컨테이너가 코드를 위한 모든..