Dockerデータ量とDockerFileの学習

Dockerデータ量とDockerFileの学習

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

データボリュームとは

データ ボリュームは、ホスト マシン内のディレクトリまたはファイルです。データ ボリュームの設計目的は、コンテナーのライフ サイクルから完全に独立したデータの永続性です。したがって、コンテナが削除されても、Docker はマウントされたデータ ボリュームを削除しません。コンテナディレクトリとデータボリュームディレクトリがバインドされると、相手側への変更が即座に同期されます。データ ボリュームは複数のコンテナーによって同時にマウントすることができ、コンテナーも複数のデータ ボリュームとともにマウントできます。

データ ボリュームはコンテナー間で共有および再利用でき、ローカルとコンテナー間のデータ転送がより効率的になります。

データ ボリュームへの変更はすぐに有効になり、コンテナー内とローカル ディレクトリの両方で変更できます。

データ ボリュームの更新はイメージに影響を与えず、データとアプリケーションを分離できます。

ボリュームは、コンテナーが使用しなくなるまで存続します。

実際、コンテナとホストが互いに分離されているため、前回の記事で説明したポート マッピングと非常によく似ていることは理解しにくいことではありません。ポート マッピングは、2 つの分離されたエンティティ間にチャネルを構築し、通信を共有できるようにします。データ ボリュームについても同様ですが、コンテナの停止によってデータ ボリュームが消えることはありません。コンテナまたはホストがバインドされている限り、データ ボリュームの内容は失われません。

データ量

1. ホストディレクトリにマウントするための直接コマンド

1. nginxをテストする

 docker run -v ホストディレクトリ: コンテナディレクトリ
docker run -d -v ホストディレクトリアドレス: / usr / share / nginx / html -p 8080 : 80 --name nginx -music -volume nginx

2 つのディレクトリがマウントされると、ディレクトリを共有するのと同じになります。どちら側が変更ディレクトリの内容を送信しても、内容は変更されます。こうすることで、ホスト側のディレクトリを操作するだけで、コンテナ内のディレクトリもそれに応じて変更されます。前回の記事で行ったcp操作と同様に保存しておき、バージョンアップが必要な時はホストマシン上で操作するだけで済みます。次に、nginx でテストし、独自にカスタマイズした Web ページをマウントします。

ここで、私自身の Web ページは /var/www/html に配置されます。次に、nginx コンテナ内の html フォルダーにマウントする必要があります。

実行されており、アクセス可能であることがわかります。 Web ページが機能するかどうか確認してみましょう。

はい、問題ありません。ここでは、docker examine container id を通じて詳細情報を表示することもできます。

ここでマウントが成功したことがわかります。 -v を使用すると、ローカル ディレクトリの Web ページをコンテナーに簡単に配置できることがわかります。この時点で、2 つのディレクトリは実際に同じディレクトリを共有していると言えます。このコンテナーを削除しても、内部の内容は保持されます。

将来的に新しいバージョンを変更したりリリースしたりするには、サーバー上で変更するだけで済みます。コンテナは自動的に同期されます。コンテナが削除されない限り、停止状態か実行状態かに関係なく、自動的に同期されます。

2. MySQLをテストする

デモにはmysql:5.7バージョンを使用します。まず、docker pull mysql:5.7 を実行します。もちろん、まずは公式サイトに行って確認します。やはり、問い合わせや勉強のために公式サイトに直接アクセスすることをお勧めします。

ただし、マウント ディレクトリの管理を容易にするために、ここでコマンドを変更する必要があります。

 docker run -d -v / home / mysql / conf : /etc/ mysql / conf  d -v / home / mysql / data : /var/ lib / mysql - e MYSQL_ROOT_PASSWORD = root - p 3310 : 3306 -- name mysql01 mysql : 5.7 前の記事を読んだ後では、このコマンドを理解するのは難しくないと思います。
-d舞台裏
-p ポートマッピング
-v ボリュームマウント
- eEnvironment 構成
--名前

次に、接続されているかどうかをテストしてみましょう。

成功したことがわかります! Navicat にテーブルを追加して、サーバー上に存在するかどうかを確認しましょう。

