What is Docker?

호밀빵 굽는 쿼카·2022년 5월 23일
0

NHN Cloud 인턴

목록 보기
46/48

Docker가 무엇인가?

Docker를 이해하기 위해서는 Container와 가상화에 대한 이해가 선행되어야합니다
컨테이너는 Host OS 상에서 리소스를 논리적으로 구분하여 마치 별도의 서버인 것 처럼 사용할 수 있게 하는 기술 입니다. 이게 논리적으로 구분한다는게 중요한데 물리적으로 구분하지 않기 때문에 쉽게 없애고 다시 생성하고 할 수 있는 것 입니다. 이런 면에서 가볍다고 표현할 수 있습니다.

Docker는 컨테이너 기술을 사용하여 애플리케이션에 필요한 환경을 신속하게 구축하고 테스트 및 배포를 할 수 있게 해주는 플랫폼

가상화와 무슨 차이점이 있는가?



Container

  • Docker, containerd, CRI-O 등이 컨테이너 런타임으로 있음
    Guest OS가 없고 Host OS의 커널을 공유하여 오버헤드가 적고 가벼워 빠르다
  • OS 실행 없이 별도의 환경에서 애플리케이션 실행이 가능
  • 이식성과 확장성이 높다.
  • VM : Host Os + Hypervisor + Guest OS
  • Docker : Docker + Application실행에 필요한 바이너리만 추가
    ( Host의 커널을 공유합니다=>쉬운 io 처리)

Docker 용어 정리

Docker Image

  • 도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Docker Image
  • 특정 프로세스를 실행하기 위한(즉, 컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요 없는 상태의 파일을 의미
  • 예를 들어 Ubuntu이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있으며, Oracle 이미지는 Oracle을 실행하는데 필요한 파일과 실행명령어, port 정보 등을 모두 가지고 있다.

Docker Container

이미지(Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.

1) 컨테이너는 이미지 Layer에 읽기/쓰기(read-write) Layer를 추가하는 것으로 생성/실행된다. 따라서 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용되며, 바뀐 부분을 읽기/쓰기 Layer에 적는다.
2) 컨테이너는 종료되었다고 해도 메모리에서 삭제되지않고 남아있다. 삭제하려면 명시적으로 삭제해야 함. 즉 종료가 되어도 컨테이너 & 읽기/쓰기 Layer 또한 그대로 존재하기 때문에 다시 시작할 수 있다.
3) 컨테이너를 삭제했다는 것은 컨테이너에서 생성한 파일이 사라진다는 것. 예) DB라면 그동안 쌓였던 데이터가 모두 사라진다는 뜻과 동일.
4) 한 서버는 여러 개의 컨테이너를 가져도 당연히 상관없으며, 컨테이너는 각각 독립적으로 실행된다.
5) 컨테이너는 커널 공간과 호스트OS 자원(시스템 콜)을 공유한다.

Docker File

  • Dockerfile은 DockerImage를 생성하기 위한 스크립트(설정파일)이다.
  • 여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage를 생성해준다.
  • 이미지가 어떻게 만들어졌는지를 기록함
  • 배포에 용이하다 => 어떠한 이미지를 배포할 때, 몇 기가씩이나 되는 이미지 파일 자체를 배포하기보다는 그 이미지를 만들 수 있는 스크립트인 Dockerfile만을 배포한다면 매우 편리할 것이다. 사용자는 그 스크립트를 실행시키기만 하면 스스로가 그 Dockerfile에 해당하는 이미지를 얻을 수 있기 때문이다.

Docker의 구조

1. Docker 클라이언트가 Docker 데몬과 통신했다.
2. Docker 데몬이 hello-world이미지를 Docker Hub에서 pull 했다
3. Docker 데몬이 hello-world이미지에 해당하는 컨테이너를 생성했다.

사실 정확하게 이해가 되지 않습니다. 실제로 Docker를 어떻게 사용하는지를 보면, 이해하기 쉬울 것 같아서 방법을 찾아봤습니다.
AWS에 Docker 설치 및 서버구동
hello world로 테스트해보는 Docker

여기서 잠깐! 🖐
AWS 란?

  • 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼이다.
  • Amazon Web Services는 아마존(Amazon)에서 제공하는 클라우드 서비스로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공하고 있다.
  • ex > AWS EC2에 Docker 설치하고 서버 구축 ( DockerHub에서 필요 이미지를 받을 수도 있고, 받은 이미지를 수정할수도, 이미지를 새로 생성할 수도 있음 )

Docker에 vue.js app 올리기

  1. docker 설치
  2. test용 vue app 생성
vue.cmd create vue-test
  1. 프로젝트 root밑에 dockerfile 생성
  2. docker image build(dockerfile 을 vue-test 위치에서 실행)
docker build -t vue-app
  1. docker image 확인
docker images
  1. docker container 실행
docker run -it -p 8080:80 --rm --name vue-app-1 vue-app
  1. 실행된 container 확인
docker ps
  1. vue.js app access 확인하면 vue 화면 확인가능

vue.js 공식 document : docker 사용

참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글