初心者のための Docker チュートリアル: 基本、 Archi構造、コンテナ

⚡ スマートサマリー

Dockerは、アプリケーションとその依存関係をポータブルで軽量なコンテナにパッケージ化するコンテナ化プラットフォームです。この概要では、Dockerのアーキテクチャ、インストールについて説明します。 Ubuntuコンテナの基本コマンド、そしてソフトウェア配信の高速化のためにコンテナが従来の仮想マシンとどのように異なるかについて説明します。

  • 🐳 コンテナ化: Dockerはオペレーティングシステムレベルで仮想化を行うため、コンテナはホストカーネルを共有し、仮想マシンよりも少ないリソースで動作します。
  • 🧱 Archi構造: Dockerエンジン(dockerd)、イメージ、レジストリ、コンテナは、あらゆるDockerワークフローの背後にあるクライアント/サーバーアーキテクチャを構成します。
  • 📦 画像とコンテナ: イメージは読み取り専用のテンプレートであり、コンテナは実行中のコピーである。そして、1つのイメージから複数のコンテナを起動することができる。
  • 🗄️ 登録簿: Docker Hubには公開イメージと非公開イメージが保存されており、すぐに使えるイメージを何百万種類も入手して実行できます。
  • ⚙️ インストール: On Ubuntu Docker APTリポジトリとGPGキーを追加し、apt-getを使用してdocker-ceパッケージをインストールします。
  • 特選割️ コアコマンド: コマンドラインから、docker pull、run、start、stop、ps、stats、およびimagesを使用してコンテナを管理します。

Docker 初心者向けチュートリアル。アーキテクチャ、インストール、 Ubuntu、および基本的なコンテナコマンド

Dockerは、現代のコンテナ化プラットフォームの中で最も人気のあるものの1つです。 DevOps クラウドワークフロー。この初心者向けDockerチュートリアルでは、Dockerとは何か、Dockerアーキテクチャの仕組み、Dockerのインストール方法について説明します。 Ubuntuイメージやコンテナを管理するために使用される基本的なコマンド。

ドッカーとは何ですか?

デッカー Dockerは、複数のオペレーティングシステムを同一ホスト上で実行できる仮想化ソフトウェア開発プラットフォームです。インフラストラクチャとアプリケーションを分離することで、ソフトウェアを迅速に提供できます。仮想マシン(VM)を作成するために使用されるハイパーバイザーとは異なり、DockerはDockerコンテナと呼ばれる単位を使用してシステムレベルで仮想化を実行します。

下の図に示すように、Dockerコンテナはホストオペレーティングシステム上で動作します。これにより、効率性とセキュリティの両方が向上します。また、コンテナは仮想マシンよりも少ないリソースしか使用しないため、同じインフラストラクチャ上で仮想マシンよりも多くのコンテナを実行できます。

Docker とハイパーバイザーの仮想化
Docker とハイパーバイザーの仮想化

ホストハードウェアと直接通信できる仮想マシン(たとえば、仮想アダプタを増やすイーサネットアダプタ)とは異なり、DockerコンテナはホストOS上で隔離された環境で実行されます。ホストが Windows走れます Linux コンテナ内の画像 Hyper-Vこれは、ベースイメージを仮想化するための小さな仮想マシンを自動的に作成します。

Dockerとは何かをご理解いただけたところで、チームがDockerを選択する主な理由を見ていきましょう。

Docker を使用する理由

Dockerを使用する主な理由は以下のとおりです。

  • Dockerは仮想化に使用されるソフトウェアであり、複数の仮想化を可能にする。 OS 同じホスト上で実行する。
  • Dockerはクライアント/サーバー型アプリケーションであり、クライアントがサーバーと通信することを意味します。
  • Dockerイメージはコンテナの「ソースコード」として機能し、それを使って構築します。
  • Dockerは、パブリックレジストリとプライベートレジストリの2種類のレジストリをサポートしています。
  • コンテナはDockerにおける組織単位です。簡単に言うと、イメージはテンプレートであり、コンテナはそのテンプレートのコピーです。そのため、同じイメージから複数のコンテナを実行できます。

