欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker容器與宿主機(jī)的數(shù)據(jù)交互方式總結(jié)

 更新時(shí)間:2020年11月09日 09:29:54   作者:緣來釋你  
這篇文章主要給大家介紹了關(guān)于docker容器與宿主機(jī)的數(shù)據(jù)交互,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在生產(chǎn)環(huán)境中使用 Docker ,往往需要對(duì)數(shù)據(jù)進(jìn)行持久化,或者需要在多個(gè)容器之間進(jìn)行數(shù)據(jù)共享,這必然涉及容器的數(shù)據(jù)管理操作。

方式一、Docker cp命令

docker cp :用于容器與主機(jī)之間的數(shù)據(jù)拷貝。
語法
# 容器內(nèi)文件 copy to 宿主機(jī)
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
# 宿主機(jī)文件 copy to 容器內(nèi)
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS說明:
-L :保持源目標(biāo)中的鏈接

操作示例:

宿主機(jī)到容器

容器到宿主機(jī)

注:此方式雖然他也可以管理但是數(shù)據(jù)不交融,基本不會(huì)使用,僅做了解

方式二、Docker數(shù)據(jù)卷

1. 什么是volume

  想要了解Docker Volume,首先我們需要知道Docker的文件系統(tǒng)是如何工作的。Docker鏡像是由多個(gè)文件系統(tǒng)(只讀層)疊加而成。當(dāng)我們啟動(dòng)一個(gè)容器的時(shí)候,Docker會(huì)加載鏡像層并在其上添加一個(gè)讀寫層。如果運(yùn)行中的容器修改了現(xiàn)有的一個(gè)已存在的文件,那該文件將會(huì)從讀寫層下的只讀層復(fù)制到讀寫層,該文件的只讀版本仍然存在,只是已經(jīng)被讀寫層中該文件的副本所隱藏。當(dāng)刪除Docker容器,并通過該鏡像重新啟動(dòng)時(shí),之前的更改將會(huì)丟失。在Docker中,只讀層以及在頂部的讀寫層的組合被稱為Union FIle System(聯(lián)合文件系統(tǒng))。

  為了能夠保存(持久化)數(shù)據(jù)以及共享容器間的數(shù)據(jù),Docker提出了Volume的概念。簡(jiǎn)單來說,Volume就是目錄或者文件,它可以繞過默認(rèn)的聯(lián)合文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機(jī)上。

2. 數(shù)據(jù)卷的特性

• 數(shù)據(jù)卷 可以在容器之間共享和重用

• 對(duì)數(shù)據(jù)卷的修改會(huì)立馬生效

• 對(duì)數(shù)據(jù)卷的更新,不會(huì)影響鏡像

• 數(shù)據(jù)卷 默認(rèn)會(huì)一直存在,即使容器被刪除

3. 數(shù)據(jù)卷相關(guān)操作

Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes

  創(chuàng)建數(shù)據(jù)卷

Usage: docker volume create [OPTIONS] [VOLUME]
Create a volume
Options:
 -d, --driver string Specify volume driver name (default "local")
 --label list Set metadata for a volume
 -o, --opt map  Set driver specific options (default map[])

  查看所有數(shù)據(jù)卷

Usage: docker volume ls [OPTIONS]
List volumes
Aliases:
 ls, list
Options:
 -f, --filter filter Provide filter values (e.g. 'dangling=true')
 --format string Pretty-print volumes using a Go template
 -q, --quiet  Only display volume names

  查看單一或多個(gè)數(shù)據(jù)卷詳情

Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...]
Display detailed information on one or more volumes
Options:
 -f, --format string Format the output using the given Go template

  刪除單一數(shù)據(jù)卷

Usage: docker volume rm [OPTIONS] VOLUME [VOLUME...]
Remove one or more volumes. You cannot remove a volume that is in use by a container.
Aliases:
 rm, remove
Options:
 -f, --force Force the removal of one or more volumes

  刪除所有閑置數(shù)據(jù)卷

Usage: docker volume prune [OPTIONS]
Remove all unused local volumes
Options:
 --filter filter Provide filter values (e.g. 'label=<label>')
 -f, --force  Do not prompt for confirmation

操作示例:

4. 數(shù)據(jù)卷使用

數(shù)據(jù)卷的使用,類似于 Linux 下對(duì)目錄或文件進(jìn)行 mount。

用戶可以通過docker run的--volume/-v或--mount選項(xiàng)來創(chuàng)建帶有數(shù)據(jù)卷的容器,但兩個(gè)參數(shù)不能同時(shí)使用。

