ホームページ  >  記事  >  運用・保守  >  Docker がデータボリュームテクノロジーを要約して共有

Docker がデータボリュームテクノロジーを要約して共有

WBOY
WBOY転載
2022-01-14 18:44:581702ブラウズ

この記事では、Docker によって共有されているデータ ボリューム テクノロジに関する関連知識をまとめて紹介します。

Docker がデータボリュームテクノロジーを要約して共有

#Docker データ ボリューム テクノロジー

Docker がデータボリュームテクノロジーを要約して共有

##コンテナ データ ボリュームとはDocker の概念レビュー

アプリケーションと環境をミラーにパッケージ化します。 ######データ?データがコンテナ内にある場合、コンテナを削除するとデータが失われます。要件: データを永続化できる

MySQL. コンテナを削除するとデータベースが削除されて暴走します ---> 要件: MySQL データをローカルに保存できること!

コンテナ間でデータ共有テクノロジが存在する可能性があります。 Dockerコンテナ内で生成されたデータはローカルに同期されます。

これがロールテクノロジーです!ディレクトリのマウント。コンテナ内のディレクトリを Linux× にマウントします。

概要: コンテナーの永続化と同期操作!コンテナ間でのデータ共有も可能!

Docker がデータボリュームテクノロジーを要約して共有

データ ボリュームの使用

docker run -it -v 宿主机目录: 容器目录 -p 主机端口:容器端口 容器id
実践的な演習検査して同期の詳細を表示

コンテナ内にファイルを作成し、それがローカル フォルダに同期されているかどうかを確認します。

Docker がデータボリュームテクノロジーを要約して共有

コンテナが閉じたら、ローカル ファイルを変更して、変更 ファイルはコンテナに同期されますか?

Docker がデータボリュームテクノロジーを要約して共有

Docker がデータボリュームテクノロジーを要約して共有Mysql の実戦

コマンド

docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
パラメータ

-d バックグラウンド操作

-p ポートマッピング

-v データボリュームのマウント: データの同期

-e 環境変数の設定: MySQL ログイン パスワードはここに設定されます

--name コンテナ名

##テスト結果: 接続成功

Docker がデータボリュームテクノロジーを要約して共有

発生した問題

最初に使用した mysql の最新バージョン: 8.0----navicat を使用して接続すると、常に不可解なエラーが報告されますDocker がデータボリュームテクノロジーを要約して共有

解決策: バージョン 5.7 に切り替えます。問題ありません。

ミラー mysql を実行するとき、パスワードを設定するために -e MYSQL_ROOT_PASSWORD=123456 を追加しません。コンテナは再起動されても常に閉じられます。オンになります

-e MYSQL_ROOT_PASSWORD=123456 パラメータを追加して完全にオンにします

コンテナを削除しても、ローカルにマウントしたデータ ボリュームは失われません。これにより、コンテナ データの永続化機能が実現されます。

#名前付きマウントと匿名マウント

#匿名マウント ##- v コンテナー内のパス!

docker run -d --name nginx01 -v /etc/nginx nginx

ここで、これが匿名マウントであることがわかりました。-v の後にコンテナ内のパスを記述しただけで、コンテナの外のパスは記述しませんでした。すべての状況を表示するボリューム

docker volume ls

Named mount

Docker がデータボリュームテクノロジーを要約して共有-v マウントされたボリュームの名前: コンテナ内のパス

docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx nginx

ここでは、これが匿名マウントであることがわかります。-v の後にコンテナ内のパスを記述します。コンテナの外にはパスはありませんが、名前はあります #Docker のコンテンツ ディレクトリ:/var/lib/docker

Docker コンテナ内のすべてのボリュームは、ディレクトリが指定されていない場合、次の場所にあります:/var/lib/docker/volume /xx/_data

名前付きマウントを使用すると、ボリュームの 1 つを簡単に見つけることができます。ボリュームを使用するときに最も一般的に使用される方法は、名前付きマウントです。

Docker がデータボリュームテクノロジーを要約して共有

追加知識

名前付きマウントと匿名マウントの区別方法、マウント先のパスを指定する方法Docker がデータボリュームテクノロジーを要約して共有

-v コンテナ内のパス # 匿名マウント

-v ボリューム名: コンテナ内のパス #Named mount-v /コンテナ外のパス: コンテナ内のパス #パスを指定 mount

Extension

-vコンテナ内のパス: ro rw 読み取りおよび書き込み権限の変更

ro readonly 読み取り専用

rw readwrite 読み取り可能および書き込み可能

一旦设置了这个容器权限,容器对我们挂载出来的内容就有限定了

docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:ro nginx
docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:rw nginx

Ro 只要看到ro就说明这个路径只能通过宿主机来进行操作,容器内是无法操作的!

初识Dockerfile

dockerfile

dockerfile就是用来构建docker镜像文件的!命令脚本!先体验一下

通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!

写一个dockerfile

# 创立一个dockerfile文件,名字可以随便的取,最好叫做dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volme01","volume02"]
CMD echo "--------end----------"
CMD /bin/bash
#这里每个指令就是镜像的一层

使用dockerfile生成镜像

docker build -f dockerfile文件位置 -t 镜像名称和版本 镜像生成的位置

Docker がデータボリュームテクノロジーを要約して共有

进入镜像查看详情

Docker がデータボリュームテクノロジーを要約して共有

查看卷的同步目录

docker ps -a

docker inspect 容器id

Docker がデータボリュームテクノロジーを要約して共有

最后测试两个文件夹中是不是同步

同步成功

总结

使用dockerfile构建镜像的方式在我们未来的使用中非常的多,因为我们通常会构建自己的镜像

假设构建镜像时候没有挂载卷,要手动镜像挂载-v

数据卷容器

实际上即使保证的容器之间的数据共享的问题

Docker がデータボリュームテクノロジーを要約して共有

数据卷容器实际上就是被拷贝数据的容器(A- volumes-from ->B,B是数据卷容器)

测试两个镜像之间同步

首先先开三个容器

创建docker01

Docker がデータボリュームテクノロジーを要約して共有

创建docker02  --volumes-from docekr01

Docker がデータボリュームテクノロジーを要約して共有

创建docker03  --volumes-from docekr02

Docker がデータボリュームテクノロジーを要約して共有

查看docker01和docker03之间的数据共享

Docker がデータボリュームテクノロジーを要約して共有

接着我们将docker02删除,查看docker01和docker03之间的数据共享

Docker がデータボリュームテクノロジーを要約して共有

总结:

Docker がデータボリュームテクノロジーを要約して共有

实现多个mysql之间的数据共享

  docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
  docker run -d -p 3310:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 --name 
  mysql02 mysql:5.7

总结:

容器之间配置信息的传递。数据卷容器的声明周期一直持续到没有容器使用位置

理解:容器之间只要是共享就会数据copy,即使有的容器被删除,数据依然存在,直到所有共享 的容器都删除,数据才会被彻底删除

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。

推荐学习:《docker视频教程

以上がDocker がデータボリュームテクノロジーを要約して共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。