Dockerを理解して使いたいならこの記事だけで十分です!

Dockerを理解して使いたいならこの記事だけで十分です!

Dockerとは何ですか?

翻訳ツールを開いて「Docker」と入力すると、結果に「dock worker」と表示されます。それは正しい! Dock ワーカーはコンテナを移動させるので、今回ご紹介する Docker もコンテナを操作します。このコンテナは、静的な意味ではアプリケーション イメージ ファイルであり、動的な意味ではコンテナです。混乱した?まあ、上の写真が説明してくれます。

狭義では Docker はプロセスであり、広義では仮想コンテナです。実際、より専門的な名前はアプリケーション コンテナーです。 Docker プロセスと通常のプロセスの間に違いはありません。通常の申請手続きと同じです。画像ファイルの操作にのみ使用します。したがって、Docker プロセス + ビルドされたアプリケーション イメージ ファイルは、Docker コンテナーと同等になります。この記事で言及されているすべての Docker は、Docker コンテナを指します。

先に進む前に、まずイメージ、コンテナ、ウェアハウスなど、Docker の重要な基本概念を明確にする必要があります。

Docker イメージは VM 仮想マシンのスナップショットに似ていますが、スナップショットよりもはるかに軽量です。スナップショットがわかりませんか?そうすれば、画像をフォルダとして直接考えることができます。 ID または簡単に認識できる名前 + タグによって、固有の対象画像を識別できます。 ImagesID は 64 ビットの文字ですが、通常は区別するのに十分な最初の 12 ビットを使用します。

図に示すように、左側の赤いボックス内の redis:lates と右側の赤いボックス内の 5f515359c7f8 は、両方とも同じイメージとして一意に表現されます。したがって、一般的なイメージには、centos:latest、centos:centos7.1.1503 などの名前を付けることができます。

画像はレイヤー化されています。 Centos イメージなど、オペレーティング システムのみを含む基本イメージがあります。 Redis やその他のデータベース イメージなどのミドルウェア イメージがあります。最後は、特定のアプリケーション サービスを参照するアプリケーション イメージです。アプリケーションイメージは非常に豊富で、いつでもリリースできます。これら3つが順番に重ね合わされます。

したがって、Docker を使用してイメージを構築すると、各コマンドは前のコマンドに基づいて新しいイメージ レイヤーを形成します。下の図に示すように、基本イメージは Centos イメージ、ミドルウェア イメージは 2 つの赤い円、アプリケーション イメージは紫色の円です。このうち、redis+centos の重ね合わせのミドルウェアイメージは、サービス A またはサービス B で使用できるため、重ね合わせの柔軟性が高まります。どちらのイメージも Docker ハブのパブリック リポジトリから取得できます。

Docker コンテナでは、イメージからコンテナを作成できます。これは、スナップショットから仮想マシンを作成するのと似ていますが、より軽量で起動が高速です。アプリケーションはコンテナ内で実行されます。たとえば、最初に Ubuntu イメージをダウンロードし、次に MySQL および Django アプリケーションとその依存関係をインストールして、Ubuntu イメージの変更を完了します。とても便利だと思うアプリケーションイメージが生成されました!このイメージを全員と共有すると、全員がこのイメージを通じてコン​​テナを生成します。コンテナが起動すると、Django サービスが実行されます。

前述のように、コンテナは独立した閉じたコンテナですが、外部にサービスを提供する必要もあるため、Docker ではコンテナの特定のポートを公開できます。 Docker を起動するときに、コンテナの特定のポートをホスト上の任意のポートにマップできます。したがって、複数のサービスがポート 80 を必要とする場合、コンテナーの外部ポートは 80 ですが、ホスト上の任意のポートにマップされるため、競合は発生せず、プロキシを介して競合を解決する必要はありません。コンテナの外部ポートをホストのポートにマッピングするには、次のコマンドを使用します。

Dockerコンテナを起動する

  • docker run -d -p 2222:22 --name コンテナ名 イメージ名
  • -d はコンテナをデーモン化します。つまり、コンテナはバックグラウンドで実行され、コマンドウィンドウを終了しても停止しません。
  • -it コマンドウィンドウが終了すると対話型コンテナの実行が停止します
  • -p ホストポートとコンテナポートのマッピング
  • 8081:80 ホストポート: コンテナによって公開されるポート