大體來說,--mount更加明確和冗長(zhǎng)。最大的區(qū)別是-v語法將所有選項(xiàng)組合在一個(gè)字段中,而--mount語法將它們分離。對(duì)于新手來說建議使用--mount,因?yàn)楦菀桌斫狻?/p>

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
 --volume list   Bind mount a volume
 --volume-driver string  Optional volume driver for the container
 --volumes-from list  Mount volumes from the specified container(s)
 --mount mount   Attach a filesystem mount to the container

4.1 --volume使用詳述

  參數(shù)--volume(或簡(jiǎn)寫為-v)只能創(chuàng)建bind mount。

命令格式:
-v [[HOST-OPTIONS:]CONTAINER-DIR[:OPTIONS]]]
HOST-OPTIONS:
VOLUME_NAME(數(shù)據(jù)卷名稱)
ABSOLUTE-HOST-DIR(宿主機(jī)文件目錄絕對(duì)路徑)
ABSOLUTE-HOST-FILE(宿主機(jī)文件絕對(duì)路徑)  (為空的情況下將掛載匿名數(shù)據(jù)卷)
Options:
rw 讀寫(默認(rèn)值)
ro 只讀

4.1.1 根據(jù)數(shù)據(jù)卷名稱進(jìn)行掛載

docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [COMMAND] [ARG...]

示例:

將數(shù)據(jù)卷 my_vol 掛載到容器的/data/docker/volume/my_vol 目錄

docker run -itd --name=vol1_ubuntu -v my_vol:/data/docker/volume/my_vol ubuntu /bin/bash

注:如果數(shù)據(jù)卷my_vol 存在將直接進(jìn)行掛載,如果不存在 docker 將先自動(dòng)創(chuàng)建數(shù)據(jù)卷再進(jìn)行掛載。

4.1.2 根據(jù)宿主機(jī)文件目錄絕對(duì)路徑進(jìn)行掛載

docker run -it -v ABSOLUTE-HOST-DIR:CONTAINER-DIR IMAGE [COMMAND] [ARG...]

示例:

將宿主機(jī)文件目錄 /opt/common/docker/volumes/my_vol2 掛載到容器的/data/docker/volume/my_vol 目錄

docker run -itd --name=vol2_ubuntu -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol ubuntu /bin/bash

注:宿主機(jī)的文件目錄必須為絕對(duì)路徑。

4.1.3 根據(jù)宿主機(jī)文件絕對(duì)路徑進(jìn)行掛載

docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [COMMAND] [ARG...]

示例:

將宿主機(jī)文件 ~/.bash_history 掛載到容器的/.bash_history

docker run -itd --name=vol3_ubuntu -v ~/.bash_history:/.bash_history ubuntu /bin/bash

4.1.4 掛載匿名卷

-v 參數(shù)如果不加任何宿主機(jī)相關(guān)卷信息docker將創(chuàng)建一個(gè)匿名卷進(jìn)行掛載

docker run -itd -v CONTAINER-DIR IMAGE [COMMAND] [ARG...]

示例:

掛載匿名卷到容器的/data/docker/volume/my_vol 目錄

docker run -itd --name=vol4_ubuntu -v /data/docker/volume/my_vol ubuntu /bin/bash

4.1.5 -v綜合運(yùn)行示例如下:

docker run -itd --name=vol_ubuntu \
-v my_vol:/data/docker/volume/my_vol1:ro \
-v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol2:rw \
-v /opt/common/docker/volumes/my_vol3.txt:/data/docker/volume/my_vol3.txt \
-v /data/docker/volume/my_vol4 \
ubuntu /bin/bash

4.2 --mount 使用詳述

--mount:由多個(gè)用逗號(hào)分隔的<key>=<value>鍵值對(duì)組成,鍵的順序隨意。

命令格式:
--mount type=MOUNT-TYPE,<key>=<value>

對(duì)于--moun選項(xiàng),目前Docker提供了三種不同類型的數(shù)據(jù)卷從宿主機(jī)掛載到容器中:volume,bind,tmpfs。

  三種方式的示意圖如下所示:

4.2.1 named mount

  普通數(shù)據(jù)卷(默認(rèn)即這種類型),Docker管理宿主機(jī)文件系統(tǒng)的一部分,默認(rèn)位于 /var/lib/docker/volumes 目錄中;

--mount type=volume,source=<VOLUME-NAME>,destination=<CONTAINER-PATH>,volume-driver=<DRIVER-NAME>,volume-opt=<OPTION>=<VALUE>,readonly

