GNU/Linux >> Linux の 問題 >  >> Ubuntu

Dockerを実用的な方法で使用する方法(パート1-はじめに)

パート1:用語の概要

序文

新しく導入された概念やテクノロジーを早期に採用する人にとって、これらがサービスの開発と提供の方法を根本的に変える可能性がある場合、完全に混乱することは珍しいことではありません。特に、誰もがDockerのようなものについて話し、それがどれほど素晴らしく、ゲームを変えるかについて話すとき。この混乱は、私たちが早い段階で物事を試し、この新しく導入されたテクノロジーの全体的な概念と背景を把握せずに、それらをテストするために急いでいるときに発生します。

これが、Linuxコンテナーのトレンド全体を放棄した可能性がある理由、または賛成派と反対派からの物議を醸す記事を読んだためです。一連の記事のこの最初の部分では、Linuxコンテナーを使用するための適切なインスピレーションが必要な開発者、システム管理者、Q / Aエンジニア、さらには愛好家のために、すべてを明確にし、すべてを正しい視点に置くように最善を尽くします。特別なIT問題を解決します。

最初から、歴史的な出来事や概念について必要な説明をいくつか行い、次にDockerコンテナーの操作を開始する方法を紹介します。このようにして、「コンテナの作成につながった理由」、「ビルディングブロックとは何か」、「それらがどのように機能するか」を理解できるようになります。


コンテナはどのようにして登場しましたか

長年にわたり、サーバーは、単一のハードウェア構成で、単一のオペレーティングシステム(略してOS)を含むものとして使用され、同じマシン上に数千のWebサイトといくつかの初期バージョンのエンタープライズソフトウェアを提供していました。

必要なスケーリングを実現するために、企業は新しいハードウェアを購入し、新しい実装の手順を慎重に計画する必要がありました。この時期、自動化は初期の段階であり、ほとんどの構成は手作業で行われていました。

仮想化

その後、仮想化が登場し、人々は同じハードウェアサーバーを利用して、さまざまな目的で複数の仮想サーバーを生成し、それらを個別に販売できるようになりました。これにより、サーバーハードウェアの所有コストが大幅に削減されただけでなく、何百ものサーバーインスタンスを自動化して簡単に管理する手段も提供されました。

仮想化は、実際には、特別なソフトウェアによってエミュレートされるCPU、RAM、ディスク、ネットワークカードなどのハードウェアコンポーネントを組み立てています。これは、上記のコアコンポーネントを備えたPCをオペレーティングシステム内に構築し、それらを組み立てて実際のPCであるかのように機能させるようなものです。このようにして、仮想PCは、オペレーティングシステムとともにホストと呼ばれる実際のPC内の「ゲスト」になります。

ハードウェア仮想化は約10年前に導入されましたが、2007年からLinuxカーネルに組み込まれているKVM(カーネルベースの仮想マシン)機能を使用して、開発者やsysadminによってさまざまなタイプのサーバーで広く使用されています。Intelの「VT -x」およびAMDの「AMD-V」拡張機能は、任意の数の仮想化オペレーティングシステム(ハードウェアリソースによって制限される)の作成を支援し、すべての開発者は、OSを使用して複数の仮想マシン(略してVM)を安価に作成できます。彼ら。このようにして、必要なOSに応じて、まったく新しいリグや複数のリグを購入することなく、アプリケーションをテストできます。

仮想化の大きな利点の1つは、スナップショットを作成できることです。スナップショットは、正確な時点での仮想マシンの状態です。これは、特定の時点での仮想マシンの「フリーズ」状態と考えることができます。このようにして、開発者またはシステム管理者は、仮想マシンを作成し、特定のOSと必要なツールをインストールして、全体からスナップショットを作成できます。その後、テスト、構成、または実行する必要のあるタスクを開始し、いつでもすぐに前のスナップショットに戻すことができます。

また、仮想マシンをあるホストマシンから別のホストマシンに移行して、特別な構成なしで動作状態を継続することもできます。これは、仮想マシン全体が実際には通常イメージと呼ばれるいくつかの巨大なファイルであるためです。お気に入りのLinuxディストリビューションISOファイルのようなイメージを考えることができます。 ISOファイルには、ライブUSB / DVDからOS全体を実際に実行するために必要なすべてのコンポーネントが含まれているため、仮想マシンイメージと同じように、OSと仮想ハードウェアコンポーネントが含まれています。

