>  기사  >  운영 및 유지보수  >  docker의 장착 방법은 무엇입니까?

docker의 장착 방법은 무엇입니까?

WBOY
WBOY원래의
2022-01-28 10:23:127235검색

방법: 1. 실행 명령을 사용합니다. 구문은 "docker run --name test1 -it -v"입니다. 2. dockerfile의 VOLUME 명령을 사용하여 마운트 지점을 생성합니다. 구문은 "VOLUME ["/data1입니다. ","/data2 "]" 3. 컨테이너 공유 볼륨을 사용합니다.

docker의 장착 방법은 무엇입니까?

이 튜토리얼의 운영 환경: linux7.3 시스템, docker-1.13.1 버전, Dell G3 컴퓨터.

docker의 마운트 방법은 무엇입니까

VOLUME 명령을 소개하기 전에 다음 시나리오 요구 사항을 살펴보겠습니다.

1 컨테이너는 이미지를 기반으로 생성되며 최종 컨테이너 파일 시스템에는 읽기- 이미지 레이어 + 가능 쓰기 레이어에서는 컨테이너의 프로세스 작업에 대한 데이터 지속성이 컨테이너의 쓰기 가능한 레이어에 저장됩니다. 컨테이너가 삭제되면 수동으로 백업하거나 컨테이너를 기반으로 새 이미지를 생성하지 않는 한 데이터는 사라집니다. 컨테이너 프로세스에서 유지되는 데이터를 호스트에 저장할 수 있나요? 이런 방식으로 컨테이너가 삭제되더라도 데이터는 그대로 유지됩니다.

2. 웹 애플리케이션을 개발할 때 개발 환경은 호스트에 로컬이지만 실행 중인 테스트 환경은 도커 컨테이너에 배치됩니다.

이 경우 호스트에서 파일(예: html, js 등)을 수정한 후 해당 파일을 컨테이너에 동기화해야 합니다. 이것은 분명히 더 문제가 됩니다.

3. 여러 컨테이너가 일련의 관련 서비스를 실행하고 싶다면 어떻게 해야 할까요?

물론 우리는 이러한 문제에 대한 다양한 해결책을 생각할 수 있습니다. Docker 자체는 호스트의 디렉터리를 컨테이너의 디렉터리(마운트 지점 또는 볼륨이라고 함)와 연결할 수 있는 메커니즘을 제공합니다. 컨테이너의 탑재 지점 아래에 있는 콘텐츠는 호스트와 유사합니다. Linux 시스템의 마운트 메커니즘. 이 경우 호스트의 디렉터리 내용을 수정하면 컨테이너를 동기화할 필요가 없으며 컨테이너에 즉시 적용됩니다. 탑재 지점은 여러 컨테이너에서 공유될 수 있습니다.

구체적인 구현 메커니즘을 소개하겠습니다.

먼저 docker run 명령을 전달합니다

1. 다음 명령을 실행합니다: docker run --name test -v /home/xqh/myimage:/data ubuntu /bin/bash

-v 플래그는 컨테이너 마운트 지점 /data(컨테이너의 디렉터리), 호스트의 /home/xqh/myimage 디렉터리 내용을 /data에 연결합니다.

이러한 방식으로 컨테이너의 /data 디렉터리에 대한 작업과 호스트의 /home/xqh/myimage에 대한 작업은 실시간으로 완전히 동기화됩니다. 왜냐하면 이 두 디렉터리가 실제로 호스트 디렉터리를 가리키기 때문입니다.

2. docker run --name test1 -it -v /data ubuntu /bin/bash 명령을 실행합니다.

위의 -v 플래그는 컨테이너의 마운트 지점만 설정하고 연결된 호스트 디렉터리를 지정하지 않습니다. 이때 docker는 자동으로 호스트의 디렉터리를 바인딩합니다. docker Inspection 명령을 통해 확인할 수 있습니다.

xqh@ubuntu:~/myimage$ docker inspect test1
[
{
    "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",
.............................
    "Mounts": [
        {
            "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",
            "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",
            "Destination": "/data",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

위 마운트 아래의 각 정보는 컨테이너의 마운트 지점 정보를 기록합니다. "Destination" 값은 컨테이너의 마운트 지점이고 "Source" 값은 해당 호스트 디렉터리입니다. 이 방법에 해당하는 호스트 디렉터리가 자동으로 생성되는 것을 볼 수 있는데, 그 목적은 호스트에서 수정하는 것이 아니라 여러 컨테이너와 공유하는 것이다.

2 dockerfile을 통해 마운트 지점 생성

위에서 설명한 docker run 명령의 -v 플래그를 통해 생성된 마운트 지점은 생성된 컨테이너에만 유효할 수 있습니다. dockerfile의 VOLUME 지시문을 통해 이미지에 탑재 지점을 만들 수 있으므로 이미지를 통해 생성된 모든 컨테이너에는 탑재 지점이 있습니다. 또 다른 차이점은 VOLUME 명령을 통해 생성된 마운트 포인트는 호스트의 해당 디렉터리를 지정할 수 없으며 자동으로 생성된다는 점이다.

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

위의 Dockfile은 VOLUME 명령을 통해 두 개의 마운트 지점 /data1 및 /data2를 지정합니다.

dockerspect를 사용하여 이 dockerfile에서 생성된 이미지로 생성된 컨테이너를 볼 수 있으며 다음 정보를 볼 수 있습니다

"Mounts": [
    {
        "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",
        "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",
        "Destination": "/data1",
        "Driver": "local",
        "Mode": "",
        "RW": true
    },
    {
        "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",
        "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",
        "Destination": "/data2",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
],

예 두 마운트 지점에 대한 정보를 확인하세요.

3개의 컨테이너 공유 볼륨(마운트 지점)

다음으로 /data1 및 /data2 볼륨을 test1(이미 생성된 컨테이너)과 공유할 수 있는 다른 컨테이너를 만듭니다. 이는 docker에서 --volumes-from 플래그를 사용하여 수행됩니다. run. 및 /data2 및 디렉터리 콘텐츠가 공유됩니다. 컨테이너가 콘텐츠를 수정하면 다른 컨테이너가 해당 콘텐츠를 얻을 수 있습니다.

네 가지 모범 사례: 데이터 컨테이너

여러 컨테이너가 데이터(예: 영구 데이터베이스, 구성 파일 또는 데이터 파일 등)를 공유해야 하는 경우 1개 이상의 볼륨이 있는 특정 데이터 컨테이너 생성을 고려할 수 있습니다.

다른 컨테이너는 –volumes-from을 통해 이 데이터 컨테이너의 볼륨을 공유합니다.

컨테이너의 볼륨은 기본적으로 호스트의 디렉터리에 해당하므로 이 데이터 컨테이너를 시작할 필요가 없습니다.

예: docker run --name dbdata myimage echo "data Container"

설명: 볼륨이 있고 컨테이너 간 데이터 공유가 더 편리하지만 권한 제어 등 해결해야 할 문제도 많습니다. , 데이터 백업, 볼륨 삭제 등 해당 내용은 후속 글에서 소개하겠습니다.

추천 학습: "

docker 비디오 튜토리얼

"

위 내용은 docker의 장착 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.