<key>=<value>說明:
source:數(shù)據(jù)卷源路徑,關(guān)鍵字可以是 source 或 src,如果無此參數(shù)docker將自動(dòng)創(chuàng)建匿名卷掛載
VOLUME-NAME:數(shù)據(jù)卷名稱
destination:數(shù)據(jù)卷目標(biāo)路徑,關(guān)鍵字可以是 destination 或 dst 或 target
CONTAINER-PATH:數(shù)據(jù)卷在容器內(nèi)的掛載路徑
volume-driver:指定數(shù)據(jù)卷驅(qū)動(dòng)程序,默認(rèn)取 “l(fā)ocal”
DRIVER-NAME:驅(qū)動(dòng)名稱
volume-opt:可選項(xiàng),數(shù)據(jù)卷驅(qū)動(dòng)程序傳參選項(xiàng)
OPTION:key值
VALUE:value值
readonly:可選項(xiàng),設(shè)置數(shù)據(jù)卷以只讀權(quán)限掛載到容器內(nèi),默認(rèn)為可讀寫

 代碼示例:

docker service create --mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"' --name myservice <IMAGE> 

4.2.2bindmount

  綁定數(shù)據(jù)卷,文件或目錄掛載,意為著可以存儲(chǔ)在宿主機(jī)系統(tǒng)的任意位置;

--mount type=bind,source=<HOST-PATH>,destination=<CONTAINER-PATH>,bind-propagation=<PG-TYPE>,readonly

<key>=<value>說明:
source:數(shù)據(jù)卷源路徑,關(guān)鍵字可以是 source 或 src,且執(zhí)行掛在前確保文件或文件目錄存在否則會(huì)執(zhí)行出錯(cuò)
HOST-PATH:宿主機(jī)文件或目錄的絕對(duì)路徑
destination:數(shù)據(jù)卷目標(biāo)路徑,關(guān)鍵字可以是 destination 或 dst 或 target
CONTAINER-PATH:數(shù)據(jù)卷在容器內(nèi)的掛載路徑
bind-propagation:可選項(xiàng),
PG-TYPE:可選值rprivate, private, rshared, shared, rslave, slave.
readonly:可選項(xiàng),設(shè)置數(shù)據(jù)卷以只讀權(quán)限掛載到容器內(nèi),默認(rèn)為可讀寫即不加此參數(shù)

  *注意:Dockerfile 中不支持這種用法,這是因?yàn)?Dockerfile 是為了移植和分享用的。然而,不同操作系統(tǒng)的路徑格式不一樣,所以目前還不能支持。

 代碼示例:

docker run -d -it --name devtest --mount type=bind,source="$(pwd)"/target,target=/app --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave nginx:latest 

4.2.2 tmpfs mount

  臨時(shí)數(shù)據(jù)卷,掛載存儲(chǔ)在宿主機(jī)系統(tǒng)的內(nèi)存中,而不會(huì)寫入宿主機(jī)的文件系統(tǒng);

--mount type=tmpfs,destination=<CONTAINER-PATH>,tmpfs-size=<SIZE-VALUE>,tmpfs-mode=<MODE-VALUE>,readonly

<key>=<value>說明:
destination:數(shù)據(jù)卷目標(biāo)路徑,關(guān)鍵字可以是 destination 或 dst 或 target
CONTAINER-PATH:數(shù)據(jù)卷在容器內(nèi)的掛載路徑
tmpfs-size:可選項(xiàng),tmpfs裝載的大小(以字節(jié)為單位),Linux中默認(rèn)無限大。
SIZE-VALUE:數(shù)值
tmpfs-mode:可選項(xiàng),tmpfs的八進(jìn)制文件模式,Linux中的默認(rèn)值是“1777”。
MODE-VALUE:數(shù)值

  注:這個(gè)功能只有在Linux上運(yùn)行Docker時(shí)才可用?!?/p>

  代碼示例:

docker run -d -it --name tmptest --mount type=tmpfs,destination=/app,tmpfs-size=1024,tmpfs-mode=1770 nginx:latest

4.3 -v 與 --mount的區(qū)別

 ?。?)--mount可以支持創(chuàng)建集群服務(wù)(services)的數(shù)據(jù)卷,而-v不行。

 ?。?)進(jìn)行文件或目錄的掛載,如果掛載前不存在 -v docker會(huì)自動(dòng)創(chuàng)建,--mount 不會(huì)(會(huì)報(bào)錯(cuò))。

4.4 補(bǔ)充說明

 ?。?)(--mount基本包含了--volume的可選屬性內(nèi)容)官方建議使用--mount的方式,原文如下:

     Even though there is no plan to deprecate--volume, usage of--mountis recommended.

 ?。?)官方文檔鏈接:

    https://docs.docker.com/storage/volumes/

    https://docs.docker.com/engine/reference/commandline/service_create/

