컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구
→ 컨테이너 기반의 오픈소스 가상화 플랫폼
서버에서의 컨테이너: 다양한 프로그램, 실행환경을 컨테이너로 추상화하여 동일한 인터페이스를 제공하여 프로그램 배포 및 관리를 단순하게 해주는 역할
installer 다운 → installer 실행 → 프로그램 설치 완료
❗️개발자들 사이의 갖고 있는 OS, 서버, 패키지 버전등 에 따라 프로그램 설치 과정에서 많은 에러 발생
→ 해결책: 가상머신, 도커를 사용하여 동일한 컴퓨터 제공하도록 함(개발환경과 배포환경 통일)
가상 머신 | 도커 |
---|---|
메모리 많이 차지 | 메모리 적게 차지 |
클라우드 환경으로 코드 이식 어려움 | 클라우드 환경으로 코드 이식 쉬움 |
부팅 속도 느림 | 이식성이 좋음 |
❗️ 컨테이너 기술의 라이브러리화인 도커를 사용하여 프로그램 개발, 배포 및 관리를 용이하게 할 수 있음!
이미지(Image): 응용프로그램을 실행하기 위해 필요한 모든 것을 포함
이미지 = 시작시 실행할 명령어 + 파일 스냅샷(디렉토리나 파일 카피한 것)
docker run <이미지>
입력도커 이미지: 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있는 SW 패키지
✔️ 도커 허브에 있는 다른 사람들이 만들어 놓은 이미지 사용 가능
도커 파일(dockerfile): 도커 이미지를 만들기 위한 설정 파일
❗️ 도커 이미지 이용하여 컨테이너 생성: docker create <이미지 이름>
도커 파일(dockerfile): 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의
베이스 이미지: 이미지의 기반이 되는 부분 → OS와 같은 개념
레이어: 중간 단계 이미지
# 베이스 이미지 명시
# FROM을 통해 이미지 생성 시 기반이 되는 이미지 레이어 명시
# <이미지 이름><태그>형식으로 작성
# <태그> 생략 시, 자동으로 가장 최신 것 다운
FROM baseImage
# 추가적으로 필요한 파일 다운
# RUN을 통해 도커 이미지가 생성되기 전 수행할 쉘 명령어 지정
RUN command
# 컨테이너 시작 시 실행될 명령어 명시
CMD ["executable"]
도커 파일에 입력된 것들을 도커 클라이언트에 전달하기 위해 빌드 해주어야 함
Build 명령어: 해당 디렉토리 내에서 dockerfile 파일을 찾아 도커 클라이언트에 전달
docker build ./
혹은 **docker build .
**
# 베이스 이미지 명시
# 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
: 포트임을 명시