웹사이트 검색

Ubuntu 14.04에서 Docker 데이터 볼륨으로 작업하는 방법


소개

이 기사에서는 Docker 데이터 볼륨의 개념, 즉 볼륨의 정의, 유용한 이유, 다양한 유형의 볼륨, 사용 방법 및 각각의 사용 시기를 살펴보겠습니다. 또한 docker 명령줄 도구를 통해 Docker 볼륨을 사용하는 방법에 대한 몇 가지 예를 살펴보겠습니다.

기사가 끝날 때쯤이면 모든 종류의 Docker 데이터 볼륨을 만들고 사용하는 데 익숙해질 것입니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 우분투 14.04 물방울
  • sudo 권한이 있는 루트가 아닌 사용자(Ubuntu 14.04의 초기 서버 설정에 설정 방법이 설명되어 있음)
  • Ubuntu 14.04에서 Docker Compose를 설치하고 사용하는 방법의 1단계 지침에 따라 설치된 Docker

참고: 전제 조건에서 Ubuntu 14.04에 Docker를 설치하기 위한 지침을 제공하지만 이 문서의 Docker 데이터 볼륨에 대한 docker 명령은 Docker가 설치되어 있는 한 다른 운영 체제에서 작동해야 합니다.

Docker 컨테이너 설명

Docker로 작업하려면 꽤 많은 Docker 관련 개념을 이해해야 하며 대부분의 설명서는 이러한 도구를 사용하려는 이유에 대한 많은 설명 없이 Docker의 도구 집합을 사용하는 방법을 설명하는 데 중점을 둡니다. Docker를 처음 사용하는 경우 혼란스러울 수 있으므로 몇 가지 기본 사항을 살펴본 다음 Docker 컨테이너 작업으로 넘어갑니다. 이전에 Docker로 작업한 적이 있고 데이터 볼륨을 시작하는 방법을 알고 싶다면 다음 섹션으로 건너뛰십시오.

Docker 컨테이너는 가상 머신과 유사합니다. 기본적으로 컨테이너 내에서 사전 패키징된 "Linux 상자\를 실행할 수 있습니다. Docker 컨테이너와 일반적인 가상 머신의 주요 차이점은 Docker가 일반 가상 머신만큼 주변 환경과 격리되어 있지 않다는 것입니다. . Docker 컨테이너는 호스트 운영 체제와 Linux 커널을 공유하므로 가상 머신처럼 "부팅\할 필요가 없습니다.

많은 것이 공유되기 때문에 Docker 컨테이너를 시작하는 것은 빠르고 저렴한 작업입니다. 명령줄 프로그램. 이는 복잡한 시스템을 훨씬 더 쉽고 모듈식으로 배포할 수 있기 때문에 훌륭하지만 일반적인 가상 머신 접근 방식과는 다른 패러다임이며 가상화 세계에서 온 사람들에게는 예상치 못한 부작용이 있습니다.

Docker 데이터 볼륨 유형 학습

Docker 데이터 볼륨에는 세 가지 주요 사용 사례가 있습니다.

  1. 컨테이너 제거 시 데이터 유지
  2. 호스트 파일 시스템과 Docker 컨테이너 간에 데이터 공유
  3. 다른 Docker 컨테이너와 데이터 공유

세 번째 경우는 좀 더 고급이므로 이 튜토리얼에서는 다루지 않겠지만 처음 두 가지는 매우 일반적입니다.

첫 번째(가장 간단한) 경우에는 컨테이너를 제거하더라도 데이터가 유지되기를 원하므로 Docker가 데이터가 저장되는 위치를 관리하도록 하는 것이 가장 쉬운 경우가 많습니다.

데이터 지속성 유지

Docker에서 "데이터 볼륨\을 직접 생성할 수 있는 방법이 없으므로 대신 볼륨이 연결된 데이터 볼륨 컨테이너를 생성합니다. 그런 다음 이 데이터에 연결하려는 다른 모든 컨테이너에 대해 볼륨 컨테이너에서 Docker의 --volumes-from 옵션을 사용하여 이 컨테이너에서 볼륨을 가져오고 현재 컨테이너에 적용합니다. 언뜻 보기에 다소 이례적이므로 간단한 예를 통해 실행해 보겠습니다. 이 접근 방식을 사용하여 컨테이너가 제거되더라도 byebye 파일을 유지하는 방법에 대해 설명합니다.

먼저 볼륨을 저장할 새 데이터 볼륨 컨테이너를 만듭니다.

docker create -v /tmp --name datacontainer ubuntu

이것은 ubuntu 이미지를 기반으로 /tmp 디렉토리에 datacontainer라는 이름의 컨테이너를 생성했습니다.

이제 --volumes-from 플래그를 사용하여 새 Ubuntu 컨테이너를 실행하고 앞에서 했던 것처럼 bash를 다시 실행하면 /tmp 디렉토리는 datacontainer 컨테이너의 /tmp 볼륨에 저장됩니다.

먼저 ubuntu 이미지를 시작합니다.

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

-t 명령줄 옵션은 컨테이너 내부에서 터미널을 호출합니다. -i 플래그는 연결을 대화식으로 만듭니다.

ubuntu 컨테이너에 대한 bash 프롬프트에서 /tmp에 파일을 만듭니다.

  1. echo "I'm not going anywhere" > /tmp/hi

계속해서 exit를 입력하여 호스트 시스템의 셸로 돌아갑니다. 이제 동일한 명령을 다시 실행합니다.

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

