docker(도커) 설명 (이미지, 스텍, 볼륨, 컨테이너)

yes 2023.01.15 13:50:17

NAS 또는 라즈베리파이를 사용하면서, 꼭 알아야 하는 항목이 도커, docker 입니다.
VM (virtual machine)과 비교해서 설명을 하기도 합니다.

 

가장 큰 개념은 '도커' 입니다.

그림을 보고 설명해 보겠습니다.

 

image.png.jpg

 

도커 (docker) - 모든걸 포함하는 개념입니다.

이미지 (image) - 윈도우 개념으로 설명하면, 설치하기전 '설치파일' 정도로 이해하면 됩니다.

컨테이너 (container) - 이미지를 인스톨한 상태라고 보면 됩니다. 실제 작동되는 메인 프로그램입니다. 컨테이너에는 host 의 각종 조건에 따른 변수값들이 정장됩니다. 내 입맛에 맞게 이미지를 설치했다고 볼수 있습니다.

리지스트리 (registry) - 스마트폰에서 앱스토어 정도의 개념입니다. 이곳에서 원하는 이미지를 구할 수 있습니다.

 

다음은 볼륨(volume) 에 대해서 설명해 보겠습니다.

- 볼륨은 컨테이너 실행 시, 생성되는 데이터를 저장하는 장소입니다.

 

 

 

 

image.png.jpg

 

 

 

 

image.png.jpg

 

위 그림을 보면, 볼륨도 컨테이너와 이미지 처럼 독립적으로 구성되어 있음을 알 수 있습니다.

그래서, 볼륨을 여러 컨테이너가 공유할 수도 있습니다.

볼륨과 상대되는 개념으로 바인드 마운트(bind mount)라고 있습니다.

 

바인드 마운트(bind mount)

- 볼륨과 같은 개념으로 설명됩니다. 다만, 볼륨처럼 독립적이지 않습니다. 컨테이너 데이터를 지정된 host 경로에 저장하는 방식입니다.

따라서, 볼륨은 다른 컨테이너와 공유가 가능하지만, 바인드 마운트는 그럴수 없습니다. 컨테이너에 종속된 느낌입니다.

 

이렇게 간단하게 공부해 봤습니다.

얼마전에 OMV 의 하드공간이 부족해서, 무지 상태에서 이미지와 볼륨을 지웠습니다.

그 후, OMV Web UI 에 접속도 못하고, SSH 접속도 못했습니다. 

결국 해결은 재부팅하니, 정상적으로 작동됩니다.

 

 


 

컴포우즈 (compose)

- 컨테이너 여러개를 함께 묶어서 실행 할 수 있도록 해줍니다.

- 아래 예시를 보면, 두개의 컨테이너를 묶었습니다.

version: "3"
services:
    master:
        container_name: master
        image: jenkinsci/jenkins:2.142-slim
        ports:
            - 8080:8080
        volumes:
            - ./jenkins_home:/var/jenkins_home
        links
            - slave01
    slave01:
        container_name: slave01
        image: jenkinsci/ssh-slave
        environment:
            - JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3NzaC..........

 

위 예시에서 '볼륨'의 의미를 좀더 알아보면,

- 로컬(내 호스팅컴퓨터) 와 컨테이너를 연결해 주는 역할을 합니다. (전문용어로 마운트 해준다고 합니다.)