본문 바로가기

Study

[Study] 도커 & 쿠버네티스 - Lesson 5

소프트웨어의 개입 없이 서버와 로컬 컴퓨터 간에 파일을 주고 받아야 할 때 파일 복사 기능이 필요하다. 파일 복사는 컨데이너 -> 호스트, 호스트 -> 컨테이너로 양방향 모두 가능하다. 호스트 쪽 파일은 어디에 위치한 파일이라도 복사가 가능하고 컨테이너 쪽에서도 파일을 복사할 경로를 지정할 수 있다.

  1. 컨테이너로 파일을 복사하는 커맨드 예(호스트 -> 컨테이너)
    1. docker cp ${호스트 경로} ${컨테이너 이름}:${컨테이너 경로}
  2. 호스트로 파일을 복사하는 커맨드 예(컨테이너 -> 호스트)
    1. docker cp ${ 컨테이너 경로} ${호스트 이름}:${호스트 경로}

볼륨이란, 스토리지의 한 영역을 분할한 것을 말한다. 간단히 말하면 하드디스크나 SSD를 분할한 하나의 영역이다. 마운트는 연결하다. 라는 의미 그대로 대상을 운영체제 또는 소프트웨어의 관리하에 두는 일을 말한다. 예를 들어, USB 메모리를 컴퓨터에 꽂으면 띠딩하는 소리가 난 다음 폴더가 열리는데, 이것도 USB 메모리가 컴퓨터에 마운트 됐기 때문이다.

실제로 컨테이너를 사용하려면 스토리지 영역을 마운트 해야 한다. 왜냐하면 데이터가 이 스토리지에 있기 때문이다. 컨테이너를 종료해도 바로 삭제되지는 않지만 성격상 쓰고 버려야 하기 때문에 소프트웨어 업그레이드 등의 이유로 언젠가는 삭제된다. 이런 상황에서 컨테이너 속에 데이터가 있다면 컨테이너와 함게 데이터도 소멸된다. 컨테이너는 생성 및 폐기가 매우 빈번하기 때문에 매번 데이터를 옮기는 대신 처음부터 컨테이너 일부에 둔 데이터에 접근해 사용하는 것이 일반적이다. 이를 데이터 퍼시스턴시 (data persistency)라고 한다. 이 때 데이터를 두는 장소가 마운트된 스토리지 영역이다.

소트리지 마운트의 종류

  1. 볼륨 마운트: 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스키 형태로 마운트한다. 이름만으로 관리가 가능하므로 다루기 쉽지만 볼륨에 비해 직접 조작하기 어려우므로 임시 목적의 사용이나 자주 쓰지는 않지만 지우면 안 되는 파일을 두는 목적으로 많이 사용한다.
  2. 바인드 마운트: 도커가 설치된 컴퓨터의 문서 폴더 또는 바탕화면 폴더 등 도커 엔진에서 관리하지 않는 영역의 기존 디렉터리를 컨테이너에 마운트하는 방식이다. 디렉터리가 아닌 파일 단위로도 마운트가 가능하다. 폴더(디렉터리) 속에 파일을 직접 두거나 열어볼 수 있기 때문에 자주 사용하는 파일을 두는 데 사용한다.

스토리지 영역을 마운트하는 커맨드

  • 어느 마운트 방식을 사용하든 스토리지 마운트는 run 커맨드의 옵션 형태로 지정한다. 마운트하려는 스토리지의 경로가 컨테이너 속 특정 경로와 연결되도록 설정하는 형태이며, 스토리지 영역을 만드는 방법은 다음과 같다.
  1. 볼륨 생성(볼륨 마운트): docker volume create ${볼륨 이름}
  2. 볼륨 삭제(볼륨 마운트): docker volume rm ${볼륨 이름}

컨테이너로 이미지를 만드는 방법

  • 이미 존재하는 컨테이너를 이용하면 누구나 쉽게 이미지를 만들 수 있다. 나만의 이미지를 만들어 똑같은 구성의 컨테이너를 대량으로 만들 수 있고 다른 컴퓨터 또는 서버에 이동 시킬 수도 있으며 다음과 같이 두 가지 방법이 있다.
  1. commit 커맨드로 기존 컨테이너를 이미지로 변환하는 방법: 컨테이너를 준비하고 컨테이너를 이미지로 변환한다. 컨테이너만 있으면 명령어 한 번으로 이미지를 만들 수 있어 간편하지만 컨테이너를 먼저 만들어야 한다. 기존 컨테이너를 복제하거나 이동해야 할 때 편리하다. 자주 사용하는 커맨드 예시로는 docker commit ${컨테이너 이름} ${새로운 이미지 이름} 과 같이 사용한다.
  2. Dockerfile 스크립트로 이미지를 만드는 방법: dockerfile 스크립트를 작성하고 이 스크립트를 빌드해 이미지를 만드는 방법으로 이미지를 만드는 것 밖에 할 수 없다. Dockerfile 스크립트에는 토대가 될 이미지나 실행할 명령어 등을 기재한다. 편집은 메모장 같은 텍스트 에디터를 사용한다. 자주 사용하는 커맨드 예시로는 docker build -t ${생성할 이미지 이름} ${재료 폴더 경로} 와 같이 사용한다.

컨테이너는 먼저 이미지로 변환하지 않으면 옮기거나 복사할 수 없다. 하지만 이미지 역시 이미지 상태 그대로는 옮기거나 복사할 수 없으므로 도커 레지스트리를 통하거나 save 커맨드를 사용해 tar 포맷으로 도커 엔진의 관리 영역 밖으로 내보내야 한다. 파일은 호스트 컴퓨터의 파일 시스템에 생성된다. 파일을 다시 도커 엔진에 가져오려면 load 커맨드를 사용한다.

tar 팡리 생성 예: docer save -o ${파일 이름}.tar ${이미지 이름}

컨테이너 개조 방법

  1. 파일 복사와 마운트를 이용하는 방법
  2. 컨테이너에서 리눅스 명령어를 실행하는 방법