Dockerテクノロジー(コンテナー仮想化テクノロジー)

Docker——コンテナ仮想化テクノロジー###

第1章Docker#の概要

誕生の背景##

製品は、開発から発売、オペレーティングシステム、オペレーティング環境、およびアプリケーション構成に移行します。
開発+運用・保守の連携として、多くのことに気を配る必要があり、これも多くのインターネット企業が直面している問題です。
特に、さまざまなバージョンを繰り返した後は、さまざまなバージョンの環境の互換性が運用および保守担当者のテストになります。
**Dockerがこれほど急速に開発された理由は、標準化されたソリューションを提供するためでもあります。 ****

環境構成は非常に面倒であり、マシンを変更した場合は、再度変更する必要があり、手間と時間がかかります。
多くの人が、問題は根本的に解決でき、ソフトウェアは環境とともにインストールできると考えていますか?
つまり、インストールするときは、元の環境を正確にコピーしてください。
**開発者はDockerを使用して、コラボレーティブコーディング中の「自分のマシンで動作する」という問題を解消できます。 ****

開発では、運用および保守の展開チームに、すべての構成ファイルと使用されているすべてのソフトウェア環境を明確に通知する必要があります。
ただし、それでも、展開の失敗は依然として頻繁に発生します。
**Dockerイメージの設計により、Dockerは過去の「プログラムはアプリケーションである」という概念を打ち破ることができます。 画像(画像)を介してオペレーティングシステムのコアを除いて、アプリケーションを実行するために必要なシステム環境は、アプリケーションのシームレスなクロスプラットフォーム操作を実現するためにボトムアップでパッケージ化されています。 ****

Dockerの紹介##

Dockerの主な目標は、「どこでも、あらゆるアプリを構築、出荷、実行する」ことです。
つまり、パッケージ化、配布、展開、運用などのアプリケーションコンポーネントのライフサイクル管理を通じて、
**ユーザーのAPP(WEBアプリケーションやデータベースアプリケーションなど)とその操作環境を「一度パッケージ化して、どこでも実行」できるようにします。 ****

Linuxコンテナ技術の出現はそのような問題を解決し、Dockerはそれに基づいて開発されています。
Dockerコンテナでアプリケーションを実行すると、Dockerコンテナはどのオペレーティングシステムでも一貫性があります。
これにより、クロスプラットフォーム、クロスサーバーが実現します。 **環境を構成する必要があるのは1回だけで、ワンクリックで別のマシンに展開できます。**操作が大幅に簡素化されます

総括する:
Dockerは、運用環境と構成の問題を解決するソフトウェアコンテナーであり、継続的な集中を促進し、コンテナー仮想化テクノロジーの全体的なリリースに貢献します。

仮想マシンテクノロジーとコンテナ仮想化テクノロジー##

仮想マシンテクノロジー###

仮想マシン(仮想マシン)は、環境をインストールするソリューションです。
WindowsシステムでLinuxを実行するなど、1つのオペレーティングシステムで別のオペレーティングシステムを実行できます。
仮想マシンは実際のシステムとまったく同じように見えるため、アプリケーションはこれを認識しません。
短所:1つのリソース使用量2つの冗長な手順3起動が遅い

コンテナ仮想化テクノロジー###

Linuxコンテナ(Linuxコンテナ、LXCと略記)。
Linuxコンテナは、完全なオペレーティングシステムをシミュレートしませんが、プロセスを分離します。
コンテナを使用すると、ソフトウェア操作に必要なすべてのリソースを分離されたコンテナにパッケージ化できます。
仮想マシンとは異なり、コンテナをオペレーティングシステムの完全なセットにバンドルする必要はなく、ソフトウェア作業に必要なライブラリリソースと設定のみをバンドルする必要があります。
その結果、システムは効率的かつ軽量になり、あらゆる環境にデプロイされたソフトウェアを一貫して実行できるようになります。

2つの違い

  1. 従来の仮想マシンテクノロジーは、ハードウェアのセットを仮想化し、その上で完全なオペレーティングシステムを実行してから、システム上で必要なアプリケーションプロセスを実行することです。
  2. コンテナ内のアプリケーションプロセスは、ホストマシンのカーネル(つまり、ホスト、以下、まとめてホストマシンと呼びます)で直接実行されます。コンテナには独自のカーネルがなく、ハードウェアの仮想化もありません。したがって、コンテナは従来の仮想マシンよりもポータブルです。
  3. 各コンテナは互いに分離されており、各コンテナには独自のファイルシステムがあり、コンテナ間のプロセスは互いに影響を与えず、コンピューティングリソースを区別できます。

