서버 가상화와 컨테이너 기반의 가상화
가상화가 왜 등장했을까
하나의 서버를 분산하여 사용하기 위해
Hypervisor
서버 가상화 기술을 구현할 수 있게하는 소프트웨어 가상 머신이라는 단위로 구별
OS들에게 자원을 나누어주며 조율, OS들의 커널을 번역해서 하드웨어에게 전달
kernel
- 컴퓨터
⎡ 하드웨어
⎣ 소프트웨어
⎡ 응용프로그램
⎣ 운영체제(OS)
⎡ 시스템 프로그램
⎣ 커널 <--
- 커널은 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로써 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 한다.
- 즉, 커널은 인터페이스로써 응용 프로그램 수행에 필요한 여러가지 서비스를 제공하고, 여러가지 하드웨어(CPU, 메모리) 등의 리소스를 관리하는 역할을 한다.
대표적인 툴 : Virtual Box, vmware
각 가상머신에는 여러 운영체제가 설치, 하이퍼바이저에 의해 생성되고 관리되는 운영제체를 게스트 운영체제라 부름
컨테이너를 왜 써야하나
컨테이너
도커엔진(container engine)
명령어를 입력했을 때
- 사용자가 docker 명령어로 도커 엔진에게 명렁어 보냄 - 전달받은 도커 클라이언트는 /var/run/docker.sock에 위치한 유닉스 소켓을 통해 도커 데몬의 API 호출 - 도커 데몬은 명령어에 해당하는 작업을 수행하고, 결과를 도커 클라이언트에 반환 - dockerd는 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체 - 도커 데몬 : 도커 프로세스가 실행되어 입력받을 준비가 된 상태
# 노드 기준
FROM node:16-alpine // 어떤 base 이미지를 쓸건지 명시
WORKDIR /app // 어떤 디렉토리에서 복사해올 건지
COPY package.json package-lock.json ./ // 현재 경로인 /app으로 복사
RUN npm ci // 버전을 맞춰서 설치 (그냥 설치는 npm install)
COPY index.js // 소스파일 복사
ENTRYPOINT [ "node", "index.js" ] // 명령어로 실행
자주 변경되는 파일일수록 아래쪽에 배치 -> layer의 최상단에 위치함
1. Docker 다운
2. Dockerfile 설정
3. 프로젝트 build -> docker 이미지화 -> docker images로 확인 가능
명령어 : docker build -t ( 사용할 이름) .
docker build -f Dockerfile -t sunflower-docker .
// . : build context, 현재 최상위 경로라는 것을 명시해줌
// use -f to point a Dockerfile
// use -t to name the image, 도커 이미지에 이름 부여 가능
4. 해당 이미지 파일로 컨테이너 실행 -> docker ps 로 실행 중 컨테이너 확인 가능
명령어 : docker run (사용할 이름)
docker run -d -p 8080:8080 sunflower-docker
// -d stands for detached to run a container in a background, 터미널아 기다리지말고 너 할일헤~
// -p is port publishing maps a port on the container to a port on the host, host와 컨테이너의 포트 연결
팀워크
서버
-> 도커를 사용하면 개발 환경을 이미지화 시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화 시켜 구축 가능
https://minkwon4.tistory.com/295 - 커널
Docker 공식 문서
테코톡 - 검프의 Docker 이론편
드림코딩 - 도커 한방에 정리
지환님의 도커 사용기
docker 권한 문제 발생시
EC2에 docker 설치
docker 중지 및 이미지 삭제
https://velog.io/@ye1219/도커를 사용하는 이유