Docker란?
컨테이너 기반의 오픈소스 가상화 플랫폼이다.
여기서 컨테이너란 다양한 OS에 여러 application이 올려져 있는 것으로 아래의 이미지로 연상해보면 된다.
즉 이런 컨테이너들을 도커위에 올려서 하드웨어를 분리하지 않고 하나의 머신 위에서 동작하고 OS커널도 공유한다.
그렇다면 기존의 가상화 방식인 Virtual Machines과 차이점은 무엇일까?
기존의 VM방식은 주로 Hypervisior을 통해 각 독립된 커널 공간을 가진 OS를 생성하여 환경을 만들어준다.
하지만 Containers의 경우 커널 공간을 공유하여 같은 가상화 기능을 제공하기에 더 가볍고 속도가 빠르다.
Docker는 기능별로 컨테이너를 만들어서 올리기에 잘게 쪼개져있어서 프로그램 에러시 코드 전체를 내리고 수정할 필요 없이 컨테이너 하나만 수정하여 다시 올리면 된다. 즉 유지보수가 좋다는 것이 큰 장점이라고 한다.
IMSGE 란?
docker에서 가장 중요한 개념 중 또다른 하나는 이미지라는 개념이다.
이미지는 컨테이너 실행에 필요한 파일들과 설정값들을 포함하고 있는것으로 특정 프로세스를 실행하기 위한 환경이라고 생각하면 된다.
컨테이너의 상태가 바뀌거나 삭제되더라고 이미지는 변하지 않고 그대로 남아있다.
새로운 서버가 추가되어도 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하면 된다.
Docker hub
이미지의 용량이 크기 때문에 이런 공개 이미지를 Docker hub에서 무료로 관리해준다. 누구나 쉽게 이미지를 만들고 배포할 수 있다.
여기에 공개된 이미지를 다운받아 사용하거나 Docker registry 저장소를 직접 만들어서 관리할 수 있다.
Dockerfile
필요한 패키지를 설치하고 동작하기 위한 자신만의 설정을 담은 파일로 쉽게 생각하면 Makefile과 비슷하다고 생각하면 될것같다.
이 파일로 이미지를 생성 즉 빌드를 하는데 도커 명령어를 순서에 따라 빌드하며 이미지가 계층적으로 하나씩 쌓이며 생성되어 layer구조를 보인다.
참고 자료
nakyungim.tistory.com/2
velog.io/@hidaehyunlee/ftserver-%EC%84%A0%ED%96%89%EC%A7%80%EC%8B%9D-Docker-Debian-Buster-Nginx-