公式ウェブサイト###

公式サイト:https://www.docker.com
Dockerコミュニティの公式:https://hub.docker.com/

第2章Dockerのインストール#

Dockerは、次のCentOSバージョンをサポートします:CentOS 7(64ビット)、CentOS 6.5(64ビット)以降

前提条件##

現在、CentOSのリリースバージョンのカーネルのみがDockerをサポートしています。
DockerはCentOS7で実行され、64ビットシステムとシステムカーネルバージョン3.10以降が必要です。
DockerはCentOS-6.5以降で実行され、システムは64ビットで、システムカーネルバージョンは2.6.32-431以降である必要があります。

# カーネルバージョンを表示
uname -r 

Dockerをインストールする##

[ Dockerインストールチュートリアル(CentOS 7)](https://www.runoob.com/docker/centos-docker-install.html)正常にインストールしました

[ Dockerインストールチュートリアル(CentOS 6)](https://www.bilibili.com/video/av27122140/?p=7)

Docker管理コマンド###

# バックグラウンド起動プロセスをリロードします
systemctl daemon-reload

# ドッカーコンテナを起動します,毎回仮想マシンをシャットダウンします/サーバーの実行時に開始する必要があります(重要!!!)
sudo service docker start

# Dockerコンテナのステータスを表示する
sudo service docker status(should see active(running))

# こんにちは-ワールドミラー/Dockerを使用できるかどうかをテストします
sudo docker run hello-world

Dockerの基本原則##

Docker構造図##

動作原理###

Dockerはクライアントサーバー構造システムであり、Dockerデーモンはホスト上で実行されます。
次に、ソケット接続を介してクライアントからアクセスすると、デーモンはクライアントからのコマンドを受け入れ、ホストで実行されているコンテナーを管理します。
コンテナはランタイム環境であり、前述のコンテナです。

DockerがVM ###よりも速いのはなぜですか

(1) **Dockerには、仮想マシンよりも抽象化レイヤーが少なくなっています。 ****
dockerはハードウェアリソースの仮想化を実装するためにHypervisorを必要としないため、
Dockerコンテナで実行されるプログラムは、実際の物理マシンのハードウェアリソースを直接使用します。
したがって、dockerには、CPUとメモリの使用率の点で効率の点で明らかな利点があります。

(2) **Dockerはホストマシンのカーネルを使用し、ゲストOSを必要としません。 ****
したがって、新しいコンテナを作成するときに、dockerは仮想マシンのようにオペレーティングシステムカーネルをリロードする必要はありません。
したがって、オペレーティングシステムカーネルを検索してロードする、時間とリソースを大量に消費するプロセスは避けてください。
新しい仮想マシンが作成されると、仮想マシンソフトウェアはゲストOSをロードする必要があり、新しい作成プロセスには数分かかります。
dockerはホストマシンのオペレーティングシステムを直接使用するため、このプロセスは省略され、新しいdockerコンテナを作成するのに数秒しかかかりません。
次の図を通して、2つの比較に焦点を当てます(図は非常に重要です!!!)

第3章Dockerの一般的なコマンド#

ヘルプコマンド##

# Dockerのバージョン情報を表示する
docker version

# すべてのdockerインストール情報を表示する
docker info

# Dockerヘルプを表示(最も重要な,ヘルプファイルを使用して学習する方法を学ぶ,これがマスターになる唯一の方法です!!!)
docker --help

ミラーコマンド##

# 1. ローカルミラーを一覧表示する(図1)
docker images

# オプションの説明
 - a :すべてのミラーを一覧表示
 - q:ミラーIDのみをリストします
 - digests :ミラーの概要情報を表示する
- - no-trunc :信念情報を表示する

# 2. ミラー名を検索する(dockerコミュニティで関連するミラーを検索します,そして、私たちが構成したアリババのソースは、ドッカーコミュニティのミラーリングを同期するのに役立ちました,図2)
docker search 

# オプションの説明
	-■好きな数が指定値以上の鏡像を表示する
 - - no-trunc :信念情報を表示する
 - automated :自動タイプの画像のみを一覧表示します

# 3. ミラーをダウンロード(画像3)
ドッカープルイメージ名:[TAG](書かれていない場合、デフォルトが持続します)

# 4. ミラーを削除する
docker rmi  -fミラー名/ミラーID
docker rmi -f $(docker images -qa )

各オプションの説明:
REPOSITORY:ミラーリングされたウェアハウスのソースを示します
TAG:ミラーリングされたタグ
画像ID:画像ID
作成済み:ミラー作成時間
サイズ:ミラーサイズ
同じウェアハウスソースに、ウェアハウスソースの異なるバージョンを表す複数のTAGを含めることができます。REPOSITORY:TAGを使用して、異なるミラーを定義します。

図1

図2

画像3

コンテナコマンド##

基本コマンド###

# 1. コンテナを作成して開始します
docker run [OPTIONS] IMAGE [COMMOND][ARGS...]

# オプションの説明
	--name="コンテナの新しい名前":コンテナに名前を割り当てます。
	-d:コンテナをバックグラウンドで実行し、コンテナIDを返します。つまり、ガーディアンコンテナを起動します。
	-i:コンテナをインタラクティブモードで実行します。-t同時使用。
	-t:コンテナの疑似入力端子を再割り当てします。通常は-私は同時に使用しました。
	-P:ランダムポートマッピング。
	-p:ポートマッピングを指定します。次の4つの形式があります
	      ip:hostPort:containerPort
	      ip::containerPort
	      hostPort:containerPort
	      containerPort
	      
# eg:ミラーセントを使用する:最新はインタラクティブモードでコンテナを開始します,コンテナで実行/bin/bashコマンド。
docker run -it centos /bin/bash 

 
# 2. 現在実行中のコンテナをクエリします(アナロジー仮想での表示プロセス)
docker ps [OPTIONS] 

# オプションの説明(一般的に使用されます):
	-a :現在実行中のすべてのコンテナを一覧表示します+歴史の中で走った
	-l :最近作成したコンテナを表示します。
	-n:最後に作成されたn個のコンテナを表示します。
	-q :サイレントモードでは、コンテナ番号のみが表示されます。
	--no-trunc :出力は切り捨てられません。

# 3. コンテナを終了します
exitコンテナが停止したら終了します
ctrl+p+qコンテナが終了しません

# 4. コンテナを起動します
ドッカー開始コンテナID/コンテナ名

# 5. コンテナを再起動します
docker restart

# 6. コンテナを停止します
ドッカーストップコンテナID/コンテナ名

# 7. コンテナを強制的に停止します
ドッカーキルコンテナID/コンテナ名

# 8. 停止したコンテナを削除します(止まらないなら,後悔停止を削除)
dockerrmコンテナID
複数のコンテナを削除する(特に2番目,最初に実行中のすべてのプロセスを照会します,次に、パイプラインを介して後続の削除操作に渡します)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

重要なコマンド###

# 1. デーモンコンテナを起動します(バックグラウンドプロセス)
docker -dコンテナ名

# ミラーセントを使用する:最新はバックグラウンドモードでコンテナを開始します
docker run -d centos

質問:それからドッカーps-表示する,コンテナが終了したことがわかります
非常に重要なポイント:バックグラウンドで実行されているDockerコンテナ,フォアグラウンドプロセスが必要です.
コンテナによって実行されるコマンドが一時停止されたコマンド(top、tailの実行など)でない場合、それらは自動的に終了します。

これがドッカーのメカニズムです,Webコンテナなど,通常の状況で、nginxを例として取り上げましょう,応答するサービスを開始するためにのみサービスを開始するように構成します。たとえば、service nginx start
だが,こちらです,nginxはバックグラウンドプロセスモードで実行されます,それは、ドッカーフォアグラウンドで実行されていないアプリケーションにつながります,
そのようなコンテナがバックグラウンドで開始された後,彼は自分には何の関係もないと思っているので、すぐに自殺します.
したがって、最善の解決策は,実行するプログラムをフォアグラウンドプロセスとして実行します
# 2. コンテナログを表示する
docker logs -f -t --テールコンテナID

eg :(図1)
docker run -d centos /bin/sh -c "while true;do echo hello testLogs;sleep 2;done"
docker logs -tf --tail 10 02c81778b0e0

- tはタイムスタンプです
- f最新のログ印刷に従ってください
- - テール番号は最後の番号を示します

# 3. コンテナで実行されているプロセスを表示する(図2)
ドッカートップコンテナID

# 4. コンテナの内部詳細を表示する(画像3)
dockerはコンテナIDを検査します

# 5. 実行中のコンテナに入り、対話します(図4)
docker exec -itコンテナIDbashShell

# 6. コンテナに再入場(図5)
dockerattachコンテナIDbashShell(書かれていない場合のデフォルト/bin/バッシュの下で)

# 5と6の違いを比較します
コンテナ起動コマンド端末に直接接続します,新しいスレッドを開始しません
execは、コンテナ内の新しいターミナルを開くことです,そして、新しいスレッドを開始できます

図1

図2

画像3

図4

図5

Dockerで一般的に使用されるコマンド図##

第4章DockerMirror#

ミラー/ UnionFS(ユニオンファイルシステム)##

ユニオンファイルシステム(UnionFS)は、階層化された軽量で高性能なファイルシステムです。
レイヤーごとのオーバーレイへの送信として、ファイルシステムへの変更をサポートします。
同時に、同じ仮想ファイルシステムの下に異なるディレクトリをマウントできます。 **ユニオンファイルシステムはDockerイメージの基礎です。 ****
ミラーリングはレイヤーを介して継承できます。基本的なミラーリング(親ミラーリングなし)に基づいて、さまざまな特定のアプリケーションミラーリングを作成できます。

特性
複数のファイルシステムを同時にロードしますが、外部からは1つのファイルシステムしか表示されません。
共同読み込みでは、ファイルシステムの各レイヤーが重ね合わされるため、最終的なファイルシステムには、基になるすべてのファイルとディレクトリが含まれます。

総括する:
鏡像は、蓮の巻のようなタマネギの輪のように重ねられており、外側に1つのファイルシステムしか表示されていません。
また、このレイヤードミラーは再利用も可能です

特徴##

Dcokerイメージは読み取り専用です。コンテナーが開始されると、新しい書き込み可能なレイヤーがイメージの上にロードされます。このレイヤーは「コンテナーレイヤー」と呼ばれ、「コンテナーレイヤー」の実行は呼び出されます。ミラーレイヤー "

Dockerイメージの読み込みの原則:##

ドッキングイメージは実際には階層化されたファイルシステムで構成されており、このファイルの階層はファイルシステムUnionFSを構成します。

bootfs(ブートファイルシステム)には主にブートローダーとカーネルが含まれます。ブートローダーの主な機能はカーネルをブートしてロードすることです。Linuxが起動すると、bootfsファイルシステムがロードされます。** Dockerイメージの最下層はbootfs *です。 *。
このレイヤーは、ブートローダーとカーネルを含む一般的なLinux / Unixシステムと同じです。
ブートロードが完了すると、カーネル全体がメモリ内にあります。この時点で、メモリを使用する権利がbootfsからカーネルに転送され、システムはこの時点でbootfsもアンロードします。

rootfs(rootファイルシステム)、bootfsの上にあります。
一般的なLinuxシステムの/ dev、/ proc、/ bin、/ etcなどの標準のディレクトリとファイルが含まれています。

通常、仮想マシンにインストールするCentOSは数Gですが、dockerがここで220Mしかないのはなぜですか###

合理化されたOSの場合、rootfsは非常に小さい可能性があり、最も基本的なコマンド、ツール、およびライブラリを含めるだけで済みます。
**最下層はホストのカーネルを直接使用するため、rootfsを指定するだけで済みます。 ****
異なるLinuxディストリビューションでは、bootfsは基本的に同じであり、rootfsは異なるため、**異なるディストリビューションがbootfsを共有できることがわかります。 ****

Dockerイメージのコミット操作##

# コンテナのコピーを送信すると、基本的に新しいイメージになります
docker commit -m="提出された説明情報"-a="著者"コンテナID作成するターゲットイメージの名前:[ラベル名]

eg:同時にdockerはtomcatケースを実行します
# 1. インタラクティブなインターフェースを作成する(フォアグラウンドスタートに相当)
docker run -it -p 8888:8080 tomcat   #ポートマッピングは、ドッカーの入り口として8888を使用します,トムキャットミラーにマッピングされた8080(図1,図2)
docker run -it -P  tomcat  #自動ポートマッピング(dockerpsを介してポートを表示します,画像3)
# バックグラウンドスタート(現在のページを占有しません)
docker run -d -p 8888:8080 tomcat 

# 2. tomcatを入力してください(事前開始の場合,別のウィンドウを開く,開始後直接入力)
# 実行中のコンテナIDを表示する
docker ps  
# ルートディレクトリを入力します
docker exec -itコンテナID/bin/bash
/usr/local/tomcat# rm -rf webapps/docs/ 
# 削除後にtomcatにアクセス,ホームページの下のドキュメントにアクセスすると、404が表示されます。(図4)

# 3. コンテナのコピーを送信して、新しいイメージにします
# 実行中のコンテナIDを表示する
docker ps  
# コンテナを提出する
docker commit -m="del tomcat docs"-a="timepaus"コンテナIDtomcat:v1.2
# ビューミラー(図5)
docker images

# 4. 同時に新しい画像を開始し、元の画像と比較します
自分で送信した新しい画像にはドキュメントがないことがわかります()
しかし、私たちが再びダウンロードしたトムキャットはそこにあります

図1

図2

画像3

図4

図5

第5章Dockerコンテナデータボリューム#

前書き##

[Redis](https://cloud.tencent.com/product/crs?from=10680)のrdbファイルとaofファイルに似ています
コンテナの永続性と継承、および栄光の間のデータの共有に使用されます

コンテナにデータボリュームを追加します##

1. 直接コマンド追加###

# 沿って-vコマンドが直接追加されました(ルートディレクトリにcontainerDataを作成する必要があります)
# 作成後にコンテナ内のcontainerDataを変更すると、hostDataに同期されます,逆に
docker run -it -v /hostData:/containerDataイメージ名/ID

# 読み取り専用ファイルを作成する,このファイルのみをコンテナで読み取ることができます,ただし、変更することはできません. ro: readonly
docker run -it -v /ホストのデッドパスのディレクトリ:/コンテナ内のディレクトリ:roミラー名

2. Docker add

DockerFileの簡単な理解

# 1. ホストのルートディレクトリにmydockerフォルダーを作成し、次のように入力します。

# 2. mydockerファイルにDockerFileファイルを作成して編集したい,内容は以下の通りです(図1)

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

説明:
移植性と共有に関する考慮事項については、-vホストディレクトリ:コンテナディレクトリメソッドは、Dockerfileに直接実装することはできません。
ホストディレクトリは特定のホストに依存しているため、そのような特定のディレクトリがすべてのホストに存在するという保証はありません。

3. dockerbuildコマンドを使用してミラーを作成します,そして、指定されたホストに指定されたファイルをマウントします
docker build -f /mydocker/DockerFile -t定義された新しいイメージ名

4. ビューミラー
docker images

5. 新しい画像を実行する
docker run -それによって定義された新しいイメージID/bin/bash

6. イメージの実行後に生成されたコンテナIDを確認します(図2),対応するホストによってマップされたデータボリュームアドレス
docker ps
dockerはコンテナIDを検査します

7. 追加されたボリュームとホストが相互運用可能かどうかをテストします
コンテナにファイルを作成する,対応するファイルがホストで作成されているかどうかを確認します

注意:Dockerマウントホストディレクトリ(ステップ3)Dockerアクセスが表示され、ディレクトリを開くことができません.: Permission denied
解決策:マウントされたディレクトリの後にもう1つ追加します--privileged=真のパラメーター

図1

図2、実行中のコンテナIDに関する情報の表示 docker inspect container ID

比較と要約

データボリュームコンテナ##

名前付きコンテナはデータボリュームをマウントし、他のコンテナはこれ(親コンテナ)をマウントすることでデータ共有を実現します。
データボリュームがマウントされているコンテナは、データボリュームコンテナと呼ばれます。

実装手順

# 1. 前の手順で作成した画像はテンプレートです,最初に親コンテナdc01を起動します,コンテナが作成されるデータボリュームフォルダにファイルを作成します(図1)
docker run -it --name 	dc01 zzyy/centos
touch dc01_add.txt

# 2. サブコンテナdc02を作成します,dc01から継承されたdc03,コンテナが作成されるデータボリュームフォルダにファイルを作成します(図2)
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
touch dc02_add.txt
docker run -it --name dc03 --volumes-from dc01 zzyy/centos
touch dc01=3_add.txt

# 3. dc01に戻ると、すべてのデータが共有されていることがわかります(画像3)
# 4. dc01を削除します,dc02の変更後にdc03にアクセスできますか,できる(図4)
# 5. dc02dc03にアクセスできるかどうかを削除します,できる(図5)
# 6. 新しいdc04がdc03を継承するかどうかにアクセスできます,できる(図6)

結論として
コンテナ間での構成情報の転送,データボリュームのライフサイクルは、コンテナがデータを使用しなくなるまで続きます

図1

図2

画像3

図4

図5

図6

第6章DockerFile分析#

前書き##

Dockerfileは、一連のコマンドとパラメーターで構成されるスクリプトであるDockerイメージファイルを作成するために使用されます。

ビルド手順##

  1. Dockerfileを書く
  2. docker build
  3. docker run

フォーマット###

例としてcentosファイルを取り上げます

FROM scratch
ADD centos-8-container.tar.xz /

LABEL org.label-schema.schema-version="1.0" \
 org.label-schema.name="CentOS Base Image" \
 org.label-schema.vendor="CentOS" \
 org.label-schema.license="GPLv2" \
 org.label-schema.build-date="20190927"

CMD ["/bin/bash"]

文法###

  1. 予約済みの各コマンドは、感謝の手紙であり、その後に少なくとも1つのパラメーターが続く必要があります
  2. 命令は上から下の順に実行されます
  3. コメントを示します

  4. 各命令は新しいミラーレイヤーを作成して送信します

DockerFile ###を実行するDockerの一般的なプロセス

  1. dockerはベースイメージからコンテナを実行します
  2. 命令を実行し、コンテナに変更を加えます
  3. docker commitと同様の操作を実行して、新しいミラーレイヤーを送信します
  4. dockerは、送信されたばかりの画像に基づいて新しいコンテナを実行します
  5. すべての命令が完了するまで、dockerfileで次の実行を実行します

アプリケーションソフトウェアの観点から、Dockerfile、Dockerイメージ、およびDockerコンテナは、ソフトウェアの3つの異なる段階を表しています。

Dockerfileは開発用であり、Dockerイメージが配信標準になります。
Dockerコンテナには、展開、運用、保守が含まれます。3つは不可欠であり、Dockerシステムの基盤として機能するために連携します。

1 Dockerfile、Dockerfileを定義する必要があります。Dockerfileはプロセスに必要なすべてを定義します。 Dockerfileのコンテンツには、実行可能なコードまたはファイル、環境変数、依存パッケージ、ランタイム環境、動的リンクライブラリ、オペレーティングシステムのリリース、サービスプロセス、およびカーネルプロセスが含まれます(アプリケーションプロセスがシステムサービスとカーネルプロセスを処理する必要がある場合、これは名前名アクセス制御の設計方法などを検討する必要があります。
2 Dockerイメージは、Dockerfileでファイルを定義した後、dockerビルド中にDockerイメージが生成されます。Dockerイメージが実行されると、実際にサービスの提供が開始されます。
3 Dockerコンテナ、コンテナはサービスを直接提供します

DockerFile予約ワード命令##

[ 予約済みの単語をよりよく理解するためにtomcatのDockerFileファイルを表示する](https://github.com/docker-library/tomcat/blob/8348a86101660e76224afcc57c4c9fae4dc76de8/9.0/jdk8/openjdk/Dockerfile)

予約語統合の場合###

カスタムミラー####

インストールしたcentosのライトバージョンは、vimおよびifconfigコマンドではサポートされていません
Dockerfileを作成することで、これらの機能をサポートできます。

# 1. セントスミラーを検索してダウンロード
docker search centos
docker pull centos

# 2. ファイルを作成するために書き込む(/mydoker/dockerfile_centos ),Dockerfileを書く,内容は以下の通りです
--------------------------------------------------------------------
FROM centos
MAINTAINER timepause<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "install vim and ifconfig commond plug-in components success"
CMD /bin/bash
-----------------------------------------------------------------------

# 3. セントスをコンパイルして実行します(最後のスペースとドットに注意してください,図1)
docker build -f /mydoker/dockerfile_centos -t mycentos:1.3.

# 4. テスト機能(図2)
# ミラーを追加するかどうかを確認します
docker ps
# 新しい画像を実行する
docker run -it mycentos:1.3
# コンテナでvimおよびifconfigコマンドを使用します

図1

図2

カスタムtomcat9

# 1. 生成された画像ファイルを保存するディレクトリを作成します
mkdir -p /myuse/mydocker/tomcat9

# 2. 関連ファイルを作成する(c.テスト用のtxt)
touch c.txt 

# 3. tomcatとjdkをアップロードする(必ずバージョンに注意してください,バージョンに応じてDockerfileファイルを変更します,図1)

#.4. Dockerfileを作成および編集する(事前にcentosをダウンロードする必要があります)
vim Dockerfile
- - - - - - - - - - - - - - - - - - - - - Dockerfile-------------------------------
FROM         centos
MAINTAINER    chy<[email protected]>
# ホストの現在のコンテキストを入力しますc.txtがコンテナにコピーされました/usr/local/パスの下
COPY c.txt /usr/local/cincontainer.txt
# javaとtomcatをコンテナに追加します
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.27.tar.gz /usr/local/
# vimエディターをインストールする
RUN yum -y install vim
# 出張用のWORKDIRパスを設定し、足場にログインします
ENV MYPATH /usr/local
WORKDIR $MYPATH
# javaおよびtomcat環境変数を構成します
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.27
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.27
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# コンテナの実行時にコンテナがリッスンしているポート
EXPOSE  8080
# 起動時にtomcatを実行する
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.27/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.27/bin/logs/catalina.out
- - - - - - - - - - - - - - - - - - - - - Dockerfile-------------------------------

# 5. 画像を作成する(これらのファイルが保存されているディレクトリ,図2)
# Dockerfileファイル名がDockerfileの場合,パラメータは省略できます-f /Dockerfileの場所を書き込む
docker build -t mytomcat9 .

# 6. 画像を表示して画像を実行します(画像3)
docker images
# ミラーを実行(バックグラウンドスタート,成功後の図4)
docker run -d -p 8080:8080--name myt9 -v /myuse/mydocker/tomcat9/test:/usr/local/apache-tomcat-9.0.27/webapps/test -v /myuse/mydocker/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.27/logs --privileged=true  mytomcat9

# コンテナボリュームのマッピングはここで構成されていることに注意してください,ホストマシンのテストフォルダは、tomcatwebappsディレクトリのテストファイルにマップされます,そして、2つは互いに通信することができます. 
docker exec -itコンテナID/bin/bash #コンテナのルートディレクトリを入力します,関連ページにアクセスできます

# 7. 訪問に成功した後,jspファイルとWebを追加します.xmlファイル( a.jspはテストへのアクセスに使用されます,web.xmlは、jspページをコンパイルするために使用されます)
vim a.jsp
mkidr WEB-INF
vim /WEB-INF/web.xml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a.jsp---------------------------<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>-----------welcome------------<="i am in docker tomcat self "%><br><br><% System.out.println("=============docker tomcat self");%></body></html>------------------------------------------a.jsp---------------------------------------------------------------------web.xml-----------------------------------<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 version="4.0"
 metadata-complete="true"></web-app>------------------------------------------web.xml-----------------------------------

# 8. サービスを再開します,にアクセスしてください.jsp(図5)
# 現在のコンテナIDを表示する
docker ps(現在のコンテナIDを表示する)
docker ps -a(実行されたすべてのコンテナIDを表示する)
# サービスを再開します
docker restart container ID
# にアクセスしてください.jspページ

図1

図2

画像3

図4

図5

第7章Docker#を介したソフトウェアのインストール

MySQL

# 1. mysql5をインストールするには.例として6(理由がわからない5.7は来ない)
docker pull mysql:5.6

# 2. ミラーを実行,コンテナを起動します(ポート3306,ルートユーザーパスワード:root,ミラーを実行:mysql5.6)
docker run -p 3306:3306--name mysql -v /datebase/mysql/conf:/etc/mysql/conf.d -v /datebase/mysql/logs:/logs -v /datebase/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6

# 3. msql内部テストログインを入力します
docker ps
## mysqlの現在のディレクトリを入力します
docker exec -正常に実行された後のMySQLコンテナID/name     /bin/bash
## アカウントのパスワードを入力してください
mysql -uアカウント-p(次に、プロンプトに従ってパスワードを入力します)

# 4. データベースに接続するためのグラフィカルインターフェイス

# 5. データベースデータのバックアップ,次に、このsqlファイルを直接読み取ることでデータを復元できます。
docker execmyqlサービスコンテナIDsh-c ' exec mysqldump --all-databases -uroot -p"root" '>/datebase/all-databases.sql

Redis

# 1. redisミラーの最新バージョンをダウンロードする
docker pull redis

# 2. ミラーを実行(redisポート2333,-dの後のRedisはパラメーターを追加せず、デフォルトでredisになります:latest)
# ローカルデータボリュームとコンテナ内のデータボリュームディレクトリの対応に注意してください
docker run -p 2333:6379-v /myuse/myredis/data:/data -v /myuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

# 3. redisをアップロード.ローカルデータボリュームが配置されているディレクトリへのconf
ローカルデータボリュームはディレクトリにあります:/myuse/myredis/conf
ファイルアドレス(大きすぎる,ここに置くことはできません): https://download.csdn.net/download/qq_43371556/11889084

# 4. シルランニングredis----シェルコマンドライン
docker exec -Rediisサービスを実行しているコンテナIDredisです-cli
# dockerredisにリモートで接続します
docker exec -it redis_s redis-cli -h 192.168.1.100-p 6379-a your_password //パスワードがある場合に使用-パラメータ

RabbitMQ

# 1. ミラーをダウンロード
docker pull rabbitmq:3.7.7-management

# 2. ミラーを実行
docker run -d --name rabbitmq3.7.7-p 5672:5672-p 15672:15672-v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=/-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9

- dコンテナをバックグラウンドで実行します。
- - nameはコンテナ名を指定します。
- pサービスを実行するポートを指定します(5672:アプリケーションアクセスポート; 15672:コンソールWebポート番号)。
- vディレクトリまたはファイルをマップします。
- - ホストホストホスト名(RabbitMQの重要な注意点は、デフォルトでホスト名である、いわゆる「ノード名」に従ってデータを格納することです)。
- e環境変数を指定します;(RABBITMQ_DEFAULT_VHOST:デフォルトの仮想マシン名; RABBITMQ_DEFAULT_USER:デフォルトのユーザー名; RABBITMQ_DEFAULT_PASS:デフォルトのユーザー名のパスワード)

# 3. アクセス(以下に示すように)
http://ip:15672
口座番号:admin
パスワード: admin

MongoDB

# 1. ドッカーを見る+MongoDBバージョン(図1)
docker search

# 2. 最新のMongoDBをダウンロードする
docker pull MongoDB

# 3. 画像をコンテナに実行します
docker run -itd --name mongo -p 27017:27017 mongo --auth
## パラメータの説明:
- p 27017:27017:コンテナサービスの27017ポートをホストの27017ポートにマップします。外部はホストIPを直接渡すことができます:27017モンゴサービスへのアクセス。
- - auth:コンテナサービスにアクセスするにはパスワードが必要です。

# 4. 次のコマンドを使用して、ユーザーを追加し、パスワードを設定して、接続を試みます。
$ docker exec -it mongo mongo admin
# 123456のパスワードでadminという名前のユーザーを作成します。
> db.createUser({ user:'admin',pwd:'123456',roles:[{ role:'userAdminAnyDatabase', db:'admin'}]});
# 上記で作成したユーザー情報を使用して接続してみてください。
> db.auth('admin','123456')

図1

図2

第8章ミラーをAlibabaCloud#に公開する

ステップ##

# 1. アリババクラウドにログイン,コンテナイメージサービスに入る(以下のアドレスで登録してログインすると、コンテナミラーリングサービスにジャンプできます。)
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

# 2. ミラーウェアハウスを作成する(図1)
# 3. dockerにログインします,図2によると,図3の操作ガイド

# 5. 実行中のコンテナをイメージとして作成します(図4)
docker commit 

オプションの説明:
- a :提出されたミラー作成者。
- m :提出時の説明文。

# 4. 画像をAlibabaCloudの画像ウェアハウスにプッシュします(アリババクラウドの操作ガイドに従うのが最善です)
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/timepause/mydocker:[ミラーバージョン番号]
sudo docker push registry.cn-hangzhou.aliyuncs.com/timepause/mydocker:[ミラーバージョン番号]

# 5. サーチミラー,ミラーをダウンロード(図5,図6)
dockerpullによってコピーされたミラーアドレス

図1

図2

画像3

図4

図5

図6

[ このブログの関連する学習ビデオアドレスをクリックしてください](https://www.bilibili.com/video/av27122140?from=search&seid=17126909922062909467)

Recommended Posts

Dockerテクノロジー(コンテナー仮想化テクノロジー)
コンテナ調査ノートCentOS7はDockerをインストールします
DockerでのCentOSコンテナのインストールはMySQLを使用します