これらの利点は、Dockerの設計方法に由来するものです。次のセクションでは、Dockerのアーキテクチャとその主要コンポーネントについて詳しく説明します。

デッカー Archi構造

さて、このDockerコンテナチュートリアルでは、Dockerアーキテクチャの主要コンポーネントを見ていきましょう。

デッカー Archi構造構成要素:エンジン、イメージ、レジストリ、コンテナ

デッカー Archi構造

ドッカーエンジン

Dockerはクライアント/サーバーアプリケーションであり、クライアントがサーバーにリクエストを中継します。dockerdと呼ばれるDockerデーモンは、サーバーを表すDockerエンジンです。デーモンとクライアントは同じホストまたはリモートホスト上で実行でき、コマンドラインクライアントバイナリと完全なプロトコルを介して通信します。 RESTful API dockerdと連携する。

Dockerイメージ

Dockerイメージは、コンテナの「ソースコード」であり、コンテナを構築するために使用します。イメージにはソフトウェアをプリインストールできるため、デプロイを迅速化できます。また、移植性が高く、既存のイメージを使用することも、独自のイメージを構築することも可能です。

Docker レジストリ

Docker は、作成したイメージをレジストリに保存します。レジストリには公開レジストリとプライベートレジストリがあります。Docker には、 Dockerハブプライベートなイメージ保存も可能です。Docker Hubには、すぐに使い始められるイメージが何百万とあります。

ドッカーコンテナ

コンテナはDockerの構成要素であり、基本的な概念の一つです。イメージをビルドして実行すると、コンテナ内で実行されます。コンテナという比喩が用いられるのは、内部で実行されるソフトウェアの移植性の高さによるものです。貨物船が実際のコンテナを扱うように、コンテナを移動、出荷、変更、管理、作成、破棄することができます。

簡単に言えば、イメージはテンプレートであり、コンテナーはそのテンプレートのコピーです。 同じイメージの複数のコンテナ (コピー) を持つことができます。

これらの異なるコンポーネント間の相互作用は、Dockerコンテナ技術がどのように連携して動作するかを示しています。後述するdocker pullやdocker runといったコマンドを使用することで、このワークフローを管理できます。

アーキテクチャを念頭に置いて、これらのコンポーネントを実際に試せるようにDockerをインストールしましょう。

Linux/にDockerをインストールする方法Ubuntu

以下は、Linux/Linux上でのDockerのインストール手順です。Ubuntu:

ステップ1) Dockerをインストールするには、DockerチームのDEBパッケージが必要です。まず、いくつかの前提条件があります。 Ubuntu パッケージが必要です。以下のコマンドを使用してインストールしてください。

$ sudo apt-get install \
apt-transport-https \
ca-certificates curl \
software-properties-common

※記号「\」は改行に使用するため必須ではありません。必要に応じて、XNUMX行だけで「\」を使用せずにコマンドを記述できます。

ステップ2) 公式のDocker GPGキーとフィンガープリントを追加してください。GPGキーを入力するには、以下のDockerコマンドを使用してください。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

ステップ3) 次に、以下のコマンドを使用してDocker APTリポジトリを追加します。

$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

リポジトリを追加し、GPG キーをホストに自動的に追加するかどうかを確認するよう求められる場合があります。lsb_release コマンドは、 Ubuntu ホストの配布バージョン。

ステップ4) GPGキーを追加した後、以下のDockerコマンドを使用してAPTソースを更新してください。

$ sudo apt-get update

これでDockerパッケージ自体をインストールできます。

ステップ5) APTソースが更新されたら、Dockerパッケージのインストールを開始します。 Ubuntu 以下のDockerコマンドを使用します。

$ sudo apt-get install docker-ce