このようにして、MySQL コンテナのデータ永続化が完了しました。コンテナを削除しても、データベース内のデータは保持されます。

2. 匿名マウントと名前付きマウント

 匿名マウントや名前付きマウントも簡単に理解できます。匿名とは名前が付けられないことを意味し、名前付きとは特定の名前が付けられることを意味します。
docker run -d -v / usr / share / nginx / html -p 8080 : 80 --name nginx01 nginx ( 名前は指定されず、匿名マウント場合はコンテナ内のパスのみが書き込まれます)
docker run -d -v Aasee : / usr/ share / nginx / html -p 8080 : 80 --name nginx02 nginx (コンテナ内の指定された名前とパスはマウントです)
docker run -d -v ホストパス: コンテナパス-p 8080 : 80 --name nginx -volume nginx ( ホストの指定されたディレクトリに直接マウントます)

一つずつ紹介しましょう。ここでは、ポート 8080 で実行しているため、-P を使用してポートをランダムに指定します。

匿名

docker volume ls を使用してデータ ボリューム リストを表示し、docker inspect [volumename] を使用してボリューム情報を表示できます。

詳細な使用パラメータについては、--help を参照してください。

 docker コンテナ ID を検査する

名前

 docker コンテナ ID ビューの検査

もう1つだけ付け加えておきます。

この写真を見れば簡単に理解できます。通常は名前でマウントすることをお勧めします。

 読み取り専用に設定: docker run -d -v ホストディレクトリアドレス: / usr / share / nginx / html : ro -p 8080 : 80 -- name
nginx - 音楽- ボリュームnginx

3. データボリュームコンテナ

コンテナがホストと通信できるのと同様に、コンテナ同士も通信できます。親コンテナはデータ ボリューム コンテナです。コンテナとホストがデータ ボリュームを通じてファイルを共有できることはすでにわかっているので、当然コンテナもデータ ボリュームを通じてファイルを共有できます。

 -- volumes - コンテナ間でデータを共有するためのコマンド。
docker run -it --name コンテナ名--volumes - from コンテナイメージ名/ bin / bash

ここではデモンストレーションに nginx を使用します。まず、データ ボリュームを親コンテナとしてコンテナを起動します。 docker01と呼ぶことにします

 docker run -d --name docker01 -P -v volume01 : / home / volume01 nginx  

最初のコンテナの準備ができました。2 番目のコンテナを作成しましょう。

 docker run -it --name docker02 --volumes - from docker01 nginx / bin / bash   

ホーム ディレクトリに移動して、volume01 フォルダーがすでに存在するかどうかを確認できます。

ここで新しいファイルを作成し、helloDocker.py をタッチして、docker01 に移動して共有されているかどうかを確認します。

成功したことがわかります。

Dockerファイル

  • DockerFile: イメージの生成方法と必要なファイルおよびその他の構成を定義するビルド ファイル。
  • DockerImages: DockerFile を通じてレイヤーごとに生成される最終イメージ。最終的にリリースされ稼働している製品
  • DockerContainer: コンテナはイメージ上で実行されるサービスであり、書き込み可能なレイヤーでもあります。

以下は、私が見つけた、よく使用される Docker コマンドの 2 つの簡単な図です。コマンドの詳しい紹介をじっくりご覧いただけます。

ENTRYPOINT と CMD の機能説明はほぼ同じですが、それでも違いがあることがわかります。 CMD コマンドは最後のコマンドを実行し、ENTRYPOINT コマンドが追加されます。

そこで、ここでは DockerFile を記述してそれらの違いを説明します。

 [ root @ VM - 0 - 3 - centos ~ ]# cd dockerFile /
[ root @ VM - 0 - 3 - centos dockerFile ]# vim docker - test - cmd
[ root @ VM - 0 - 3 - centos dockerFile ]# cat docker - test - cmd
Centos より
コマンド[ "ls" , "-a" ]

このようにして、非常にシンプルな dockerfile を作成しました。つまり、このイメージを実行すると、自動的に ls -a が実行されます。次に、ビルド コマンドを使用してイメージを作成します。

 docker build -f docker - test - cmd -t test01 - cmd  

