[Course 2] Part10. 프론트엔드 개발자가 알아야 하는 Docker & CI/CD_Docker

Minji Lee·2023년 10월 17일
0

Docker란?

컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구
→ 컨테이너 기반의 오픈소스 가상화 플랫폼

서버에서의 컨테이너: 다양한 프로그램, 실행환경을 컨테이너로 추상화하여 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순하게 해주는 역할


Docker 사용 이유

도커 없이 프로그램 실행 순서

installer 다운 → installer 실행 → 프로그램 설치 완료
❗️개발자들 사이의 갖고 있는 OS, 서버, 패키지 버전등 에 따라 프로그램 설치 과정에서 많은 에러 발생
→ 해결책: 가상머신, 도커를 사용하여 동일한 컴퓨터 제공하도록 함(개발환경과 배포환경 통일)

가상 머신도커
메모리 많이 차지메모리 적게 차지
클라우드 환경으로 코드 이식 어려움클라우드 환경으로 코드 이식 쉬움
부팅 속도 느림이식성이 좋음

❗️ 컨테이너 기술의 라이브러리화인 도커를 사용하여 프로그램 개발, 배포 및 관리를 용이하게 할 수 있음!


도커 작동 원리

도커 작동원리
  1. 도커 클라이언트에 커맨드 입력하여 클라이언트에서 도커 서버로 요청 보냄
  2. 서버에서 해당 이미지가 로컬에 캐시되어 있는지 확인
  3. 캐시되어 있지 않다면, 도커 허브(이미지 저장소)에서 해당 이미지를 가져오고 로컬에 캐시로 보관
  4. 해당 이미지를 이용하여 컨테이너 생성
  5. 이미지로 생성된 컨테이너는 이미지에서 받은 설정이나 조건에 따라 프로그램 실행

이미지로 컨테이너 생성

이미지(Image): 응용프로그램을 실행하기 위해 필요한 모든 것을 포함

이미지 = 시작시 실행할 명령어 + 파일 스냅샷(디렉토리나 파일 카피한 것)

  1. 도커 클라이언트에 docker run <이미지> 입력
  2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크로 옮김
  3. 이미지에서 가지고 있는 명령어(컨테이너가 실행될 때 사용될 명령어)를 이용해 해당 응용프로그램 실행

도커 이미지 생성 순서

도커 이미지: 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있는 SW 패키지
✔️ 도커 허브에 있는 다른 사람들이 만들어 놓은 이미지 사용 가능

도커 허브에 있는 이미지 사용하지 않고 직접 만드는 방법

  1. 도커 파일 작성

    도커 파일(dockerfile): 도커 이미지를 만들기 위한 설정 파일

  2. 도커 파일에 입력된 명령들이 도커 클라이언트에 전달
  3. 도커 서버에서 도커 클라이언트에 전달된 모든 중요한 작업들 수행
  4. 이미지 생성

❗️ 도커 이미지 이용하여 컨테이너 생성: docker create <이미지 이름>

Dockerfile 만들기

도커 파일(dockerfile): 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의

  1. 베이스 이미지 명시(파일 스냅샷에 해당) → FROM

    베이스 이미지: 이미지의 기반이 되는 부분 → OS와 같은 개념
    레이어: 중간 단계 이미지

  2. 추가적으로 필요한 파일을 다운 받기 위한 몇 가지 명령어를 명시(파일 스냅샷에 해당) → RUN
  3. 컨테이너 시작 시 실행될 명령어 명시(시작 시 실행될 명령어에 해당) → CMD
# 베이스 이미지 명시
# FROM을 통해 이미지 생성 시 기반이 되는 이미지 레이어 명시
# <이미지 이름><태그>형식으로 작성
# <태그> 생략 시, 자동으로 가장 최신 것 다운
FROM baseImage

# 추가적으로 필요한 파일 다운
# RUN을 통해 도커 이미지가 생성되기 전 수행할 쉘 명령어 지정
RUN command

# 컨테이너 시작 시 실행될 명령어 명시
CMD ["executable"]

도커 빌드

도커 파일에 입력된 것들을 도커 클라이언트에 전달하기 위해 빌드 해주어야 함

Build 명령어: 해당 디렉토리 내에서 dockerfile 파일을 찾아 도커 클라이언트에 전달
docker build ./ 혹은 **docker build .**


리액트 도커 파일 작성

도커로 앱 실행 순서

  1. 도커 파일 작성
    → 개발 환경 도커파일(dockerfile.dev)와 운영환경 도커파일(dockerfile)
  2. 도커 이미지 생성
  3. 이미지 이용해 컨테이너 생성
  4. 컨테이너에서 앱 실행

리액트를 위한 도커 파일

# 베이스 이미지 명시
# alpine 이미지는 크기가 작아 npm 사용 어렵
# alpine보다 크기가 큰 node 이미지 사용
FROM node:16-alpine

# 컨테이너 안에 어떠한 경로에 리액트를 위한 파일을 넣어줄 건지 명시
# 자신이 원하는 경로 작성, /app으로 작성해도됨
WORKDIR /usr/src/app

# package.json 파일을 위 디렉토리 안에 복사
COPY package.json ./

# package.json 파일 이용해서 모듈 설치
RUN npm install

# 첫번째 디렉토리에 있는 모든 것을 카피 후, 두번쨰 디렉토리에 복사
COPY ./ ./

# 리액트 앱 실행
CMD ["npm", "run", "start"]

npm install: node.js로 만들어진 모듈을 웹에서 받아 설치하고 관리해주는 프로그램
→ package.json에 적혀있는 종속성들을 웹에서 자동으로 다운 받아 설치해주는 명령어


포트 맵핑

❗️로컬 컨테이너에 있던 것을 컨테이너 내부에 있는 네트워크에 연결시켜주어야 함 → 포트 맵핑
docker run 이미지 이름 명령어는 로컬 네트워크에서 실행 안됨
즉, 포트 번호 맵핑 해주어야 함
docker run -p 3000:3000 이미지 이름

  • -p: 포트임을 명시
  • 앞 포트 번호: 브라우저 포트 번호
  • 뒤 포트 번호: 도커 컨테이너 포트 번호

0개의 댓글