이번에는 hi 파일이 이미 있습니다.

  1. cat /tmp/hi

넌 봐야 해:

Output of cat /tmp/hi
I'm not going anywhere

원하는 만큼 --volumes-from 플래그를 추가할 수 있습니다(예: 여러 데이터 컨테이너의 데이터를 사용하는 컨테이너를 조합하려는 경우). 원하는 만큼 데이터 볼륨 컨테이너를 생성할 수도 있습니다.

이 접근 방식에 대한 유일한 주의 사항은 데이터 볼륨 컨테이너를 생성할 때 컨테이너 내부의 마운트 경로(예제에서는 /tmp)만 선택할 수 있다는 것입니다.

호스트와 Docker 컨테이너 간의 데이터 공유

Docker 컨테이너의 다른 일반적인 용도는 호스트 시스템과 Docker 컨테이너 간에 파일을 공유하는 수단입니다. 이것은 마지막 예제와 다르게 작동합니다. "데이터 전용\ 컨테이너를 먼저 생성할 필요가 없습니다. Docker 이미지의 컨테이너를 실행하고 해당 디렉터리 중 하나를 호스트 시스템의 디렉터리 내용으로 재정의하면 됩니다.

빠른 실제 사례로 공식 Docker Nginx 이미지를 사용하고 싶지만 나중에 분석하기 위해 Nginx 로그 파일의 영구 복사본을 유지하고 싶다고 가정해 보겠습니다. 기본적으로 nginx Docker 이미지는 /var/log/nginx 디렉토리에 기록되지만 이는 Docker 내부의 /var/log/nginx입니다. Nginx 컨테이너. 일반적으로 호스트 파일 시스템에서 연결할 수 없습니다.

로그를 저장할 폴더를 만든 다음 공유 볼륨이 있는 Nginx 이미지의 복사본을 실행하여 Nginx가 파일 내부의 /var/log/nginx 대신 호스트의 파일 시스템에 로그를 기록하도록 합시다. 컨테이너:

  1. mkdir ~/nginxlogs

그런 다음 컨테이너를 시작합니다.

  1. docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 -i nginx

run 명령은 지금까지 사용한 명령과 약간 다르므로 조각별로 나누어 보겠습니다.

  • -v ~/nginxlogs:/var/log/nginx — Nginx 컨테이너 내부의 /var/log/nginx 디렉토리를 ~/nginxlogs 디렉토리에 있습니다. Docker는 :를 사용하여 컨테이너 경로에서 호스트 경로를 분할하며 호스트 경로가 항상 먼저 옵니다.\n
  • -d — 프로세스를 분리하고 백그라운드에서 실행합니다. 그렇지 않으면 빈 Nginx 프롬프트만 보고 Nginx를 종료할 때까지 이 터미널을 사용할 수 없습니다.\n
  • -p 5000:80 — 포트 전달을 설정합니다. Nginx 컨테이너는 기본적으로 포트 80에서 수신 대기하며 이는 Nginx 컨테이너의 포트 80을 호스트 시스템의 포트 5000에 매핑합니다.\n

세심한 주의를 기울였다면 이전 run 명령과 다른 한 가지 차이점을 발견했을 수도 있습니다. 지금까지 우리는 모든 run 문(보통 /bin/bash) 끝에 명령을 지정하여 컨테이너 내부에서 실행할 명령을 Docker에 알려 주었습니다. Nginx 이미지는 공식 Docker 이미지이므로 Docker 모범 사례를 따르고 이미지 작성자는 Nginx를 자동으로 시작하는 명령을 실행하도록 이미지를 설정합니다. 일반적인 /bin/bash를 여기에 드롭하고 이미지 작성자가 컨테이너에서 실행할 명령을 선택하도록 할 수 있습니다.

이제 머신의 Docker 컨테이너 내에서 Nginx 사본이 실행되고 호스트 머신의 포트 5000이 Nginx의 포트 80 사본에 직접 매핑됩니다. curl을 사용하여 빠른 테스트 요청을 수행해 보겠습니다.

curl localhost:5000

Nginx가 시작되어 실행 중임을 보여주는 Nginx의 HTML 화면이 다시 표시됩니다. 하지만 더 흥미롭게도 호스트 시스템의 ~/nginxlogs 폴더를 살펴보고 access.log 파일을 보면 Nginx의 로그 메시지가 표시됩니다. 우리의 요청을 보여주는:

cat ~/nginxlogs/access.log

다음과 유사한 내용이 표시됩니다.

Output of `cat ~/nginxlogs/access.log`
172.17.42.1 - - [23/Oct/2015:05:22:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"

~/nginxlogs 폴더를 변경하면 Docker 컨테이너 내부에서도 실시간으로 확인할 수 있습니다.

결론

그것으로 요약됩니다! 이제 호스트 파일 시스템과 Docker 컨테이너 간에 폴더를 공유하는 방법뿐만 아니라 다른 컨테이너에 데이터를 유지하는 방법으로 사용할 수 있는 볼륨이 있는 데이터 볼륨 컨테이너를 만드는 방법을 다루었습니다. 이것은 Docker 데이터 볼륨과 관련하여 가장 진보된 사용 사례를 제외한 모든 것을 다룹니다.

Docker Compose를 사용하는 경우 docker-compose.yml 파일에서 Docker 데이터 볼륨을 구성할 수 있습니다. 자세한 내용은 Ubuntu 14.04에서 Docker Compose를 설치하고 사용하는 방법을 확인하십시오.

행운과 행복한 Dockering!