方式三、Docker數(shù)據(jù)卷容器

  數(shù)據(jù)卷容器也是一個(gè)容器,但是它的目的是專門提供數(shù)據(jù)卷給其他容器掛載,如果用戶需要在多個(gè)容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡(jiǎn)單的方式是使用數(shù)據(jù)卷容器。

1. 數(shù)據(jù)卷容器的基本使用1.1 創(chuàng)建數(shù)據(jù)卷容器

  創(chuàng)建一個(gè)數(shù)據(jù)卷容器dbdata,并在其中創(chuàng)建一個(gè)數(shù)據(jù)卷掛載到/dbdata目錄:

docker run -it -v /dbdata --name db_data ubuntu

1.2 其他容器掛載

  其他容器中使用 --volumes-from 來掛載dbdata容器中的數(shù)據(jù)卷

docker run -it --volumes-from db_data --name db1 ubuntu
docker run -it --volumes-from db_data --name db2 ubuntu

  db1、db2通過db_data來共享了數(shù)據(jù)

2. 利用數(shù)據(jù)卷容器來備份、恢復(fù)、遷移數(shù)據(jù)卷

  可以利用數(shù)據(jù)卷對(duì)其中的數(shù)據(jù)進(jìn)行進(jìn)行備份、恢復(fù)和遷移。

2.1 備份

  首先使用 --volumes-from 標(biāo)記來創(chuàng)建一個(gè)加載 dbdata 容器卷的容器,并從本地主機(jī)掛載當(dāng)前到容器的 /backup 目錄。命令如下:

sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

  容器啟動(dòng)后,使用了 tar 命令來將 dbdata 卷備份為本地的 /backup/backup.tar。

2.2 恢復(fù)

  如果要恢復(fù)數(shù)據(jù)到一個(gè)容器,首先創(chuàng)建一個(gè)帶有數(shù)據(jù)卷的容器 dbdata2。

sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

  然后創(chuàng)建另一個(gè)容器,掛載 dbdata2 的容器,并使用 untar 解壓備份文件到掛載的容器卷中。

sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

聲明:博文內(nèi)容純屬個(gè)人理解,有異議請(qǐng)點(diǎn)評(píng)

到此這篇關(guān)于docker容器與宿主機(jī)的數(shù)據(jù)交互方式總結(jié)的文章就介紹到這了,更多相關(guān)docker容器與宿主機(jī)數(shù)據(jù)交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker安裝redmine步驟

    docker安裝redmine步驟

    在本篇文章里小編給大家整理的是關(guān)于docker安裝redmine步驟和相關(guān)代碼,需要的朋友們學(xué)習(xí)下。
    2020-01-01
  • Docker使用編寫dockerfile啟動(dòng)node.js應(yīng)用

    Docker使用編寫dockerfile啟動(dòng)node.js應(yīng)用

    這篇文章主要介紹了Docker使用編寫dockerfile啟動(dòng)node.js應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解使用Docker部署MySQL(數(shù)據(jù)持久化)

    詳解使用Docker部署MySQL(數(shù)據(jù)持久化)

    這篇文章主要介紹了詳解使用Docker部署MySQL(數(shù)據(jù)持久化),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Docker中如何通過docker-compose部署ELK

    Docker中如何通過docker-compose部署ELK

    Docker?Compose適用于不同的操作系統(tǒng)和云平臺(tái),這篇文章主要介紹了Docker中如何通過docker-compose部署ELK,需要的朋友可以參考下
    2024-05-05
  • docker無法刪除鏡像報(bào)Error:?No?such?container的錯(cuò)誤問題

    docker無法刪除鏡像報(bào)Error:?No?such?container的錯(cuò)誤問題

    docker無法刪除鏡像的解決方法很簡(jiǎn)單,只需要簡(jiǎn)單三步即可完美解決docker刪除鏡像過程中,一直報(bào)Error:?No?such?container的錯(cuò)誤問題,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • docker鏡像完全卸載的操作步驟

    docker鏡像完全卸載的操作步驟

    這篇文章主要介紹了docker鏡像完全卸載的操作步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker下redis的主從配置教程詳解

    Docker下redis的主從配置教程詳解

    這篇文章主要介紹了Docker下redis的主從配置,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析

    Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析

    這篇文章主要介紹了Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 談?wù)勎覍?duì)docker的理解

    談?wù)勎覍?duì)docker的理解

    作為一種新興的虛擬化方式,Docker跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢(shì)。這篇文章給大家介紹了docker的優(yōu)勢(shì)及docker的三個(gè)基本概念,感興趣的朋友一起看看吧
    2016-10-10
  • 使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程

    使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程

    這篇文章主要給大家介紹了使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程,文中給出了詳細(xì)的解決方法,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06

最新評(píng)論