Docker overview

홍석희·2023년 12월 18일
0

docker

목록 보기
1/6
post-thumbnail

Docker overview

Docker is an open platform for developing, shipping, and running application

도커는 애플리케이션을 우리의 infrastructure에서 분리하여 소프트웨어를 빠르게 전달할 수 있다
도커를 사용하면 애플리케이션 관리를 위한 infrastructure을 동일하게 유지 가능

도커의 등장 배경

어플리케이션의 구동에는 Dependency, 환경설정 등 여러가지가 필요함
이러한 환경 설정들을 매번 설치하고 바꿔주는 것은 번거롭고 오류 발생 가능
또한 문제로 로컬과 서버의 환경이 달라 동작이 차이가 발생

이러한 문제를 해결하기 위해 도커에서는 컨테이너라는 소프트웨어 유닛에 어플리케이션의 동작에 필요한 여러가지 환경 설정과 라이브러리 등의 리소스들을 포함시킨다
이러한 컨테이너를 통해 어플리케이션을 어느 환경에서도 동일하게 수행이 가능

가상화 머신 vs 컨테이너

Guest OS를 설치하고 그 위에 어플리케이션을 올리는 가상화 머신과 달리, 컨테이너는 container engine이라는 소프트웨어 위에서 독립적으로 동작하는 컨테이너를 구성하여 별도의 운영체제를 설치하지 않고 Host OS를 공유한다
이러한 컨테이너 엔진 중 하나가 Docker이다

Docker의 Container

Docker provides the ability to package and run an application in a loosely isolated environment called a container.

  • 독립된 환경 구성으로 동시에 여러 컨테이너를 실행 가능
  • 가볍고 애플리케이션 실행에 필요한 모든 것을 포함하기 때문에 호스트에 설치된 프로그램에 의존할 필요가 없다

이러한 특징들 덕분에 같은 컨테이너를 공유한다면 모두가 동일한 개발환경에서 작업이 가능하다

Docker의 장점

  • 개발환경을 모두 동일하게 제공할 수 있다
  • 컨테이너를 활용한 CI/CD workflow가 효과적이다
  • highly portable and lightweight
  • 독립된 환경 구성으로 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다
  • 이미지를 통한 컨테이너의 구축이 간편하고 개발환경 구축이 간편하다

Docker 구조

도커는 client-server 구조를 사용한다
docker cilentdocker daemon 에게 컨테이너의 빌드, 실행, 배포 등의 작업을 요청
docker clientdocker daemon 은 REST API를 통해 통신
Docker Compose 는 docker client 중 하나로, 여러 컨테이너로 구성된 애플리케이션을 다룰 수 있게 해준다

Docker daemon

Docker daemon(dockerd)는 Docker API request를 대기하고 Docker object들을 처리
daemon은 Docker service의 관리를 위해 다른 deamon과의 통신도 가능

Docker client

Docker client는 Docker 사용자가 Docker와 상호작용하는 기본적인 방법
docker run 와 같은 커맨드 사용 시 client는 이 커맨드를 dockerd로 전달한다
docker 명령어는 Docker API를 사용한다
Docker client는 하나 이상의 daemon과 통신할 수 있다

Docker registries

Docker registry는 Docker image들을 저장한다
Docker Hub는 public registry
Docker는 기본적으로 Docker Hub에서 이미지들을 찾고, private registry를 활용할 수도 있다

docker pull 또는 docker run 커맨드 사용 시 설정된 registry로부터 이미지를 가져온다
docker push 커맨드 사용 시 설정된 registry로 이미지를 push 한다

Docker objects

Images

Docker container를 만들기 위한 read-only 템플릿
image는 다른 image에 custumization를 더한 형태로 많이 사용된다
rigistry에서 가져오거나 Dockerfile을 이용하여 직접 image를 만들 수 있다
Dockerfile의 각 명령어는 이미지에 layer을 만들고 Dockerfile이 수정되어 이미지를 rebuild하면 수정된 부분만 rebuild한다

이러한 부분 덕분에 이미지들은 가상화 기술과 비교했을 때 더 lightweight, samll, fast 하다

Container

컨테이너는 실행가능한 이미지의 인스턴스
Docker API 또는 CLI로 create, start, stop, move, delete 가능

기본적으로 컨테이너는 다른 컨테이너, host machine과 분리돼있음

컨테이너는 이미지와 생성하거나 시작할 때의 설정을 통해서 정의된다
컨테이너가 삭제되면 영속적이지 않은 곳에 저장한 변경 사항은 사라진다

컨테이너 실행 과정

  • 컨테이너가 생성되면 도커는 read-write 파일 시스템을 할당한다
    이로써 컨테이너를 실행 가능하게 하고 해당 로컬 파일 시스템 안에서 파일과 디렉토리의 생성과 수정이 가능하게 한다
  • 도커는 default network를 통해 컨테이너와 연결할 network interface를 생성
    이 작업은 컨테이너에 IP 주소를 할당하는 것을 포함한다
    기본적으로 컨테이너는 host machine의 network connection을 통해 외부 network와 연결이 가능

참고 자료: https://docs.docker.com/get-started/overview/

profile
개발 기록

0개의 댓글