도커는 container
라고 부르는 loosely isolated environment에서 어플리케이션을 package & run할 수 있는 ability 제공
isolation & security는 given host에서 많은 컨테이너들을 동시 run할 수 있도록 해줌
컨테이너는 가볍고 어플리케이션을 실행하기 위한 모든 것을 갖고 있기 때문에, 현재 host에 설치된 것에 의존 X
사용자는 컨테이너를 쉽게 공유 가능
➡ 같은 컨테이너면 같은 방식으로 동작
도커는 사용자가 컨테이너의 lifecycle을 관리할 수 있도록 tooling과 platform 제공:
도커는 개발 lifecyle을 간소화(streamline)
컨테이너는 CI/CD(지속적통합/지속적전달) workflows에 적합
예제 시나리오)
도커의 컨테이너 기반 플랫폼은 이식성이 높은(highly portable) 워크로드 고려
컨테이너는 개발자의 로컬 laptop, 데이터 센터의 물리적 or 가상 머신, 클라우드 제공자, 혼합 환경에서 실행 가능
도커의 portability & 가벼움 ➡ workload를 쉽게 동적으로 관리할 수 있게 함
도커는 가볍고 빠름
➡ hypervisor 기반 가상 머신에 대한 viable & cost-effective한 대안 제공
➡ 비지니스 목표 달성을 위해 더 많은 컴퓨팅 용량을 사용 가능
도커는 고밀도 환경 + 적은 리소스로 많은 일을 해야 하는 small/medium 배포에 적합
client-server
구조
도커 client는 도커 daemon과 통신
도커 client와 daemon은 동일한 시스템에서 실행될 수 있음
or 도커 client를 원격 daemon에 연결 가능
도커 client와 daemon은 UNIX 소켓 or 네트워크 인터페이스를 통해 REST API
를 사용해 통신
다른 도커 client는 컨테이너 세트로 구성된 어플리케이션으로 작업할 수 있는 Docker Compose
Docker daemon(dockerd
)
Docker client(docker
)
docker run
같은 명령어를 사용했을 때, client는 이 명령어를 carry out하는 dockerd
으로 senddocker
명령어는 Docker API를 사용dockerd
), Docker client(docker
), Docker Compose, Docker Content Trust, Kubernetes, Credential Helper가 포함더 자세한 내용은 Docker Desktop
Docker images 저장
Docker Hub
는 누구나 사용 가능한 public registry
개인 registry를 실행할 수도 있음
docker pull
or docker run
명령어를 사용하면 구성된 registry에서 요구된 image들을 pull
docker push
명령어를 사용하면 구성된 registry로 image를 push
도커를 사용하면 image, container, network, volume, plugin, 기타 객체를 생성 & 사용
도커 컨테이너를 생성하기 위한 지침이 담긴 read-only template
종종 추가적인 customization과 함께 다른 이미지를 기반으로
ubuntu
이미지를 기반으로 하는 이미지를 build할 수 있지만, Apache 웹 서버와 본인의 어플리케이션을 설치 가능 (본인의 앱을 실행시키기 위해 필요한 configuration details 설치 뿐만 아니라)own image를 생성 or 다른 사람들이 만들고 registry에 published된 image를 사용
own image를 빌드하려면 Dockerfile
생성하기
docker run
예시$ docker run -i -t ubuntu /bin/bash
위의 명령어는
ubuntu
컨테이너를 실행시키고, /bin/bash
를 실행시킨다.위 명령어를 실행시키면 생기는 일:
(default registry configuration을 사용한다고 가정)
ubuntu
이미지를 local에서 가지고 있지 않다면, 도커는 configured registry에서 해당 이미지를 가져온다.
(manual하게 docker pull ubuntu
한 것처럼)
도커는 새로운 컨테이너를 생성한다.
(manual하게 docker container create
한 한 것처럼)
도커는 컨테이너의 final layer로 read-write filesystem을 컨테이너에 할당
➡ 실행중인 컨테이너가 local filesystem에 있는 파일과 디렉터리를 생성/수정할 수 있도록 함
도커는 default 네트워크에 컨테이너를 연결할 수 있게 네트워크 인터페이스 생성 (네트워킹 옵션을 specify하지 않았을 경우)
도커가 컨테이너를 시작시키고 /bin/bash
를 실행시킴
-i
와 -t
flag 사용했기 때문), output이 사용자의 터미널에 log되는 동안 사용자는 키보드를 통해 input 줄 수 있다.bin/bash
종료하기 위해 exit
입력할 때, 컨테이너가 중단되지만 제거되진 않음
➡ 사용자가 재시작하거나 제거 가능
<기반 기술>
namespaces