웹사이트 검색

Docker 컨테이너와 호스트 간에 데이터를 공유하는 방법


소개

일반적으로 Docker 컨테이너는 일시적이며 컨테이너에서 실행된 명령이 완료되는 동안 실행됩니다. 기본적으로 컨테이너 내부에서 생성된 모든 데이터는 컨테이너 내에서 컨테이너가 실행되는 동안에만 사용할 수 있습니다.

Docker 볼륨은 호스트 시스템과 Docker 컨테이너 간에 파일을 공유하는 데 사용할 수 있습니다. 예를 들어 공식 Docker Nginx 이미지를 사용하고 나중에 분석하기 위해 Nginx 로그 파일의 영구 복사본을 유지하고 싶다고 가정해 보겠습니다. 기본적으로 nginx Docker 이미지는 Docker Nginx 컨테이너 내부/var/log/nginx 디렉토리에 기록됩니다. 일반적으로 호스트 파일 시스템에서 연결할 수 없습니다.

이 자습서에서는 컨테이너 내부의 데이터를 호스트 컴퓨터에서 액세스할 수 있도록 만드는 방법을 살펴봅니다.

전제 조건

이 문서를 따르려면 다음과 같은 Ubuntu 18.04 서버가 필요합니다.

  • Ubuntu 18.04 가이드를 통한 초기 서버 설정에 따라 sudo 권한이 있는 루트가 아닌 사용자
  • Ubuntu 18.04에서 Docker를 설치 및 사용하는 방법의 1단계 및 2단계 지침에 따라 Docker가 설치되었습니다.

Docker를 처음 사용하는 경우 Docker Ecosystem 시리즈는 주요 개념에 대한 자세한 개요를 제공합니다.

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

1단계 - 볼륨 바인드마운트

다음 명령은 현재 사용자의 홈 디렉토리에 nginxlogs라는 디렉토리를 만들고 컨테이너의 /var/log/nginx에 바인드마운트합니다.

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

잠시 시간을 내어 이 명령을 자세히 살펴보겠습니다.

  • --name=nginx는 우리가 더 쉽게 참조할 수 있도록 컨테이너 이름을 지정합니다.
  • -d는 프로세스를 분리하고 백그라운드에서 실행합니다. 그렇지 않으면 빈 Nginx 프롬프트만 보고 Nginx를 종료할 때까지 이 터미널을 사용할 수 없습니다.
  • -v ~/nginxlogs:/var/log/nginx는 Nginx 컨테이너 내부에서 /var/log/nginx 디렉토리를 연결하는 bindmount 볼륨을 설정합니다. 호스트 시스템의 ~/nginxlogs 디렉토리. Docker는 :를 사용하여 컨테이너 경로에서 호스트 경로를 분할하고 호스트 경로가 항상 먼저 옵니다.
  • -p 5000:80은 포트 전달을 설정합니다. Nginx 컨테이너는 기본적으로 포트 80에서 수신 대기합니다. 이 플래그는 컨테이너의 포트 80을 호스트 시스템의 포트 5000에 매핑합니다.
  • nginx는 Nginx를 시작하기 위해 nginx -g \daemon off\ 명령을 실행하는 Nginx 이미지에서 컨테이너를 빌드하도록 지정합니다.

참고: -v 플래그는 매우 유연합니다. 구문을 약간만 조정하면 볼륨을 바인드마운트하거나 이름을 지정할 수 있습니다. 첫 번째 인수가 / 또는 ~/로 시작하면 bindmount를 생성하는 것입니다. 그것을 제거하면 볼륨의 이름이 지정됩니다.

  • -v /path:/path/in/container는 호스트 디렉토리인 /path/path/in/container에 마운트합니다.
  • -v path:/path/in/container는 호스트와 관계가 없는 path라는 볼륨을 생성합니다.

명명된 볼륨에 대한 자세한 내용은 Docker 컨테이너 간에 데이터를 공유하는 방법을 참조하세요.

2단계 - 호스트의 데이터 액세스

이제 머신의 Docker 컨테이너 내에서 실행 중인 Nginx 사본이 있고 호스트 머신의 포트 5000은 Nginx 포트 80의 해당 사본에 직접 매핑됩니다.

서버의 IP 주소 또는 호스트 이름과 포트 번호를 사용하여 웹 브라우저에서 주소를 로드합니다: http://your_server_ip:5000. 넌 봐야 해:

더 흥미롭게도 호스트의 ~/nginxlogs 디렉토리를 보면 컨테이너의 nginx에 의해 생성된 access.log가 표시됩니다. 그러면 요청이 표시됩니다.

  1. cat ~/nginxlogs/access.log

다음과 같이 표시되어야 합니다.

Output
203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

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

결론

이 자습서에서는 컨테이너와 호스트 파일 시스템 간에 정보를 공유하기 위해 Docker 데이터 볼륨을 만드는 방법을 시연했습니다. 이는 디버깅을 위해 로그에 액세스해야 하는 개발 환경에서 유용합니다. 컨테이너 간에 영구 데이터를 공유하는 방법에 대해 자세히 알아보려면 Docker 컨테이너 간에 데이터를 공유하는 방법을 살펴보세요.