docker

Docker(도커) 에 관하여 ...

빈콩님 2022. 6. 10. 13:49

출처 - 도커 공홈

Docker란?

Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼. 

도커(docker)는 소프트웨어를 컨테이너(container)라는 표준화된 유닛으로 패키징함.

이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함됨.

즉, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 환경에 구애받지 않고 애플리케이션을 신속하게 배포, 확장 및 관리할 수 있게 해 줌.

기존엔 새로운 os에 똑같이 설치하고 설정해야 하는데 도커를 사용하면 컨테이너만 있으면 됨. 멍간편;;

이렇게 생성된 컨테이너는 백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립 PC, AWS, Azure, Google cloud 등 어디에서든 실행할 수 있음.

 

Container란?

Host OS 상에서 리소스를 논리적으로 구분하여 마치 별도의 서버인 것처럼 사용할 수 있게 하는 기술.

ㄴ 이게 먼 말임? ㅋㅋㅋ 말이 왜케 어렵냐 걍 os에 톰캣 설치 안 하고 도커 이미지로 프로젝트 띄우는 걸 컨테이너라고 함.

 

Image란?

컨테이너 실행에 필요한 파일과 설정값을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않음.

서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 거.

 

Volume이란?

- 파일들을 컨테이너로 복사하지 않고 참조하도록 설정하는 것.
- docker는 기본적으로 컨테이너를 삭제하면 데이터가 삭제되므로(휘발성) 데이터를 보존하고 싶을 때 혹은 여러 컨테이너 간에 데이터를 공유해서 사용하고 싶을 때 적용하면 됨.

- 도커는 컨테이너 안의 파일 변경 사항을 UnionFS(는 이미지 layer와 wirte later를 합쳐서 컨테이너를 관리함)를 통해 관리하는데 컨테이너 삭제 시 write layer도 삭제됨.

→ write layer에는 이미지 layer의 데이터에서 변경된 사항을 저장함 그래서 write layer 삭제 시 데이터 사라짐 으악 (데이터 휘발성)

- container의 데이터 때문에 데이터를 container가 아닌 호스트에 저장할 때, container끼리 데이터를 공유할 때 Volume를 사용

- 데이터 휘발성땜에 데이터를 호스트에 저장할 때 또는 container끼리 데이터 공유할 때 Volume사용

 

볼륨 종류 (정확히 하면 바인드 마운트랑 볼륨이랑 다른 개념)

  • Bind Mount: 호스트 환경의 특정 경로를 컨테이너 내부 볼륨 경로와 연결하여 마운트 한다. 이 방법은 보안에 영향을 미칠 수도 있다고, 홈페이지에서 경고하고 있긴 함;;
  • Volume (가장 일반적): 도커 볼륨은 도커 컨테이너에서 도커 내부에 도커 엔진이 관리하는 볼륨을 생성하는 것이다. 생성된 볼륨은 호스트 디렉터리의 /var/lib/docker/volumes 경로에 저장되며, 도커를 사용하여 관리가 용이하다.
  • tmpfs Mount: 이 방법은 리눅스에서 도커를 실행하는 경우에만 사용할 수 있는 기능이라고 함. 호스트의 파일 시스템이 아닌, 메모리에 저장하는 방식을 사용.

볼륨 vs 바인드 마운트

볼륨과 바인드 마운트의 가장 큰 차이점은 docker가 해당 마운트 포인트를 관리하냐 안 하냐이다. 볼륨을 사용할 땐 우리가 직접 볼륨을 생성/ 삭제해야 하는 불편함이 있지만, 해당 볼륨은 docker 상에서 컨테이너와 비슷한 방식으로 관리가 되는 이점이 있음,

그래서 볼륨 사용을 권장함. 하지만 컨테이너화 된 로컬 개발 환경을 구성할 때는 바인드 마운트가 더 유리할 수도????

로컬에서 개발을 할 때는 일반적으로 현재 작업 디렉터리에 프로젝트 저장소를 git clone 받아놓고 코드를 변경함. 따라서 바인드 마운트를 이용해서 해당 디렉터리를 컨테이너의 특정 경로에 마운트 해주면 코드를 변경할 때마다 변경 사항을 실시간으로 컨테이너를 통해 확인할 수 있음. 반대로 컨테이너를 통해 변경된 부분도 현재 작업 디렉터리에도 반영이 돼서 편함.

 

볼륨이 바인드 마운트보다 좋은 점

  1. 백업하거나 이동시키기 쉽다.
  2. docker CLI 명령어로 볼륨을 관리할 수 있다.
  3. 볼륨은 리눅스, 윈도우 컨테이너에서 모두 동작한다.
  4. 컨테이너 간에 볼륨을 안전하게 공유할 수 있다.
  5. 볼륨 드라이버를 사용하면 볼륨의 내용을 암호화하거나 다른 기능을 추가할 수 있다.
  6. 새로운 볼륨은 컨테이너로 내용을 미리 채울 수 있다.

Mount(마운트)란?

디렉터리 연결하는 걸 말함.

 

줄줄이 소시지처럼 글만 줄줄 써버렸넹 ..

'docker' 카테고리의 다른 글

Docker(도커) 명령어 모음집  (0) 2022.06.10