도커 이미지(Docker image)
도커에서 서비스 운영에 필요한 서버 프로그램,소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 도커 디자인(Docker image)라고 합니다.
→ 이미지는 컨테이너 실행에 필요한 모든 설정값(환경)이나 종속성들을 가지고 있는 상태의 파일
도커 컨테이너를 만들기 위한 템플릿이라고 생각하면 편함
- 하나의 이미지는 여러 컨테이너 생성 가능,컨테이너가 삭제 되어도 이미지는 변하지않음
- 도커 이미지들은 github와 유사한 서비스인 DockerHub를 통해 버전 관리 및 배포가 가능합니다
- 다양한 API가 제공되어 원하는 만큼 자동화가 가능합니다.
-> 저번에 프로젝트 하면서 깃허브에 코드 올리니까 자동으로 배포 됐던게 이거
- 도커는 Dockerfile이라는 파일로 이미지를 만듭니다. Dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하게 쉽도록 명시합니다.
- 여러 이미지들을 layer로 쌓아서, 원하는 형태의 이미지를 만들 수 있습니다.
ex) ubuntu 이미지에, apache 웹서버 이미지를 얹어서, 웹서버 이미지를 만들 수 있습니다.
레이어(Layer)
레이어란?
-> 기존 이미지에 추가적인 파일이 필요할 때 다시 다운받는 방법이 아닌 해당 파일을 추가하기 위한 개념입니다.
이미지는 여러개의 읽기 전용(read only)layer로 구성되고, 파일이 추가되면 새로운 layer가 생성됩니다. 그래서 도커는 여러 개의 layer를 묶어서 하나의 파일시스템으로 사용할 수 있게 해줍니다.
도커 컨테이너(Docker Container)
도커 컨테이너란?
도커 컨테이너는, 도커 이미지를 실행한 상태를 의미합니다. 즉 이미지의 인스턴스(자원)이며, 프로그램을 실행합니다.
응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술입니다.
- 종속성 : 그 프로그램이 실행되기 위해 '반드시 필요한 다른 프로그램이나 라이브러리(재료)'들을 뜻합니다.
- 컨테이너는 이미지 layer에 읽기/쓰기 layer를 추가하는 것으로 생성/실행됩니다.
따라서 여러개의 컨테이너를 생성해도 최소한의 용량만 사용됩니다.
- 컨테이너는 종료되었다고해서 메모리에서 삭제되지 않고 남아있습니다. 삭제하려면 명시적을 삭제해야 합니다 즉 종료가 되어도 컨테이너 & 읽기/쓰기 layer 또한
그대도 존재하기 떄문에 다시 시작할 수 있습니다.
- 컨테이너를 삭제했다는 것은 컨테이너에서 생성한 파일이 모두 사란진다는 것 입니다.
- 한 서버는 여러 개의 컨테이너를 가져도 당연히 상관없으면,컨테이너는 각각 독립적으로 실행됩니다.
- 컨테이너는 커널 공간과 호스트OS자원(시스템 콜)을 공유합니다.
Dockerfile로 프로그램을 실행하는데 필요한 모든 설정이나 종속성들을 갖고 있는 Docker Imange를 만들고(빌드하고),
Docker Image가 여러 개의 Docker Container를 생성한다고 보면 됩니다.