上記のコマンドは、Dockerおよびその他の必要なパッケージをインストールします。Docker 1.8.0より前のバージョンではパッケージ名はlxc-docker、Docker 1.8から1.13まではパッケージ名はdocker-engineでした。

注: Docker Windows 必要 Windows 10 Pro または Enterprise バージョン 14393、または Windows 実行するには、Server 2016 RTMが必要です。

基本的な Docker コマンドを使用して Docker を使用する方法

ここでは、いくつかの基本的なDockerコマンドを使ってDockerを使用する方法を説明します。

前述したように、Dockerをインストールした後に実行すべき最も基本的なコマンドはdocker infoです。

$ sudo docker info

以下のような結果が得られるはずです。

基本的なDockerコマンドを使用してDockerを使用し、docker infoの出力を表示します。

上記のDockerの例で示したように、Dockerコンテナに関する情報(実行中、一時停止中、停止中のコンテナ数、ダウンロード済みのイメージ数など)を確認できます。それでは、最初のイメージを取得してみましょう。

$ sudo docker pull alpine

このコマンドでは、Dockerに対して、デフォルトで設定されている最新バージョンのalpineイメージをパブリックレジストリからプルしてダウンロードするように指示しています。

*alpine は、完全なパッケージ インデックスを備え、サイズがわずか 5 MB の Alpine Linux に基づく最小限の Docker イメージです。

イメージをコンテナとして実行したい場合は、以下のコマンドを使用します。

$ sudo docker run -i -t alpine /bin/bash

このコマンドを実行すると、直接アルパインターミナルに切り替わります。-i フラグは、コンテナに接続していないときでも標準入力を開いたままにします。この永続的な標準入力は、対話型シェルに必要な要素の半分です。-t フラグはもう半分で、Docker に擬似 tty をコンテナに割り当てるように指示します。これら2つを組み合わせることで、新しいコンテナ内で対話型シェルが実現します。コンテナを終了するには、簡単な exit コマンドを使用します。

さて、このDockerの基本チュートリアルでは、 Ubuntu 画像。

$ sudo docker run -it ubuntu /bin/bash

Dockerはローカルにイメージが存在するかどうかを確認し、存在しない場合はイメージライブラリから自動的にイメージをプルします。ここでも、対話型シェルが実行されます。コンテナを実行する際に、名前を付けることもできます。

$ sudo docker run –-name our_container -it ubuntu /bin/bash

そして、再び終了します。また、以前に作成したコンテナを対話型シェルなしで実行することもできます。

$ sudo docker start container_name

そして、`docker stop container_name` と入力してコンテナを停止します。

$ sudo docker stop container_name

実行中のコンテナをすべて表示したい場合は、以下のコマンドを実行するだけです。

$ docker ps

すべてのコンテナに対して、同じコマンドの末尾に「-a」を追加します。例えば、`docker ps -a` のように入力します。このコマンドは、コンテナID、使用されているイメージ、作成日時、実行ステータス、公開ポート、および管理を容易にするためのランダムに生成された名前を表示します。

コンテナを実行する際、コンテナがどれだけのリソースを使用しているかを知りたい場合がよくあります。そのためには、以下のコマンドを使用できます。

$ docker stats

ローカルにダウンロードした画像とその情報も確認できます。

$ sudo docker images

上記のDockerの例にあるコマンドは、各Dockerイメージを、イメージバージョン、固有のイメージID、作成日、イメージサイズを示すタグとともに表示します。

コンテナがなぜこれほど優れた技術なのかを理解するには、仮想化がどのように進化してきたかを振り返ることが役立つ。

仮想化とは何ですか?

以前は、サービスのデプロイは時間がかかり、非常に手間のかかる作業でした。開発者がコードを記述し、運用チームがそれをベアメタルマシンにデプロイするのですが、その際、ライブラリのバージョン、パッチ、言語コンパイラなどに注意を払い、コードが正しく動作するように調整する必要がありました。バグやエラーが発生した場合は、開発者が問題を修正し、運用チームが再デプロイするというプロセスを最初からやり直す必要がありました。