ウェアハウス Docker はレジストリです。docker ウェアハウスはコンテナを保存するウェアハウスと同じですが、イメージを保存するには docker が使用されます。リポジトリはパブリックとプライベートに分かれています。パブリックリポジトリ Docker Hub は、多数のイメージファイルを提供します。これらのイメージは直接プルダウンして実行できます。独自のイメージを Docker Hub にアップロードすることもできます。同時に、チームプロジェクト管理用の独自のプライベート倉庫を構築することもできます。

先ほど紹介した基本概念を組み合わせると、Docker のいくつかの概念とその動作を大まかにまとめることができ、これが Docker のライフサイクルです。

下の図を見てください。主に3つのステップがあります。

  1. イメージを開発してビルドし、Dockerリポジトリにプッシュする
  2. Dockerリポジトリからローカルマシンにイメージのコピーをテストまたは維持する
  3. Dockerコンテナを開き、イメージファイルを通じてサービスを提供する

Docker を使用する理由それは何ができるのでしょうか?

Docker を使用する理由まず、現在のソフトウェア業界の問題点から始めましょう。

  • ソフトウェア更新のリリースと展開は非効率的で面倒であり、手動による介入が必要です。
  • 環境の一貫性を確保することは困難です。
  • 異なる環境間の移行コストが高すぎます。

Docker は上記の問題をかなり解決できます。

まず第一に、Docker は非常に使いやすいです。開発の観点から見ると、これはビルド、出荷、実行という 3 つのステップから成るプロセスです。重要なステップは構築フェーズ、つまりイメージ ファイルをパッケージ化する段階です。しかし、テストや運用・保守の観点から見ると、コピーと実行の 2 つのステップしかありません。このイメージを使用すると、プラットフォームから完全に独立して、どこにでもコピーして実行できます。同時に、Docker などのコンテナ技術は独立した実行空間を分離し、システム リソースをめぐって他のアプリケーションと競合することがなく、アプリケーション間の相互影響を考慮する必要もありません。考えるだけで幸せになります。

第二に、イメージをビルドするときに、システム上のサービス プログラムのすべての依存関係が処理されるため、使用時に元のプログラムの依存関係と開発言語を無視できます。テストや運用・保守では、自社の業務コンテンツに重点を置きます。

***、Docker は開発者に開発環境の管理方法を提供し、テスターに​​環境の同期を保証し、運用および保守担当者に移植可能な標準化されたデプロイメント プロセスを提供します。

では、Docker では何ができるのでしょうか?要約すると次のようになります。

  • 構築と配布が簡単
  • アプリケーションを分離し、依存関係を削除する
  • テスト後の迅速な導入と販売

Docker はプロセスレベルの軽量仮想マシンです。従来の仮想マシンとの違いは何ですか?

Docker 仮想マシンは非常に軽量で、単なるプロセスです。 VMなどの従来の仮想マシンとは大きな違いがあります。

違いについては次の図を参照してください。

両者の違いを見てみましょう。 VM のハイパーバイザーはハードウェア仮想化を実装する必要があり、独自のオペレーティング システムも装備する必要があります。仮想マシンのオペレーティング システムは、比較的大量のメモリを占有します。オペレーティング システムには数 GB のメモリがあり、当然ながら起動速度、リソース使用率、パフォーマンスに大きなオーバーヘッドが生じます。ローカルまたは個人のコンピュータ上であれば、影響はそれほど大きくありませんが、クラウドではリソースの非常に大きな無駄になります。

私たちは物事を行うときに、その事柄自体に関係のない問題を考慮しないことがよくあります。たとえば、飛行機を製造する人は、飛行機が急降下する必要があるかどうかを考慮しません。現在のモバイル インターネット アプリケーションの多くでは、オペレーティング システムが関与することはほとんどありません。実際、私たちが主に関心を持っているのはアプリケーション自体であり、VM 仮想マシンの上位層は実行中のランタイム ライブラリとアプリケーションです。仮想マシン全体のスペースは非常に大きいです。しかし、コンテナ化技術であるDocker技術の登場により、オペレーティングシステム層は省略され、複数のコンテナが互いに分離され、ホストオペレーティングシステムとランタイムライブラリを共有するようになりました。

