1. Docker とは何ですか? 仮想マシンについては誰もが知っています。Windows に Linux 仮想マシンをインストールすることは、ほとんどのプログラマーにとって一般的なソリューションです。同社の本番環境のほとんども仮想マシンです。仮想マシンは物理的なハードウェアリソースを仮想化し、オンデマンドで割り当てて使用します。仮想マシンは実際のオペレーティングシステムとまったく同じように使用されます。不要になった場合は、仮想マシンファイルを削除するだけでリソースを再利用できるため、集中管理に非常に便利です。 仮想マシンは非常に大きく、多くのハードウェア リソースを消費するため、Linux では別の仮想化テクノロジである Linux Containers (略称 LXC) が開発されました。これは、仮想マシンのように完全なオペレーティング システムをシミュレートするのではなく、仮想マシンと同じ効果を提供します。仮想マシンがオペレーティング システム レベルで分離されているのに対し、コンテナーはプロセス レベルで分離されています。このレベルの分離の利点は、間違いなく高速性とリソースの節約であると考えられます。 Docker は Linux コンテナのパッケージであり、シンプルで実用的なユーザー インターフェイスを提供します。現在最も人気のある Linux コンテナ ソリューションです。 百科事典からの定義は次のとおりです。 Docker は、Go 言語をベースとしたオープンソースのアプリケーション コンテナ エンジンで、Apache 2.0 プロトコルに準拠しています。Docker を使用すると、開発者はアプリケーションと依存パッケージをポータブル コンテナにパッケージ化し、一般的な Linux マシンに公開できます。また、仮想化も実現できます。コンテナーは完全なサンドボックス メカニズムを使用し、相互にインターフェイスを持ちません。 2. Docker はどのような問題を解決しますか? 1. 仮想マシンのリソース消費の問題を解決します。 仮想マシンはサーバー オペレーティング システム上で実行され、クライアント オペレーティング システムは仮想マシン上で実行され、ユーザー アプリケーションはクライアント オペレーティング システム上で実行されます。サーバーのリソース オーバーヘッドの 80% は、ハードウェア仮想化とクライアント オペレーティング システム自体に費やされます。 図1. 仮想マシンアーキテクチャとコンテナアーキテクチャの違い 図1に示すように、Dockerコンテナ技術を使用すると、コンテナ上で仮想サーバーが稼働し、仮想サーバー上でユーザーのアプリケーションが稼働します。仮想サーバーとサーバーのOSは同じカーネルを使用し、仮想サーバーのファイルシステムは物理サーバーのファイルシステムを利用しますが、分離されています。各仮想サーバーが独自の独立したファイルシステムを持っているように見えます。物理サーバー上に仮想ブリッジデバイスが確立され、各仮想サーバーは仮想ブリッジデバイスを介してネットワークに接続されます。仮想サーバーは物理サーバーのCPU、メモリ、ハードディスクを直接使用し、ハードウェアを仮想化しません。そのため、ハードウェア仮想化やクライアントOSが占有するリソース消費がありません。各仮想サーバーのパフォーマンスは物理サーバーのパフォーマンスに近くなります。 Linux 仮想マシンを実行する一般的な家庭用コンピューターは非常に遅いかもしれませんが、Docker を使用すると、数十または数百の仮想 Linux サーバーを仮想化できます。強力なサーバーに切り替えると、Docker を使用してプライベート クラウド サービスを提供できます。 2. 迅速な展開。 ソフトウェア開発の難しさは環境設定にあります。オペレーティングシステムが正しくセットアップされ、さまざまなコンポーネントやライブラリが正しくインストールされていないと、自分のコンピュータで動作するソフトウェアが別のマシンでは動作しない可能性があります。たとえば、Java で開発された Web システムを展開するには、コンピューターに Java と正しい環境変数がインストールされている必要があり、さらに Tomcat と nginx もインストールされている必要がある場合があります。機械を変更する場合は、最初からやり直さなければなりません。 docker を使用すると、アプリケーションとその依存関係を 1 つのファイル (docker イメージ ファイル) にパッケージ化できます。このファイルを実行すると、仮想サーバーが起動します。仮想サーバーでアプリケーションまたはサービスを起動すると、実際の物理マシンで実行するのと同じです。docker を使用すると、一度デプロイすればどこでも実行できます。自動リリースにも使用できます。 3. 使い捨ての環境を提供する。 たとえば、他の人のソフトウェアをローカルでテストしたり、継続的インテグレーション中にユニットテストとビルド環境を提供したり、仮想サーバーを起動またはシャットダウンしたりすることは、プロセスを起動またはシャットダウンするのと同じくらい簡単かつ高速です。 4. 柔軟なクラウド サービスを提供する。 Docker コンテナはいつでもオン/オフを切り替えることができるため、動的な拡張や縮小に非常に適しています。 5. マイクロサービス アーキテクチャを構築します。 複数のコンテナを通じて 1 台のマシンで多数の仮想サーバーを実行できるため、マイクロサービス アーキテクチャまたは分散アーキテクチャを 1 台のマシンでシミュレートできます。 3. Dockerのインストール、展開、使用 この記事では、Ubuntu 18.04 システムのインストールと使用方法について説明します。その他のオペレーティング システムについては、https://docs.docker.com/ の公式ドキュメントを参照してください。 1. Dockerエンジンをインストールする Dockerインストールパッケージの最新バージョンを入手する aaron@ubuntu: ~$ wget -qO- https://get.docker.com/ | sh 上記のコマンドを実行し、現在のユーザー パスワードを入力すると、最新バージョンの docker インストール パッケージが自動的にダウンロードされ、自動的にインストールされます。 インストールが完了すると、次のプロンプトが表示されます。 非ルートユーザーとしてDockerを使用する場合は、次の点を考慮する必要があります。 次のようにして、ユーザーを「docker」グループに追加します。 sudo usermod -aG docker アーロン これを有効にするには、ログアウトして再度ログインする必要があることに注意してください。 警告: ユーザーを「docker」グループに追加すると、実行権限が付与されます。 ルート権限を取得するために使用できるコンテナ Dockerホスト。 https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface を参照してください。 詳細についてはこちらをご覧ください。 非ルートユーザーとしてdockerを直接実行したい場合は、以下を実行する必要があります。 sudo usermod -aG docker アーロン コマンドを実行して、ユーザー aaron を docker ユーザー グループに追加し、再度ログインします。そうしないと、次のエラーが報告されます。 docker: unix:///var/run/docker.sock の Docker デーモン ソケットに接続しようとしたときに、アクセスが拒否されました: http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create を投稿: unix /var/run/docker.sock をダイヤル: connect: アクセスが拒否されました。 「docker run --help」を参照してください。 次のコマンドを実行して Docker エンジンを起動します。 aaron@ubuntu:~$ sudo サービス docker を開始 インストールが成功すると、システムは起動時に自動的に起動するように設定されます。手動で設定する場合は、次のコマンドを実行します。 sudo systemctl でdockerを有効にする sudo systemctl dockerを起動します 試運転 aaron@ubuntu:~$ sudo docker run hello-world 2. Dockerの使用 1. Dockerのアーキテクチャを理解する 使用する前に、まず次の図に示すように、Docker のアーキテクチャを理解してください。 Docker アーキテクチャ図
ユーザーは、Docker クライアントを直接使用します。 2. Dockerコマンド dockerコマンドのヘルプ情報を表示する docker --help #すべてのdockerコマンドのヘルプ情報 docker COMMAND --help #特定のdockerコマンドのヘルプ情報 COMMAND Docker情報を見る docker情報 コンテナ プール、使用済みデータ サイズ、合計データ サイズ、基本コンテナ サイズ、現在実行中のコンテナの数などを確認できます。 画像を検索し、インターネット上で他のユーザーが作成したコンテナ イメージを検索します。 docker 検索 ubuntu docker 検索 Centos Ubuntu イメージ ここから、一部のイメージには PHP、Java、Ansible などのアプリケーションが統合されていることがわかります。独自のアプリケーションやサービスを含むイメージ ファイルを作成し、他の人に渡すこともできます。追加の操作や仮想マシンなどのリソースを消費することなく、Docker を使用して直接コンテナーを開くことができます。アプリケーションやサービスを実行できます。とても便利ではありませんか? ! 他の人が作成したコンテナ イメージをインターネットからダウンロードします。 docker プル CentOS docker プル Ubuntu ダウンロードしたコンテナイメージファイルをインポートする docker load < image_xxx.tar ミラーを見る Docker イメージ docker イメージ -a 画像を確認する docker で Ubuntu を検査する コンテナイメージの基本情報を確認できます。 画像を削除するには、画像IDで削除を指定します docker rmi ubuntu すべての画像を削除 docker rmi $(docker イメージ -q) ミラー履歴を表示 docker 履歴 Ubuntu コンテナの実行 Docker コンテナは、ファイル システム、システム ライブラリ、シェル環境など、プロセスの実行に必要なリソースを含むサンドボックス内で実行されるプロセスとして理解できます。ただし、このサンドボックスではデフォルトではプログラムは実行されません。コンテナを起動するには、サンドボックス内でプロセスを実行する必要があります。このプロセスはコンテナの唯一のプロセスなので、プロセスが終了するとコンテナも完全に停止します。 Ubuntuコンテナを実行し、対話型環境に入ります aaron@ubuntu:~$ docker run -i --name="ubuntu1" --hostname="ubuntu1" ubuntu /bin/sh /etc/hosts を cat する 127.0.0.1 ローカルホスト ::1 ローカルホスト ip6-ローカルホスト ip6-ループバック fe00::0 ip6-ローカルネット ff00::0 ip6-mcastプレフィックス ff02::1 ip6-全ノード ff02::2 ip6-オールルーター 172.17.0.2 Ubuntu1 だれだ 根 ユーネーム -a Linux ubuntu1 4.15.0-34-generic #37-Ubuntu SMP 月曜日 8月 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 上記のコマンドでは、ubuntu1 という名前のコンテナを作成し、コンテナのホスト名を ubuntu1 に設定しました。/bin/sh コマンドを入力した後、hosts ファイルの内容を出力し、カーネル バージョン (ローカル オペレーティング システムのバージョンと一致している) を確認しました。新しいオペレーティング システムでコマンドを使用するのと同じように、ここではさまざまな Linux コマンドを使用できます。同様に、新しいターミナルでubuntu2コンテナを作成し、 ドッカーps 実行中のコンテナを表示します。 実行中のコンテナを表示する コンテナを終了するには、exit と入力します。 docker run -d ubuntu 長い英数字の文字列が表示されます。これがコンテナ ID です。コンテナには継続的に実行されているプロセスが必要です。そうでない場合、コンテナはすぐに自動的に終了します。 docker run -d --name='centos3' --hostname='centos3' --mac-address="02:42:AC:11:00:24" docker-centos6.10-hadoop-spark すべてのコンテナを一覧表示する ドッカーps -a 最近起動したコンテナを一覧表示する ドッカーps -l コンテナを確認する docker 検査 Centos1 コンテナに関する情報を取得できます。 コンテナのCIDを取得する docker 検査 -f '{{.Id}}' centos1 コンテナのPIDを取得する docker 検査 -f '{{.State.Pid}}' centos1 コンテナのIPを取得する docker 検査 -f '{{.NetworkSettings.IPAddress}}' centos1 コンテナゲートウェイを取得する docker 検査 -f '{{.NetworkSettings.Gateway}}' centos1 コンテナMACを取得する docker 検査 -f '{{.NetworkSettings.MacAddress}}' centos1 コンテナのIPアドレスを表示する docker 検査 -f '{{.NetworkSettings.IPAddress}}' centos1 コンテナの接続 sshコンテナのIPアドレス パスワードを入力してください: 123456 コンテナが起動したら、別の方法でコンテナに入ることができます。 docker exec -it centos /bin/sh コンテナの実行プロセスのログを表示する docker ログ centos1 コンテナ内で変更されたファイルまたはディレクトリを一覧表示します。一覧には、A 追加、D 削除、C 変更の 3 種類のイベントが表示されます。 docker diff centos1 また、初期のコンテナ イメージ プロジェクトでは、ユーザーまたはシステムは追加/変更/削除されたディレクトリ ファイルを表示できます。 dockerトップcentos1 コンテナ内のファイル/ディレクトリをローカルサーバーにコピーする docker cp centos1:/etc/passwd /tmp/ /tmp/passwd を調べる コンテナ ファイルは、ネットワーク IP アドレスを介してサーバーにコピーすることもできるため、より便利です。 コンテナを停止する docker stop centos1 すべてのコンテナを停止 docker kill $(docker ps -a -q) コンテナを起動する docker スタート Centos1 単一のコンテナを削除する docker stop centos1 docker rm centos1 コンテナを削除する前に、コンテナを停止する必要があります。 すべてのコンテナを削除 docker kill $(docker ps -a -q) docker rm $(docker ps -a -q) 3. ボリュームの概念 データを保存(永続化)し、コンテナ間でデータを共有するために、Docker はボリュームの概念を提案しています。ボリュームはコンテナの特定のディレクトリです。このディレクトリの下のファイルは、コンテナのファイル システムではなく、ホスト マシンに保存されます。 データ ボリュームは、1 つ以上のコンテナーで使用できる特別なディレクトリです。コンテナーのデフォルトのファイル システムをバイパスし、多くの便利な機能を提供します。 注: データ ボリュームの使用方法は、Linux でディレクトリをマウントするのと似ています。コンテナ内のマウント ポイントとして指定されたディレクトリ内のファイルは非表示になり、マウントされたデータ ボリュームのみが表示されます。 データボリュームの作成と使用 mkdir -p /root/ボリューム1 mkdir -p /root/ボリューム2 docker run -d -v /volume1 --name='centos5' docker-centos6.10-hadoop-spark docker run -d -v /root/volume1:/volume1 --name='centos6' docker-centos6.10-hadoop-spark docker run -d -v /root/volume1:/volume1 -v /root/volume2:/volume2 --name='centos7' docker-centos6.10-hadoop-spark docker run -d -v /root/volume1:/volume1:ro --name='centos8' docker-centos6.10-hadoop-spark docker run コマンドを使用してコンテナを作成し、-v フラグを指定してデータ ボリュームを作成し、コンテナにマウントします。複数のデータ ボリュームをマウントできます。ボリュームの読み取り専用属性を設定できます。サーバー マッピングのディレクトリを指定する必要はありません。システムが自動的にディレクトリを指定します。また、docker inspect を使用してマッピングされたパスを表示できます。 これらのコンテナにそれぞれ入り、/volume1 ディレクトリと /volume2 ディレクトリを表示します。 データ量の共有 あるコンテナに別のコンテナのデータ ボリュームへのアクセスを許可する場合は、-volumes-from パラメータを使用します。 データボリュームコンテナ コンテナ間で共有する必要がある継続的に更新されるデータがある場合は、データ ボリューム コンテナを作成するのが最適です。 データ ボリューム コンテナーは、実際には、他のコンテナーがマウントするためのデータ ボリュームを提供するために特別に使用される通常のコンテナーです。 (1)dbdataという名前のデータボリュームコンテナを作成する docker run -d -v /dbdata --name dbdata docker-centos6.10-hadoop-spark (2)他のコンテナで--volumes-fromを使用して、dbdataコンテナのデータボリュームをマウントします。 docker run -d --volumes-from dbdata --name db1 docker-centos6.10-hadoop-spark docker run -d --volumes-from dbdata --name db2 docker-centos6.10-hadoop-spark これにより、コンテナ間でのデータ共有が可能になります。 これらのコンテナにそれぞれ入り、/volume1 ディレクトリと /volume2 ディレクトリを表示します。 4. 独自の画像を作成して公開する コンテナの変更を保存し、新しいコンテナイメージを送信する docker コミット centos1 centos111 既存のコンテナを送信して、新しいコンテナ イメージを作成します。docker イメージを使用して、centos111 イメージを確認します。このメソッドは、新しいコンテナ イメージを作成します。 ミラーを見る Docker イメージ リポジトリ タグ イメージ ID 作成 サイズ centos111 最新 d691a75ee371 23 分前 501.5 MB 新しいコンテナイメージに基づいてコンテナを作成する docker run -d --name='centos111' centos111 コンテナを表示 docker 検査 centos111 イメージのエクスポートとインポート あるマシンから別のマシンにイメージを移行する必要がある場合は、イメージをエクスポートしてインポートする必要があります。 docker を保存 docker-centos6.10-hadoop-spark > docker-centos6.10-hadoop-spark2.tar または docker save -o docker-centos6.10-hadoop-spark docker-centos6.10-hadoop-spark2.tar 他の方法と同じように、scp コマンドを使用して、docker-centos6.10-hadoop-spark2.tar をマシン B にコピーします。 docker ロード < docker-centos6.10-hadoop-spark2.tar または docker ロード -i docker-centos6.10-hadoop-spark2.tar コンテナイメージの公開 docker push centos6.8-lamp1 コンテナをネットワークに公開します。 5. Dockerネットワーク docker が起動すると、ホスト マシン上に docker0 という名前の仮想ネットワーク インターフェイスが作成されます。 RFC 1918 で定義されているプライベート アドレスから未使用のホスト アドレスとサブネット マスクをランダムに選択し、docker0 に割り当てます。デフォルトの選択は 172.18.0.1/16 です。16 ビットのサブネット マスクは、コンテナーに 65534 個の IP アドレスを提供します。 Docker0 は通常のネットワーク インターフェイスではなく、バインドされた他のネットワーク カード間でパケットを自動的に転送し、コンテナーがホストや他のコンテナーと通信できるようにする仮想イーサネット ブリッジです。 Docker はコンテナを作成するたびに、パイプの両端に似たピア インターフェイスのペアを作成し、一方の側でもう一方の側から送信されたデータ パケットを受信できるようにします。 Docker は、ピア インターフェイスの 1 つを eth0 としてコンテナーに接続し、ホストの名前空間に応じて、もう 1 つを vethAQI2QT などの一意の名前で保持します。すべての veth* インターフェイスを docker0 ブリッジ NIC にバインドすることにより、docker はホストとすべての docker コンテナの間に共有仮想サブネットを作成します。 Docker NAT ネットワーク デフォルトでは、docker コンテナは NAT 経由でネットワークにアクセスします。docker が起動すると、ホスト上に docker0 という仮想ネットワーク インターフェイスが作成されます。Docker0 は、バインドされた他のネットワーク カード間でデータ パケットを自動的に転送する仮想イーサネット ブリッジです。これにより、コンテナとホストが相互に、またコンテナ間で通信できるようになります。 docker0 のゲートウェイ アドレスは 172.18.0.1、マスクは 16 ビット、IP アドレスは 65534 個提供されます。 NAT モードでは、仮想マシン コンテナーは外部ネットワーク (ホスト マシンの外部) にアクセスできますが、ホスト マシン以外のマシンはコンテナー イントラネットにアクセスできません。 Docker ブリッジ ネットワーク Docker コンテナはブリッジを介してネットワークにアクセスできます。 ブリッジ モードでは、仮想マシン コンテナーは外部ネットワーク (ホスト マシンの外部) にアクセスでき、ホスト マシンの外部のマシンもコンテナー イントラネットにアクセスできます。 6. Docker パイプワーク Docker 自体のネットワーク機能は比較的単純であり、多くの複雑なアプリケーション シナリオに対応できません。そのため、パイプワーク、ウィーブ、フランネルなど、Docker のネットワーク機能を改善するために使用されるオープンソース プロジェクトが数多くあります。 Pipework は、Docker エンジニアの Jérôme Petazzoni が開発した Docker ネットワーク構成ツールです。200 行以上のシェルで実装されており、使いやすいです。 配管の設置 git クローン https://github.com/jpetazzo/pipework cp パイプワーク/パイプワーク /bin/ または wget [http://172.17.1.240/docker/software/pipework](http://172.17.1.240/docker/software/pipework) chmod a+x 配管 cp パイプワーク /bin/ コンテナの実行 docker run -d --net='none' --name='centos9' docker-centos6.10-hadoop-spark コンテナ ネットワークを設定し、ブリッジ docker0 に接続します。ゲートウェイは、IP アドレスの後に @ を追加して指定します。 パイプワーク docker0 centos9 172.18.0.100/[email protected] 7. Docker ネットワーク ポート マッピング コンテナが docker0 仮想ネットワークを使用する場合、コンテナのネットワークは 172.17.0.0/16 になります。コンテナは NAT を介して外部ネットワークにアクセスできますが、外部ネットワークは内部ネットワークにアクセスできません。コンテナが br0 仮想ネットワークを使用する場合、コンテナとサーバーは同じネットワーク アドレス セグメントに存在でき、コンテナは外部ネットワークにアクセスでき、外部ネットワークもコンテナ ネットワークにアクセスできます。 コンテナの実行 docker run -d -p 38022:22 --name='centos10' docker-centos6.10-hadoop-spark コンテナの接続 ssh ローカルホスト -p 38022 他のサーバーでは、物理サーバーとポートにアクセスすることでコンテナーにアクセスできます。一度に複数のポートをマップできます。 docker run -d -p 38022:22 -p 38080:80 --name='centos11' docker-centos6.10-hadoop-spark 実装の原則は、サーバー上の iptables を介して転送することです。もちろん、iptables を通じてコンテナの IP アドレス全体を転送することもできます。 4. 結論 コンテナはプロセスレベルであるため、仮想マシンに比べて多くの利点があります。 (1)高速コンテナ内でアプリケーションを起動すると、仮想マシン内のプロセスではなく、基盤となるシステム内のプロセスが直接起動されます。したがって、コンテナを起動することは、オペレーティング システムを起動するのではなく、ローカル マシン上でプロセスを起動することと同じであり、はるかに高速です。 (2)リソース使用量が少ない:コンテナは必要なリソースのみを占有し、未使用のリソースは占有しません。一方、仮想マシンは完全なオペレーティングシステムであるため、必然的にすべてのリソースを占有します。さらに、仮想マシンは排他的なリソースを持ちますが、複数のコンテナはリソースを共有できます。 (3) サイズが小さい: コンテナには使用するコンポーネントのみを含める必要がありますが、仮想マシンはオペレーティングシステム全体のパッケージであるため、コンテナファイルは仮想マシンファイルよりもはるかに小さくなります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...
目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...
背景この記事では主に、MySQL が更新ステートメントを実行するときに、元のデータと同一の (つまり...
序文:パーティショニングはテーブル設計パターンです。一般的に、テーブル パーティショニングとは、条件...
Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...
目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...
目次序文レンダリングsetTable コンポーネント使用結論序文フォームを使用して PC 側のプロジ...
需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...
多くの人が、ウェブサイト上のテキストはデザインする必要があるのかと疑問に思うかもしれません。多く...
Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...
1. システムインストールパッケージ yum -y インストール make gcc-c++ cmak...
私は W3school のチュートリアルに従いました。チュートリアルはとても良いと思います。各セクシ...
1.まずAlibaba Cloudのウェブサイトにログインしてアカウントを登録し、サーバータイプを...
序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...
MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...