ハイパーバイザーの登場により状況は改善した。ハイパーバイザーは複数の 仮想マシン同じホスト上の仮想マシン(VM)は、実行中または停止中の場合があります。VMはコードのデプロイやバグ修正の待ち時間を大幅に短縮しましたが、真のゲームチェンジャーはDockerコンテナでした。

Dockerの人気は、コンテナを大規模に管理するオーケストレーションツールによっても促進されています。 Kubernetes先に進む前に、最も重要なDockerコマンドの簡単なリファレンスを以下に示します。

重要な Docker コマンド

以下は重要な Docker コマンドです。

Command 詳細説明
ドッカー情報 情報コマンド
ドッカープル 画像をダウンロードする
docker run -i -t イメージ名 /bin/bash イメージをコンテナとして実行する
docker start our_container コンテナの起動
docker stop コンテナ名 コンテナを停止する
ドッカーのps 実行中のコンテナ一覧
ドッカー統計 コンテナ情報
ドッカー画像 ダウンロードした画像一覧
Docker のクリーンアップ 実行中のコンテナをすべて強制終了します。

また、こちらも読んでください。 Docker の面接の質問と回答 新卒者から経験豊富なプロフェッショナルまで対象。

よくあるご質問

Dockerコンテナはホストオペレーティングシステムのカーネルを共有し、アプリケーションのみを分離するため、軽量で起動も数秒で完了します。一方、仮想マシンはゲストオペレーティングシステム全体をバンドルするため、サイズが大きく、起動に時間がかかり、リソース消費量も多くなります。

Dockerfileは、FROM、RUN、COPY、CMDなどの命令を含むプレーンテキストのスクリプトです。Dockerはこれらの命令を読み込んで、イメージを自動的に構築します。各行がレイヤーを追加していくことで、どのマシンでも同じ環境を再現できるようになります。

Docker Composeは、単一のYAMLファイルを使用して複数のコンテナからなるアプリケーションを定義および実行します。各サービス、ネットワーク、ボリュームを一度記述するだけで、docker compose upコマンドですべてを起動できます。ローカル環境での開発や、接続されたサービスのテストに最適です。

Dockerは個々のコンテナを構築して実行しますが、 Kubernetes Kubernetesは、クラスタ全体にわたる多数のコンテナをオーケストレーションします。Kubernetesは、自動スケーリング、自己修復、および負荷分散機能を追加します。実際には、Dockerがアプリケーションをパッケージ化し、Kubernetesが本番環境でそれを管理します。

Docker Engineは、Apache 2.0ライセンスの下で提供される無料のオープンソースソフトウェアです。Docker Desktopは、個人利用、教育機関、小規模企業向けには無料ですが、大企業は有料サブスクリプションが必要です。Docker Hubは、無料および有料のイメージホスティングプランを提供しています。

DockerはLinux上でネイティブに動作し、以下のプラットフォームでサポートされています。 Windows (NAIST) と macOS Docker Desktop を介して。 Windows Macの場合、Dockerは軽量な仮想マシンを使用して、コンテナに必要なLinuxカーネルを実行します。ほとんどのコンテナイメージはLinuxベースです。

AIアシスタントは、平易な言語のプロンプトからDockerfile、docker-composeファイル、およびCLIコマンドを生成します。また、ビルドログやコンテナエラーを読み取り、原因を説明し、修正案を提示します。実行する前に、生成された構成が正しいイメージタグ、パス、およびセキュリティ設定になっていることを必ず確認してください。

Yes. GitHubコパイロット ChatGPTは、短いコメントや説明からDockerfileやComposeファイルを作成できます。これらは定型コードの記述を効率化しますが、生成されたコードスニペットが古いデフォルト設定を使用している可能性があるため、ベースイメージ、バージョン、ベストプラクティスを必ず確認してください。