したがって、Docker アプリケーション コンテナーには、VM に比べて次のような利点があります。

  • 起動速度が速い。コンテナの起動は基本的にプロセスを開始するだけなので、数秒で起動しますが、VM の場合は通常、より長い時間がかかります。
  • リソース使用率が高く、通常の PC では数百または数千のコンテナを実行できます。10 個の VM を実行してみてください。
  • パフォーマンスのオーバーヘッドは小さいですが、VM は通常、OS の機能を完了するために追加の CPU とメモリを必要とし、追加のリソースを占有します。

したがって、多くのモバイル インターネット アプリケーションやクラウド コンピューティングのバックエンド ノードでは、物理マシンや仮想マシンの代わりに Docker を使用できます。たとえば、Tencent Maps の多くのバックエンド サービスは、基本的に Docker デプロイメントに移行されています。

Docker のアーキテクチャとは何ですか?どのような基盤技術を使用していますか?

これまでたくさん話してきましたが、まだ混乱しています。以下は技術アーキテクチャの詳細な紹介です。上記の利点を実現するために、最下層ではどのような技術が使用されていますか?

Docker テクノロジー アーキテクチャ図:

Docker が依存する基盤技術の観点から見ると、元の Docker エコシステムは Windows プラットフォーム上で直接実行できず、Linux システムのみをサポートしています。その理由は、Docker が Linux カーネルの最も基本的な 3 つのテクノロジーに依存しているためです。名前空間は最高レベルの分離として機能し、Docker コンテナを分離して、コンテナが独立したホスト名、IP アドレス、PID を持つようにすると同時に、コンテナ内で実行されているプロセスがコンテナ外の他のプロセスを認識したり影響を与えたりできないようにします。 Cgroups は、使用されるホスト リソースを考慮および制限するためのコンテナーの重要な機能です。

たとえば、CPU、メモリ、ディスクなど、ユニオン FS は主にイメージをサポートし、コピーオンライト技術を使用して、全員が特定のレイヤーを共有できるようにし、いくつかの異なるレイヤーを異なるメモリに保存できるようにします。 Libcontainer は、上記 3 つのテクノロジーをカプセル化するライブラリです。

Docker エンジンは、コンテナの操作を制御し、イメージ ファイルをプルするために使用されます。

Docker をインストールするには? Docker の使い方は?

インストールする前に、Docker を体験する前に、Linux システム カーネルのバージョンが 3.10 以降であり、システムが 64 ビットであることを確認する必要があります。

uname -ir を使用して、要件が満たされているかどうかを確認します。

Dockerのインストール

スクリプトを使用して docker をインストールするのは非常に簡単です。

1. 最新のDockerインストールパッケージを入手する

  1. nicktang@nicktang-virtual-machine:~$ wget -qO- https://get.docker.com/ |シュ

現在のユーザーのパスワードを入力すると、スクリプトがダウンロードされ、Docker と依存パッケージがインストールされます。


上記の画像が表示されたらインストールは完了です。

2. dockerバックグラウンドサービスを開始する

  1. root@nicktang-virtual-machine:/data # sudo service docker start #デーモンプロセスを起動します 
  2. root@nicktang-virtual-machine:/data # docker -v

バージョン番号が表示されるということは、Docker が正常にインストールされていることを示します。簡単ですよね?欠けているのは鏡だけです。自分で作るか、公共の倉庫から入手するかはあなた次第です。

  1. root@nicktang-virtual-machine:/data # sudo service docker stop #デーモンプロセスをシャットダウンします

Docker の使用

Dockerの使い方について、主に【追加・削除・確認】の側面からDockerの使い方を解説します。なぜ[変化]がないのでしょうか?私の意見では、Docker コンテナに問題が発生した場合、それを修復する必要はまったくありません。コンテナを停止して削除し、再度起動する方が高速です。したがって、次のようないくつかの基本的なコマンドを習得するだけで済みます。

