コンテナは何年もの間流行語になっています... しかし、それらは正確には何ですか?
コンテナーは、コンピューター上で仮想化されたアプリケーションを実行する方法であり、仮想マシンに似ていますが、異なる基盤となるテクノロジーのセットを使用します。 理解するのは複雑かもしれませんが、すべてを実行するためには不可欠です。 マインクラフト サーバーを Google に送信します。 そして、それらを設定する方法を説明します。
Linux は、移植性、モジュール性、安定性に重点を置いて構築されたオペレーティング システムです。 Linux はサーバーから電子レンジ、ビデオ ゲーム機に至るまで、あらゆるものに使われています。 コンテナーは Linux 上での実行に限定されませんが、コンテナーの背後にあるテクノロジーは Linux に最適であり、Linux 上で最適に実行されます。 Linux を初めて使用する場合は、こちらをチェックすることをお勧めします。 初心者向けガイド 飛び込む前に。
コンテナは仮想マシンですか?
コンテナーは複雑なトピックになる可能性がありますが、次の 1 つの重要な点から始めるのが最善です。コンテナーとは ない 仮想マシン。 仮想マシンは、ハイパーバイザーとして知られるもので実行される特定のハードウェアとそのソフトウェアのシミュレートされたバージョンです。 VirtualBox や マルチパス、ハイパーバイザーを使用したことになります。
ハイパーバイザーは通常、独自のオペレーティング システム (タイプ 1 ハイパーバイザーと呼ばれる) として、または Windows や Ubuntu などの別のオペレーティング システム (タイプ 2 ハイパーバイザー) の範囲内で実行されます。 ハイパーバイザーの役割は、ゲスト オペレーティング システムの実行に必要なシミュレートされたハードウェアをゲスト オペレーティング システムに提供することです。 これにより、完全なオペレーティング システムがその上で実行できるようになります。 これには、シミュレートされた CPU や RAM からデータ バス、ディスク ドライブ、ネットワーク アダプターに至るまで、あらゆるものが含まれます。 このシミュレーションは計算コストがかかるため、通常、仮想マシンには大幅なオーバーヘッドが発生します。
では、コンテナとは何でしょうか?
コンテナは、ホスト システム上の隔離された環境でソフトウェアを格納して実行するという点で、仮想マシンに似ています。 ただし、コンテナーはホスト オペレーティング システムに直接依存することで、従来のハードウェア仮想化を置き換えます。 コンテナーはホスト オペレーティング システムのライブラリとバイナリを共有し、コンテナーに含まれる特定のアプリケーションを実行するために必要なリソースと依存関係のみを持ちます。 これは、すべてのコンテナが 1 つのコンテナ上で実行されるため、コンテナごとに完全なオペレーティング システムが必要ないことを意味します。 システムは、仮想化で得られる分離を維持しながら、単一のホスト オペレーティング システムを共有できます。 機械。
コンテナは、実行中のコンテナを管理し、基盤となるオペレーティング システムへのアクセスを制御するコンテナ エンジンを通じてホスト オペレーティング システムにアクセスします。 これには、コンテナ間のセキュリティの強制や、オペレーティング システム ファイルやネットワーク接続へのアクセスの許可または拒否が含まれる場合があります。
コンテナーを使用する場合のトレードオフは何ですか?
仮想マシンとコンテナは似ていますが、コンテナの使用には欠点があります。 1 つは、仮想マシンを「脱出」するための攻撃対象領域が大幅に小さく、侵入するのが難しいため、仮想マシンはより安全であると考えられています。 たとえば、コンテナはマルウェアのテストには適していない可能性があります。
コンテナーを使用する主な利点は、コンテナーが軽量であることです。オペレーティング システム全体を仮想化する必要がないため、起動時間が最小限に抑えられ、システムのオーバーヘッドが削減されます。 これは、仮想マシンでは不可能な、より多くのコンテナを 1 つのホスト上で実行できることを意味します。
コンテナーは完全なオペレーティング システムを必要としないため、より小さなイメージに簡単にパッケージ化して配布できます。 仮想マシンの完全なイメージは簡単に数十ギガバイトになる可能性がありますが、コンテナーは 15Kb 程度の小さいイメージで提供することができます。 これにより、コンテナの配布と使用が非常に簡単になります。 Docker でいくつかの簡単なサンプル コンテナを実行することで、これを実証します。
Docker のインストール
理論的な話はたくさんあるので、実践的に見ていきましょう。 コンテナーのセットアップ方法を示すために、Ubuntu 23.10 に Docker をインストールし、それを使用して単純な Hello World コンテナーを実行します。 この手順は仮想マシンでテストされていますが、Windows PC からデュアルブートするか、 Linux に最適なラップトップ.
Docker は急速に事実上のコンテナ化ツールになりました。 他のツールも存在しますが、Docker は広く採用されており、最も要求の厳しいアプリケーションを除くすべてのアプリケーションに最適です。 あるよ Docker をインストールするさまざまな方法に関するドキュメントですが、ここでは便利なインストール スクリプトを使用します。 このコマンドは、get.docker.com からローカル マシンにスクリプトをダウンロードします。
$ curl -fsSL https://get.docker.com -o get-docker.sh
その後、このスクリプトを実行して Docker をインストールできます。 次の方法でバージョンを確認することで、Docker が正しくインストールされていることを確認できます。
$ sudo sh ./get-docker.sh
続いて次のようにバージョンをチェックします。
$ sudo docker version
次のコマンドを使用して、Docker サービスがバックグラウンドで実行されていることを確認することもできます。
$ sudo systemctl status docker
以下のスクリーンショットで強調表示されているように、緑色のテキストで「アクティブ (実行中)」と表示されます。 Docker エンジンのバージョンもエラーなく出力されるはずです。
簡単な例を実行する
Docker がインストールされたので、それを使用してコンテナー イメージをダウンロードできます。 コンテナー イメージは仮想マシンの ISO によく似ていますが、通常はサイズが小さく、構築が簡単である点が異なります。 次のコマンドを使用して、単純な hello-world コンテナー イメージをダウンロードします。
$ sudo docker pull hello-world
イメージがダウンロードされたら、次を使用してシステムにダウンロードされたイメージを一覧表示することで確認できます。
$ sudo docker images
hello-world がダウンロードされたことが表示されます。 サイズが非常に小さい (テスト マシンでは 13Kb) ことと、そのタグに注目してください。 画像のタグは実質的にそのバージョンです。 デフォルトでは、Docker はイメージの最新バージョンをダウンロードします。 以下を使用して、このイメージに基づいてコンテナーを実行します。
$ sudo docker run hello-world: latest
これにより、非常に小さな C プログラムから実行される Dockers の hello-world スピールが出力されます (これは次のサイトで確認できます)。 GitHub).
おめでとう; 最初のコンテナが実行されました。 この場合、プログラムは結果を出力し、実行を終了しています。 コンテナーは停止し、実行されなくなりました。
コンテナを存続させる方法
基本的なコンテナを実行したら、タスクが完了してもすぐに終了しない、より複雑なサンプルを構築できるようになります。 多くの場合、コンテナーは単一のプロセスを中心に構築されており、より多くのプロセスが生成される可能性があります。 この基本プロセスが終了すると、コンテナ全体も一緒に終了します。 これは制限のように聞こえるかもしれませんが、実際には、完全な Linux カーネル機能の init システムの仕組みと非常によく似ています。
永続的な例を実行するには、世界中の Web サイトの大部分をホストするために使用される Web サーバーである Nginx のイメージをプルします。 この例では Nginx を選択しました。これは、シンプルで高度な構成が必要なく、軽量であるためです。 次のコマンドを使用して、最新の Nginx イメージをダウンロードします。
$ sudo docker pull nginx
追加しました -p ここにフラグを設定して、コンテナからホスト オペレーティング システムへのポート転送を構成します。 ポート 80 は、暗号化されていない HTTP (つまり Web) トラフィックに使用されます。 これにより、ホスト マシンからコンテナにアクセスできるようになります。
$ sudo docker run -p 80:80 nginx
このコマンドは接続モードで端末で実行されます。これは、コンテナーが文字通り端末に接続されていることを意味し、コンテナーからのすべてのログがそこに出力されます。 コンテナが起動したら、開きます http://localhost Webブラウザで。 以下のような Nginx のようこそ画面が表示されます。
これで、Nginx コンテナがコンテナ エンジン内で実行されます。 Nginx はアタッチ モードで実行されますが、開いている限り実行を継続します。 を押すと、Nginx コンテナを終了できます。 Ctrl + C あなたの端末で。
バックグラウンドでコンテナを実行する方法
バックグラウンドで Nginx を実行するには、別のフラグを追加します。 -d、 分離モード用。 これにより、コンテナーが端末から切り離されて起動されます。つまり、コンテナーはバックグラウンドにあります。 例えば:
$ sudo docker run -d -p 80:80 nginx
システム上で実行中のコンテナを一覧表示できます。 Nginx コンテナがバックグラウンドで実行され、ID が割り当てられていることに注目してください。
$ sudo docker ps
実行中のバックグラウンド コンテナは、その ID を使用して強制終了できます。 コンテナに名前が付けられていることにも気づくかもしれません。 指定されていない場合、Docker は各コンテナにランダムで一意の名前を付けます。
$ sudo docker kill
ただし、さらに興味深い画像を使ってこれをテストすることもできます。 で利用できるものはたくさんあります ドッカーハブ、パブリック コンテナー イメージの中央リポジトリとして機能します。
コンテナをさらに深く掘り下げる
以上、コンテナについて簡単に紹介してきました。 コンテナは際限なく複雑になる可能性がありますが、現代のインターネットの大部分を実行する高度に分散されたシステムの基礎的な構成要素です。 ただし、その力は小規模での使用を妨げるものではありません。 コンテナーと Docker の基本に精通していることは、次のような便利なローカル サービスを実行するための入り口となります。 マインクラフトサーバー または古い PC 上の Plex。