물리적 머신(노트북, 컴퓨터)위에 여러 가상 머신을 띄워서 다수의 운영체제를 한 물리적 머신으로 돌릴 수 있게 하는 것
현대의 컴퓨터는 많은 발전을 거듭해 성능이 향상됨
--> 한 대의 컴퓨터에 한 가지 일만 시키기에는 남는 자원이 아까움(낭비) + 비싼 서버 컴퓨터를 늘리고, 서비스를 늘릴때마다 서버에 비용투자를 하기에는 비용 부담이 큼
--> 한 대의 컴퓨터에 여러 가상 머신을 띄워서 사용
호스트 os 위에 새로운 os들을 설치하는 것이 아니라, 필요한 것들만 가상화해서 실행
훨씬 가볍고 쉽고 빠르게 가상환경을 만들 수 있음
컨테이너 가상화 기술(가상화된 컨테이너 운영)이자 회사명
많은 사용량으로 인해 컨테이너 가상화 기술의 대명사처럼 사용되고 있음
(하지만 최근에는 다른 오픈소스 컨테이너 가상화 기술들도 성장하고 있기 때문에, 이 이름 하나로만 기억하면 안됨)
클라이언트-서버-레지스트리-이미지-컨테이너
사용자가 도커를 설치하고 명령어를 입력하면, 도커 클라이언트가 명령을 서버에 전달하고 결과값을 받아옴
명령어는 도커 데몬이 전달받고, 명령어에 대한 작업은 도커 데몬이 수행함
도커 레지스트리(저장소)에는 사용자가 만든 이미지들을 올릴 수 있으며, 그 이미지들을 실행해서 띄울 수 있는 것이 컨테이너. 이미지를 올리면, 어떤 컴퓨터에서든 권한만 있으면 컨테이너를 통해 이미지들을 실행해서 띄울 수 있음
카세트 플레이어에 비유 가능
Docker의 전체적인 모습 = 카세트 플레이어
Docker 이미지 = 카세트 테이프
Docker 데몬(서버) = 카세트 플레이어
Docker 컨테이너 = 이미지(카세트 테이프)를 Docker 데몬(카세트 플레이어)에서 재생하는 동작 + 동작으로 인해 나오는 결과물
즉 어떤 컴퓨터 혹은 서버든 Docker만 설치되어 있으면 이미지를 가지고 실행할 수 있음
컨테이너는 단일 프로세스로서 동작하고, 프로세스의 작업이 종료되면 컨테이너도 종료됨(영원하지 않음, 이는 마치 카세트 플레이어의 음악 재생이 모두 끝나면 종료되는 것과 같음)
docker ps
실행중인 컨테이너를 보여주는 명령어
docker ps -a
실행 종료된 컨테이너를 포함하여 모든 컨테이너를 보여주는 명령어 및 옵션
docker images
생성되거나 다운로드된 이미지를 보여주는 명령어
docker images -a
모든 이미지를 보여주는 명령어 및 옵션
docker build -t Docker허브에가입한계정명/이미지명(프로젝트명권장):버전
Docker 이미지를 빌드하는 명령어(Dockfile 사용)
docker run --name 컨테이너명 이미지명
Docker 컨테이너를 실행하는 명령어(완성된 이미지를 사용)
docker run -it 이미지명 /bin/bash
Docker 컨테이너를 실행시킴과 동시에 컨테이너에 접속하여 shell을 실행시키는 명령어