上記のすべてにより、仮想プライベートサーバー(VPS)ホスティング会社の業界全体が生まれ、顧客は事前に構成されたサーバーのイメージを任意の目的で即座に起動できます。これらのVPSプロバイダーは通常、メインホストサーバー上にVMのスナップショットを10個または20個持っており、顧客の要求ごとに複数回複製されて、必要な仮想サーバーを提供します。

コンテナ

ご想像のとおり、仮想マシンは、ホストオペレーティングシステム内で実行されるオペレーティングシステム全体です。ゲストオペレーティングシステムは分離されていますが、ホストマシンのハードウェアリソースを共有して利用します。特定のオペレーティングシステムの同じスタック全体を実行している複数のゲストオペレーティングシステムが存在する場合があります。

この状況は、Linuxカーネル開発者とハッカーが軽量プロセス仮想化と呼ばれるアイデアを思い付く機会を生み出しました。そのため、オペレーティングシステム全体を使用する代わりに、仮想OSの「不要な」コンポーネントを削減して、最小限のバージョンを作成することができます。これにより、LXC(Linuxコンテナー)が作成されます。

深く掘り下げる前に、軽量プロセスの仮想化は新しいことではないことに言及する必要があります。 Solarisにはゾーンがあり、BSDには刑務所があり、OpenVZのような他の同様のテクノロジーがあります。問題は、同じ基本概念が他のプロジェクトで使用されている場合、名前や目的が頻繁に変更されることです。すべてが同じというわけではありませんが、基本的な原則はほとんど同じです。彼らは皆、すべてをボトムアップで毎回再構築する手間をかけずに、ソフトウェアサービスを提供する使い捨ての方法を分離、展開、作成したいと考えています。

LXCプロジェクトは、ハードウェア仮想化環境ではなく、オペレーティングシステムレベルの仮想化環境であるという点で、前述の仮想マシンとは異なります。どちらも同じことを行いますが、LXCは、本格的な仮想マシンを作成する代わりに、独自のプロセスとネットワークスペースを持つ仮想環境を介してオペレーティングシステムレベルの仮想化を提供します。結果として、LXC仮想OSのリソース要件は最小限であり、数秒で起動します。

次の画像でわかるように、左側のLXC仮想Ubuntuは、デフォルトのインストールで11MBを使用します。

ドッカー

いつものように、OSの不要な部分を削除するだけでは物事は止まりませんでした。軽量プロセスの仮想化の限界をさらに押し上げることで、さまざまなテクノロジーが実現しました。 2013年、dotCloud(後にDocker Inc.に社名を変更した会社)の開発者がDockerを導入しました。

Dockerはオープンソースエンジンであり、その主な焦点は、ソフトウェアコンテナー内のアプリケーションの展開と、Linuxでのオペレーティングシステムレベルの仮想化の自動化です。 Dockerコンテナは、仮想マシンやlxcとは異なり、個別のオペレーティングシステムを必要とせず、含まれていません。代わりに、Linuxカーネルの機能に依存し、リソースの分離を使用します。

Dockerコンテナーは、Dockerイメージから作成されます(スナップショットを思い出してください)。 Dockerコンテナは、isoファイルから実行されているWebアプリケーションのライブ状態として想像できます。ただし、今回は、この例ではdocker imageに相当するisoに、アプリケーションとその依存関係のみが含まれています。

2番目の部分で説明するdockerの優れた機能の1つは、dockerファイルです。 Dockerファイルは、Dockerイメージを作成するために必要なすべての手順を含むレシピです。カスタマイズできる「すぐに使える」Dockerファイルは文字通りたくさんあり、そのまま使用できます。

概要

ご想像のとおり、本格的なサーバーからOS仮想化、そしてコンテナに移行する範囲は、必要なのがアプリケーション層だけである場合に、オペレーティングシステム全体を構築、展開、保守する負担を取り除くことです。

この紹介では、Dockerコンテナーの作成につながったいくつかの基本的なイベントを紹介しようとしました。また、さまざまな仮想化テクノロジーの違いとそれらが適用される場所を理解できるように、その概念のいくつかを単純化しようとしました。

来週公開される第2部では、Dockerコンテナを実際にインストールして使用する方法を正確に紹介しますので、ご期待ください。


Ubuntu
  1. Ubuntu20.04にDockerをインストールして使用する方法

  2. DockerComposeの使用方法

  3. DockerInspectコマンドの使用方法

  1. プライベートDockerレジストリを設定して使用する方法

  2. Dockerfileを使用してDockerイメージを構築する方法

  3. プロキシを使用するように docker を構成する方法

  1. NFS Dockerボリューム:作成および使用方法

  2. Ubuntu20.04にDockerをインストールして使用する方法

  3. Ubuntu18.04にDockerをインストールして使用する方法