
JSP 를 이용하여 어떠한 웹사이트를 만들었다고 했을 때, 배포를 할 단계 입니다. AWS 웹 서비스를 이용해서 배포하게 되는데, 이런 호스팅 서버를 사용하면 특정한 서버 환경에 우리가 만든 웹을 맞춰서 배포를 해야하기 때문에, 다른 웹 서비스를 이용할 때마다 그에 따른 설정을 해야하고 서버마다 각각의 설정을 해야합니다.
DevOps의 등장으로 개발 주기가 짧아지면서 배포는 더 자주 이루어지게 되면서 더 자주 각각의 설정을 맞춰야했습니다. 이런 배포 및 관리를 단순하게 하기위해 Docker가 만들어졌습니다.
DevOps
애플리케이션 개발의 품질과 속도를 개선하고 신규 또는 수정된 소프트웨어 기능이나 제품의 릴리즈 주기 단축을 장려하는 새로운 철학이자 프레임 워크입니다.
Go 언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼입니다.
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다.

VM : 기존의 VM 같은 경우에 HOST OS위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS를 올려서 사용합니다. 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리됩니다.
예를 들자면, OS를 사용하고 있는데, 다른 운영체제(window)를 사용하고 싶을 때 이 VM을 사용해서 OS 전체를 가상화 하는 방식입니다. 기존 OS와 다른 Window가 독립적으로 존재하지만, Window를 사용하기 위해서는 기존 OS를 이용해야 했기 때문에 속도가 느려지고, 독립적인 OS기 때문에 설치해야할 용량 또한 큽니다.
Container : 이 VM을 사용하지않고 도커 엔진을 사용하여 동작합니다. 도커 엔진위에서 동작하기 때문에 Host의 커널을 공유합니다. 가상화하지않고 개선된 프로세스 격리 방법인 것입니다. 별도의 os사용이 필요하지않기 때문에, 성능적인 개선과 메모리 용량 또한 작아집니다.

도커에서 가장 중요한 개념은 컨테이너와 함께 이 이미지라는 개념입니다.
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지않고 변하지않습니다.(immutable)
무슨 말인지 이해하기 위해서는 밑에 이미지를 봐야합니다.

레이어 저장 방식입니다. 유네온 파일 시스템을 이요하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줍니다.
우분투 이미지를 만들기 위해서 Layer A, B, C가 들어가고
nginx 이미지를 만들기 위해서는 이미 만들어진 우분투 이미지에 nginx만 더하면 됩니다.
web app 이미지를 만들기 위해서는 우분투 이미지 + nginx 이미지 + web app을 올려 이미지를 만들게 됩니다.
컨테이너를 사용할 때도 이 레이어 방식을 사용하여, 여러 개의 컨테이너를 생성해도 일일히 다른 서버에 맞춰 새로운 걸 만들어내는게 아니라 환경에 맞춰 일부만 더함으로 분할이 가능해지는 것입니다.
예를 들면 node.js로 작성된 애플리케이션 이미지를 만들고 싶은 경우, nodejs를 기본 이미지로 삼고 내가만든 애플리케이션을 추가해 넣고, 이미지화할 수 있습니다.
도커를 컴포넌트로 분해한다면 도커 파일, 컨테이너 이미지, 도커 실행 유틸리티, 도커 허브, 도커 엔진, 도커 컴포즈, 도커 데스크톱으로 나눌 수 있습니다.
각 도커 컨테이너는 도커파일과 함께 시작합니다. 텍스트 파일은 운영체제, 언어, 환경 변수, 파일 위치, 네트워크 포트, 이를 실행하는데 필요한 여타 컴포넌트를 포함하는 도커 이미지를 구축할 수 있는 일련의 명령을 제공합니다.
VM 환경의 스냅샷과 유사한 도커 이미지는 이식 가능하고 읽기 전용의 실행 파일입니다. 컨테이너를 생성하기 위한 명령, 그리고 컨테이너가 어떤 소프트웨어 컴포넌트를 어떻게 실행할 것인가에 대한 내역이 담겨져있습니다.
도커 실행 유틸리티, 컨테이너를 시작하는 명령입니다. 각 컨테이너는 이미지 인스턴스이고, 동일 이미지의 다수의 인스턴스가 동시에 실행될 수 있습니다.
도커 허브는 컨테이너 이미지가 저장되고 공유되고 관리될 수 있는 레포지터리입니다. 컨테이너에 특화된 깃허브 도커 버전이라고 생각할 수 있씁니다.
컨테이너를 생성하고 실행하는 클라이언트-서버기술입니다. 도커 엔진은 컨테이너를 관리하는 이른바 '도커 데몬'이라는 장시간 실행되는 데몬 프로세스, 도커 데몬과 프로그램 사이의 통신을 담당하는 API, 명령줄 인터페이스를 포함합니다.
도커 컴포즈는 YAML 파일을 이용하는 명령줄 도구이고, 멀티 컨테이너 도커 애플리케이션을 정의하고 실행합니다. 사용자는 구성 환경으로부터 모든 서비스를 생성하고 시작하고 정지하고 재구축할 수 있고, 아울러 모든 실행 서비스의 현황 및 로그 출력을 열람할 수 있습니다.
이들 제반 컴포넌트는 도커 데스크톱 애플리케이션으로 래핑됩니다. 이는 컨테이너화 된 애플리케이션과 마이크로서비스를 구축하고 공유하는 사용자 친화적 방식을 제공합니다.
https://ebbnflow.tistory.com/200
https://khj93.tistory.com/entry/Docker-Docker-%EA%B0%9C%EB%85%90
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
https://richone.tistory.com/5
https://hanhyx.tistory.com/27
https://judo0179.tistory.com/14