컨테이너 기반 가상화 플랫폼이다. 도커를 통해 소프트웨어 애플리케이션을 컨테이너로 패키징하여 실행한다.
도커 사용에 가장 큰 목적 중 하나는 애플리케이션 배포를 위해 다양한 소프트웨어와 데이터를 독립된 환경에 격리하는 기능 제공한다는 것이다.
도커는 기본적으로 리눅스 운영체제에서만 동작한다. 도커를 사용하려면 도커엔진이라는 소프트웨어를 설치해야한다. 도커 엔진을 사용해야 컨테이너 관련 작업을 진행할 수 있다.
리눅스 커널 기능을활용하여 리눅스 위에서 도커 엔진이 실행되고, 도커 엔진 위에 도커 컨테이너가 동작하는 구조이다.
만약 window나 macOS같은 OS를 사용한다면, VirtualBox나 VMware같은 가상환경 위에 리눅스 운영체제를 설치하고 그 위에 도커엔진을 설치하거나, window, macOS용 도커 데스크톱을 설치하여 도커 사용이 가능하다.
컨테이너 내부의 프로그램 또한 리눅스용 프로그램이다. 리눅스 운영체제가 서버에서 많이 사용되고 리눅스용 소프트웨어도 서버용이 많기 때문이다.
즉, 도커를 사용하려면 리눅스는 필수이다.
VM (Virtual Machines)은 VM당 OS까지 구현하여 하드웨어 level의 가상화를 구현한다. 이는 리소스를 비교적 많이 소모한다.
컨테이너는 애플리케이션 계층에서 실행되며 HOST OS의 커널을 공유하므로 VM보다 가볍고 효율적이다.

애플리케이션을 실행하는데 필요한 모든 것을 포함하는 읽기 전용 템플릿이다. 애플리케이션 전송 및 공유에 목적이 있으며, 애프리케이션 실행에 필요한 독립적인 환경을 포함하여 공유받는 사용자로 하여금 동일한 환경에서 소프트웨어를 실행한다.
컨테이너는 이미지의 인스턴스로, 이미지를 실행한 애플리케이션이다. 컨테이너는 격리되어있어 서로 의존하지 않는다.
도커 Image와 Container를 가구에 비유할 수 있을 것 같다.
포장된 가구(Image)가 도착하여 조립(실행)될 때 까지는 사용 불가능하다. 이때 조립(실행)하여 테이블, 소파, 침대와 같이 사용 가능한 가구(Container)가 된다. 만약 이를 다른 지역으로 옮기고 싶다면, 사용하던 가구(Container)를 옮길 수 있도록 포장한다(Image).
도커 이미지를 빌드하는 방법을 정의하는 스크립트
#Dockerfile
FROM openjdk:17
COPY build/libs/*.jar docker-demo.jar
ENTRYPOINT ["java", "-jar", "docker-demo.jar"]
# 컨테이너 실행
docker start
# 컨테이너 정지
docker stop
# 이미지로부터 컨테이너 생성
docker create
# 이미지를 내려받고 컨테이너 생성해 실행(pull -> create -> start)
docker run --name apa000ex1 -d -i -p 8080:80 httpd
# 정지상태의 컨테이너 삭제
docker rm
# 실행 중인 컨테이너 내에서 프로그램 실행
docker exec
# 컨테이너 목록출력
docker ps
# 도커 컨테이너를 이미지로 변환
docker commit
# 이미지 pull
docker image pull
# 이미지 삭제
docker image rm
# 이미지 목록 출력
docker image ls
# 이미지 생성
docker images build