[チェック] 既存のローカルDockerイメージを表示する

[追加] イメージを実行します。つまり、コンテナを起動します。docker run イメージ名、たとえば、docker run centos を実行します。

このコマンドを入力すると、3 つのことが実行されます。

  1. ローカルに hello-world イメージがあるかどうかを確認します。はいの場合は、2 番目の手順をスキップします。いいえの場合は、次の手順を 1 つずつ実行します。
  2. このイメージをダウンロードするために自動的にdocker hubに移動します
  3. コンテナにイメージをロードして実行するだけです

docker イメージを使用して表示すると、centos イメージがローカルに追加されます。

「最新」タグは、centos システム イメージの最新バージョンであることを意味します。利用できないイメージはDocker Hubから取得されるため、[追加]としてカウントされます。

[追加] 指定したイメージファイルをプルする docker pull イメージ名: TAG

上記の直接実行方法では、docker hub 内の最新のイメージがプルされますが、特定のイメージ ファイルをプルする必要がある場合があり、その場合は docker pull コマンドを使用してプルする必要があります。公式サイトから画像ファイルを取得するのは通常時間がかかるため、アクセラレータ技術を使用して国内の画像リポジトリから取得することができます。

[チェック] すべてのコンテナを表示する docker ps -a を使用すると、実行中のコンテナと停止中のコンテナを含むすべてのコンテナを表示できます。

最初のフィールドは起動されたコンテナの ID であり、2 番目のフィールドはコンテナが生成された基になったイメージです。ただし、上記のコマンドはコンテナを一時的に起動するだけです。上図のステータスは exited(0) であり、コンテナが終了ステータスにあることを示しています。コンテナをバックグラウンドで実行したい場合は、デーモン コンテナを起動する必要があります。起動コマンドに -d パラメータを追加するだけです。つまり、docker run -d centos です。

[確認] イメージ/コンテナの特定情報を表示する docker examine イメージID(イメージ名)/コンテナID(コンテナ名) docker examine centos

このコマンドは、イメージまたはコンテナの詳細の JSON 文字列を返します。コンテナのID、IP、バージョン、メインプログラムなど多くの情報が含まれており、この情報をもとに二次開発を行うことができます。このコマンドに -f パラメータを追加すると、redis コンテナの IP アドレス、メモリ情報、CPU 使用率など、必要な情報を指定できます。

  1. docker examine -f '{{.NetworkSettings.IPAddress}}' [ID/名前]

[チェック] コンテナ docker run -it centos を入力してインタラクティブコンテナを起動します

- コンテナターミナルと現在のターミナルの関連付けが完了し、現在のターミナルの表示がコンテナターミナルの表示に切り替わります。

コンテナのディレクトリ構造を見てみると、物理マシンのディレクトリ構造と全く同じであることがわかりました。このため、Docker コンテナを仮想マシンと呼ぶ人もいます。

出口はコンテナターミナルから出ることができます。

[削除] コンテナを削除します。docker rm コンテナ ID。複数のコンテナを削除するには、コンテナ ID をスペースで区切ります。

Docker を使用して継続的インテグレーション、自動配信、自動デプロイメントを完了するにはどうすればよいですか?

最近では、会うときに自動化や持続可能性について話さないと恥ずかしいことになります。したがって、継続的インテグレーション、自動配信、自動デプロイメントについても理解する必要があります。しかし、上であれだけ述べた後では、Docker にこれら 3 つの機能があることに気づきませんでした。はい、Docker にはこの機能はありませんが、上記の 3 つの自動化された手順を完了するには Docker に依存します。 Docker はこれらのプロセスの実装の基盤であり、ソフトウェア開発と同様に、ソフトウェア コードは基盤であり、開発ツールは補助的なものです。完全な自動化プロセスを構築するには、github+jenkins+registry の助けが必要です。