これで作成できました。実行して試してみてください。

ここで、実行コマンドの後に -l を追加します。理論的には、-l を追加すると、実行時にこのイメージによって実行されるコマンドは ls -a -l になるはずですよね?試してみましょう。

エラーが報告されていることがわかります。これはなぜでしょうか?前述のように、CMD コマンドは最後の項目のみを実行するため、実行時にコマンド -l を追加すると、実際のイメージの実行時に実行されるコマンド -l が ls -a に置き換わり、centos は -l の意味を認識できなくなります。 ENTRYPOINT を追加できます。この場合、エントリポイントはコマンド ls -a -l を実行できます。ここでは説明しません。

Tomcatイメージを作成する

まず、いくつかのインストール パッケージを準備する必要があります。公式サイト、​​jdk ダウンロード​​、​​tomcat ダウンロード​​で検索できます。

ダウンロード後、xftp を使用してアップロードするだけです。

次に、Dockerfile ファイルを書きます。

 centos から: centos7
メンテナーAasee < [email protected] >
readme.txt / usr / local / readme.txt をコピーする
#圧縮されたパッケージをインポートすると自動的に解凍されます
Apache - Tomcat - 9.0.63.tar.gz / usr / local / を追加します
jdk - 8u333 - linux - x64.tar.gz / usr / local / ​​​​を追加します
#vimをインストールする
yum -y install vim を実行します
#作業ディレクトリを設定する
ENV MYPATH / usr / ローカル
ワークディレクトリ$MYPATH
#jdk 環境設定
ENV JAVA_HOME / usr / local / jdk1.8.0_333
ENV CLASSPATH $JAVA_HOME / lib / dt.jar : $ JAVA_HOME / lib / tools.jar
#tomcat 環境設定
ENV CATALINA_HOME / usr / local / apache - tomcat - 9.0.63
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.63
#パス環境を構成する
環境変数 PATH $PATH : $JAVA_HOME / bin : $CATALINA_HOME / lib : $CATALINA_HOME / bin
#ポートを公開する
エクスポーズ8080
#Tomcatを起動してログを出力する
CMD /usr/local/apache-tomcat-9.0.63/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.63/logs/catalina.out

公式に推奨されている名前である Dockerfile と名付けました。したがって、ファイルを指定するために -f を使用する必要はありません。 docker buildで直接作成できます

docker build -t 名前。

次に実行します

docker run -d -p 9090:8080 --name aaseeto​​mcat -v /root/dockerFile/tomcat/test:/usr/local/apache-tomcat-9.0.63/webapps/test -v /root/dockerFile/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.63/logs aasee-tomcat01 を実行します。

これは私のコマンドであり、必要に応じて変更できます。これを読めば、ほとんどのコマンドは誰でも理解できると思います。

正常に実行され、マウントされていることがわかります。詳しくはページをご覧ください。

ログも閲覧可能です。

次に、docker inspect container id を使用して、ボリューム データが正常にバインドされているかどうかを確認します。

tomcatlogs 内のディレクトリが正常にマウントされているかどうかを確認しましょう。

成功したことがわかります。

次に、彼が試すためのカスタム Web ページを作成します。 webapps/test をボリューム経由でマウントしているため、ホスト マシンのテスト ディレクトリで直接変更を加えることができます。同時に、2 つのディレクトリが正常にマウントされているかどうかを逆に確認することもできます。

ウェブ

 < ? xml バージョン= "1.0" エンコーディング= "UTF-8" ? >
< ウェブアプリxmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance "
xmlns = "http://java.sun.com/xml/ns/javaee"
xsi : スキーマの場所= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
バージョン= "3.0" >
</web-app>

インデックス

 < ! DOCTYPE html >
<html>
< ヘッド>
< メタ文字セット= "utf-8" >
<title> こんにちは世界</title>
</head>
< 本体の背景色= "F6F3D6" >
<!-- HTML で世界に挨拶しましょう! -->
< h1 align = "center" > こんにちは世界< / / /h1>
< p align = "center" > Aasee - Docker < / /p>
</body>
</html>

次に、ページの効果を見てみましょう。

わかりました。

リポジトリにプッシュする

