この記事では、Docker によって共有されているデータ ボリューム テクノロジに関する関連知識をまとめて紹介します。
#Docker データ ボリューム テクノロジー
##コンテナ データ ボリュームとはDocker の概念レビュー
アプリケーションと環境をミラーにパッケージ化します。 ######データ?データがコンテナ内にある場合、コンテナを削除するとデータが失われます。要件: データを永続化できる
MySQL. コンテナを削除するとデータベースが削除されて暴走します ---> 要件: MySQL データをローカルに保存できること!
コンテナ間でデータ共有テクノロジが存在する可能性があります。 Dockerコンテナ内で生成されたデータはローカルに同期されます。
これがロールテクノロジーです!ディレクトリのマウント。コンテナ内のディレクトリを Linux× にマウントします。
概要: コンテナーの永続化と同期操作!コンテナ間でのデータ共有も可能!データ ボリュームの使用
docker run -it -v 宿主机目录: 容器目录 -p 主机端口:容器端口 容器id
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 コンテナ名
##テスト結果: 接続成功
発生した問題
最初に使用した mysql の最新バージョン: 8.0----navicat を使用して接続すると、常に不可解なエラーが報告されます
解決策: バージョン 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
-v マウントされたボリュームの名前: コンテナ内のパス
docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx nginx
ここでは、これが匿名マウントであることがわかります。-v の後にコンテナ内のパスを記述します。コンテナの外にはパスはありませんが、名前はあります #Docker のコンテンツ ディレクトリ:/var/lib/docker
Docker コンテナ内のすべてのボリュームは、ディレクトリが指定されていない場合、次の場所にあります:/var/lib/docker/volume /xx/_data
名前付きマウントを使用すると、ボリュームの 1 つを簡単に見つけることができます。ボリュームを使用するときに最も一般的に使用される方法は、名前付きマウントです。
追加知識
名前付きマウントと匿名マウントの区別方法、マウント先のパスを指定する方法
-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 ps -a
docker inspect 容器id
最后测试两个文件夹中是不是同步
同步成功
总结
使用dockerfile构建镜像的方式在我们未来的使用中非常的多,因为我们通常会构建自己的镜像
假设构建镜像时候没有挂载卷,要手动镜像挂载-v
数据卷容器
实际上即使保证的容器之间的数据共享的问题
数据卷容器实际上就是被拷贝数据的容器(A- volumes-from ->B,B是数据卷容器)
测试两个镜像之间同步
首先先开三个容器
创建docker01
创建docker02 --volumes-from docekr01
创建docker03 --volumes-from docekr02
查看docker01和docker03之间的数据共享
接着我们将docker02删除,查看docker01和docker03之间的数据共享
总结:
实现多个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 サイトの他の関連記事を参照してください。