継続的インテグレーションと自動デプロイメントの原則を次の図に示します。

  1. RD はコードを Git リポジトリまたは SVN およびその他のコード サーバーにプッシュし、Git サーバーはフックを通じて Jenkins に通知します。
  2. jenkine は git コードをローカルに複製し、dockerFile ファイルを通じてコン​​パイルします。
  3. 新しいバージョンのイメージをパッケージ化して生成し、ウェアハウスにプッシュし、現在のコンテナを削除して、新しいバージョンのイメージで再実行します。

プロセス全体を通して、RD は 3 つのコマンドを入力するだけです: Git add *; Gitコミット –m “”; Git プッシュにより、継続的インテグレーション、自動配信、自動デプロイメントが完了します。後ほど、ケースを使用してこのプロセスの魔法を実証します。

Docker は容量を自動拡張できるので非常に便利です。一般的に、容量を自動的に拡張する方法は 2 つあります。 1つはDockerの容量を拡張すること、もう1つはDockerノードの数を拡張することです。最初の方法は構成ファイルを変更することであり、2 番目の方法はそれをコピーして実行するだけでノード拡張を完了することです。

要約する

Docker は非常に軽量ですが、1 台のマシンにあまり多くのアプリケーションをデプロイすることはお勧めしません。同時に、それらを異なる方法で展開する必要があります。それはどういう意味ですか?これは、大量のコンピューティング、大容量のメモリ、頻繁な IO 操作を必要とするアプリケーションなど、一貫性のないシステム リソース要件を持つアプリケーションを同じホスト マシンに展開することを意味します。

著者: 唐文光: テンセントのエンジニア、ワイヤレス研究開発部門のマップテスト担当

<<:  マルチクラウドコンピューティングには慎重なITコスト配分が必要

>>:  ビッグクラウドは新年まで幸運をもたらします

推薦する

中央銀行はビットコイン取引サイトとの交渉を強化し、資金調達チェーンを完全に遮断することを望んでいる。

中央銀行は再び第三者決済と中央銀行と協議し、ビットコインの資金調達チェーンを完全に遮断することを望ん...

K8s とは何ですか? また、そのアーキテクチャは何ですか?

あなたはプログラマーです。コードを使用してブログ アプリケーション サービスを作成し、クラウド プラ...

クラウドプラットフォーム上で分散ストレージプールを構築し実装した経験について話す

1. 概要現在、クラウドプラットフォームが広く利用されています。クラウド プラットフォームの IAA...

chicagovps 簡単なレビュー

私は chicagovps.net から 2G メモリの VZ を購入しました。これには 4 コアの...

コンピュータ ルームとクラウド コンピューティング データ センターは同じですか?違いは何ですか?

まず、外部に提供されるサービスが異なります。現在稼働している多くのデータセンターを含む初期のデータセ...

エンタープライズ ウェブサイトの最適化: 検索ボリュームは大きいが競争率が低いキーワードを見つける方法

エンタープライズ Web サイトの最適化: 検索ボリュームは大きいが競争は少ないキーワードを見つける...

2019年のクラウドコンピューティングのレビュー:5G+AI+クラウドがトレンドになり、クラウドゲームが次のホットスポットになる可能性

2019年へのカウントダウンが始まりました。クラウド コンピューティング市場を振り返ると、変化と課題...

ウェブマスターは SEO にいくら支払うのでしょうか?

もっと多くを得たいと思ったとき、私たちは必ず、得るものよりはるかに多くを与えることになります。私を例...

7つの省庁が共同でインターネット金融法の制定を調査

記者らは昨日、国務院の関連指示に基づき、インターネット金融の発展以来最大規模の政府調査が8月1日に開...

SEOを学ぶ5つの側面を探る

SEO に直面すると、多くの人が戸惑います。始め方がわからない人、理解できないと思う人、一生懸命努力...

Weiboマーケティングの時代に、役立つWeiboマーケティング手法はあるのでしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo は、企業のニ...

ロングテールキーワードをうまく活用すれば、Baiduの重みを簡単に得ることができます。

以前、ある男性が朱偉坤に友好リンクの交換を依頼しました。私はどのウェブサイトかと尋ねました。彼は小説...