画像を作成した後、それを他の人に使用してもらうにはどうすればよいでしょうか?方法は2つあります。 1つはローカルでパッケージ化して他の人に送信すること、もう1つは公式のDockerリポジトリや、Alibaba CloudやTencent Cloudなどの大手企業の公式リポジトリにアップロードすることです。ただし、公式のDockerリポジトリノードは海外にあるため、速度は良いときもあれば悪いときもあり、操作も同様です。ここでは Alibaba Cloud を例に挙げます (Tencent Cloud でも同様の操作が行われます)。

まず、Alibaba Cloudにログインします。

コンテナ イメージ サービスを直接検索します。個人的なテストでは、個人バージョンを使用できます。次に、プロンプトに従ってコマンド スペースを作成し、イメージ リポジトリを作成します。ローカルリポジトリを選択すると、プッシュチュートリアルが表示されます。

これらの内容は、ご自身で読んでみてください。正式な命令は非常に詳細です。公式コマンドに従って、イメージを公式ウェアハウスに簡単にプッシュできます。

補充する

イメージがどのように生成されたかを確認できるように、docker history image id などの他のコマンドも追加します。

いいね👇

要約する

この時点で、基本的にイメージを独立して構築し、それを使用してプロジェクトを構築および公開することができます。

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​.

<<:  エッジコンピューティングを成功させる5つの鍵

>>:  AI エッジコンピューティングとは何ですか?エッジコンピューティングの利点は何ですか?

推薦する

モノのインターネットにおけるクラウドコンピューティングの応用の分析

モノのインターネットは、インターネットの発展から生まれたネットワーク概念です。モノのインターネット技...

SEOスタジオの3つの大きな開発理念

SEO業界の現状は、一方ではSEO従事者が増えたことにより、SEO最適化の価格が急落したことです。低...

重慶フォーラムの運営経験:コンテンツが王様、口コミによる宣伝が女王

今夜、私はベッドの中で寝返りを打ちながら、インターネットビジネスを始めたときの経験を思い返しました。...

外部リンクの大量共有による降格に対する是正措置

外部リンクの構築は、最適化の道にある多くのSEO担当者にとって常に難しい問題でした。フォーラムの外部...

SEOサービスのベテランは将来が不透明なため転職している

昨日は SEO サービスの見通しの暗さについてお話ししましたが、その理由はすべて業界の特性を分析した...

2018年、ウェブサイトSEO:4つの最新動向!

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています2018年...

ブランドウェブサイトのフレンドリーなリンク方法からどのような反映が得られるでしょうか?

フレンドリーリンクについての記事はたくさんあるので、今日はその詳細についてお話します。これが、大規模...

合理的な方法でウェブサイトの重複を減らす方法

ウェブサイト上での重複が多すぎると、検索エンジンが盗作や模倣と誤認する可能性があります。今年 6 月...

単語セパレーターを正しく使用しましたか?

これは、多くの人がどのように選択すればよいかわからない質問です。どれがより効果的かはわかりません。よ...

Docker が 2021 年に開発チーム向けの 3 つの推奨方向性を発表

Docker チームの SCOTT JOHNSTON 氏は、2021 年の開発チームに関連する主なト...

Amazon Web Services、Amazon Lookout for Vision の一般提供を発表

最近、Amazon Web Services は、コンピューター ビジョンと高度な機械学習機能を使用...

分散トランザクションを実装するにはどうすればいいですか? Seata の XA モデルの詳細な分析

Seata 1.2.0 バージョンでは、XA プロトコルをサポートする新しいトランザクション モード...

Baidu キーワードリサーチ: 避けるべき 5 つの間違い!

月収10万元の起業の夢を実現するミニプログラム起業支援プランSEO プロジェクトの場合、SEO 担当...

NIKE の新年の大ヒット商品が到着しました。今回は旧正月も負けません!

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス今年はまだ始まったばかり...

hiformance-$7/KVM/6G メモリ/6 コア/20gSSD/4T トラフィック/3IPv4/ロサンゼルス/Windows

米国のホスティング業界の新参者である hiformance.com は現在、ダラス、オグデン (ユタ...