コンテナのチェックポイント

はじめに

このチェックポイントは、コンテナに関する私たちの入門記事から学んだ内容を評価するためのものです。そこでは、DockerとKubernetesという2つの一般的なコンテナソリューションに加えて、コンテナエコシステムも紹介しました。このチェックポイントを使用して、これらのトピックに関する知識を評価し、キーワードやコマンドの再確認、さらなる学習のためのリソースを見つけることができます。

コンテナ化は、ポータブルなランタイム環境を作成するために、開発環境をオペレーティングシステムレベルで分離するプロセスです。コンテナはホストのリソースを共有し、予測可能で制御された環境でアプリケーションを実行することができます。インフラストラクチャの抽象化やアプリケーションの分離にコンテナを使用することで、効率的かつ一貫性のある開発プロセスとテストのスケーリングが可能になります。

このチェックポイントでは、導入記事の中心的なアイデアをまとめた2つのセクションがあります。1つ目はコンテナエコシステムの目的を要約したセクションで、2つ目はコマンドの実行に関するセクションです。それぞれのセクションには、DockerとKubernetesに特化したサブセクションが含まれています。これらのセクションでは、知識をテストするためのインタラクティブなコンポーネントがあります。このチェックポイントの最後には、コンテナに関する継続的な学習の機会もあります。

資源 (しげん)

  • Introduction to Containers
  • How To Install and Use Docker on Ubuntu 22.04
  • How To Install and Use Docker Compose on Ubuntu 22.04
  • How To Use docker exec to Run Commands in a Docker Container
  • How To Share Data between Docker Containers on Ubuntu 22.04
  • How To Set Up a Private Docker Registry on Ubuntu 20.04
  • An Introduction to Kubernetes
  • How To Use minikube for Local Kubernetes Development and Testing

コンテナとは何ですか?

コンテナは、アプリケーションの開発において予測可能かつ制御された環境を提供します。コンテナエンジンとは、人々がコンテナと呼ぶ際に通常指しているものです。

コンテナを理解するためには、いくつかの主要なコンテナ化ツールに精通していることが重要です。

Info

コンテナ化に関する用語の理解
以下の用語について定義し、ドロップダウン機能を使用して確認します。

コンテナエンジン
コンテナエンジンは、コンテナ化の完全なソリューションであり、エンジンにはコンテナ、コンテナランタイム、コンテナイメージ、およびそれらを構築するためのツールが含まれます。エンジンにはコンテナイメージのレジストリやコンテナのオーケストレーションも含まれる場合があります。Dockerは最も一般的に展開されるコンテナエンジンの一つです。

コンテナイメージ
コンテナイメージは、コンテナ内で環境を構築するためのテンプレートです。イメージが実行されると、イメージの読み取り専用のレイヤーに読み書き可能なレイヤーがオーバーレイされ、個々のコンテナインスタンスで調整できます。
イメージレジストリは、コンテナイメージを保持するリポジトリです。イメージレジストリまたはリポジトリを使用して、コンテナイメージを管理および共有することができます。

コンテナランタイム
コンテナランタイムは、コンテナの起動と実行を管理します。コンテナランタイムには、Open Container Initiative(OCI)とContainer Runtime Initiativeの2つのグループがあります。
Open Container Initiativeは、コンテナ形式の仕様および標準を提供します。OCIは、一般的に使用されるruncなど、コンテナの実行に基準を提供します。
Container Runtime Initiativeは、コンテナオーケストレーションに焦点を当てています。

コンテナオーケストレーション
オーケストレーションは、プロビジョニング、設定、スケーリング、スケジューリング、展開、モニタリングなどを含み、一般的にコンテナのデプロイメントを自動化するために使用されます。

多くの開発者は、コンテナ化のポータビリティと予測可能なパフォーマンスのためにこれを好んでいます。インフラストラクチャを抽象化することで、複数のマシン上でアプリケーションをまったく同じ方法でテストすることが可能となります。このベースライン環境の安定性により、開発者は共同作業やリモートでの作業が可能になります。

Info

自分自身をチェックしてください

コンテナを使用する際の一般的な目標は何ですか?
強力な開発および本番環境を確保するために、以下のニーズを満たすことを望むかもしれません:

予測可能でポータブルなパフォーマンス
使用とメモリの効率
オプションで永続データを持つステートレス
クラスターネットワーキングが可能な独立したコンテナ
コンテナのテスト中にエラーと出力を記録する
アプリケーションとインフラの切り離し
特化とマイクロサービス

同じベースイメージからコンテナを作成することで、開発およびテストニーズに対応できる信頼性のある環境を提供します。この一貫性により、アプリケーションの開発中に必要に応じてコンテナを作成および破棄することが可能です。

もし、持続的なデータが必要な長期プロジェクトに取り組んでいる場合は、パーシステントデータの保管とコンテナ間のデータ共有のためにボリュームをマウントすることができます。

KubernetesとDockerは、二つの一般的なコンテナソリューションです。以下のセクションでは、初心者向けの記事で両方のオプションを使用しながら、それらの違いについて学んだ内容を評価することができます。

Info

自分自身を確認してください

DockerとKubernetesの違いは何ですか?
Dockerは、1つまたは2つのコンテナ化されたアプリケーションを実行するために最も頻繁に使用されるコンテナエンジンです。
Kubernetesは、多数の重複するコンテナをスケールで実行できるオーケストレーションソフトウェアです。Kubernetesは元々Dockerランタイムを使用していましたが、現在は主にcontainerd抽象化レイヤーを使用しています。

Dockerとは何ですか?

「Dockerを使用すると、アプリケーションプロセスをコンテナで管理できます。Dockerは一般的にコンテナエンジンとして使用され、さまざまなオペレーティングシステムで実行できます。」

ホストマシンにDockerコンテナをマッピングするには、ポートをマッピングするか、Dockerにランダムで使用されていないポートを選択させることができます。このプロセスにより、テスト環境が簡素化されます。Dockerの使用方法については、The Docker Ecosystem: An Introduction to Common Componentsを参照してください。

Dockerは自身のシステム設定をサポートするために特定の用語を使用しています。Dockerの用語を理解しているかどうかを評価してください。

Info

以下の用語の定義を説明し、ドロップダウン機能を使用して確認してください。

Docker Compose
Docker Composeは、YAMLファイルで定義されたマルチコンテナアプリケーション環境を実行できるコマンドラインツールです。YAMLの設定ファイルには、ウェブサーバー環境、ポートリダイレクション、共有ボリュームなどのセットアップが定義されます。

Docker Hub
Docker Hubは、Dockerプロジェクトを開発する会社であるDockerが管理する特定のイメージレジストリです。

Dockerイメージ
Dockerイメージは、コンテナを構築するためのテンプレートです。多くの共通のイメージが使用可能です。

Dockerボリューム
Dockerボリュームは、停止または削除されたコンテナを含むコンテナ間でデータを永続化するために使用できます。

スワーム
Dockerスワームモードは、スワームと呼ばれるクラスタを管理するための方法です。SwarmKitは、Goで作られたオープンソースのオーケストレーションツールキットであり、スワームモードクラスタに使用できます。これは以前のツールであるDocker Swarm(現在はSwarm Classicと呼ばれています)とは異なり、Dockerのネイティブクラスタリングのことを指します。Swarm Classicは、大規模クラスタリングのオプションでした。

Dockerコンテナは、しばしばKubernetesクラスタに展開可能な、ポータブルかつ一貫性のある実行環境を提供します。

Kubernetesとは何ですか?

Kubernetesを使用すると、マシンクラスタ上でコンテナ化されたアプリケーションやサービスを実行および管理することができます。Kubernetesは、コンテナ化のスケーリングニーズに頻繁に使用されます。

Kubernetesはシステムの設定をサポートするために特定の用語を使用します。Kubernetesの用語を理解しているかどうかを評価しましょう。

Info

以下はネイティブの日本語でのパラフレーズ例です:

Kubernetes用語の理解
以下の用語をそれぞれ定義し、ドロップダウン機能を使用して確認してください。

デプロイメント
デプロイメントは、サイクル管理のためにレプリケーションセットを使用するKubernetesのワークロードです。
レプリケーションセットは、レプリカポッドのスケーリング用のポッドテンプレートを定義するレプリケーションコントローラのように、ポッドを管理するために使用されます。

ノード
クラスタ内のサーバーはノードと呼ばれ、そのうちの1つがクラスタのコントロールプレーンとして機能し、他のサーバーはワーカーノードとして機能します。各ノードには、そのノード上のコンテナでアプリケーションとサービスを管理するためのコンテナランタイムが含まれています。

ポッド
個別のアプリケーションとして制御されるコンテナは、ポッドとしてグループ化されます。ポッドは、レプリケーションコントローラまたはレプリケーションセットによって作成されます。

中央サーバーとノードから成るあなたのKubernetesクラスターには、クラスターの機能を補助し、サーバー同士の通信を可能にする特定の構成要素が含まれています。Kubernetesアーキテクチャの詳細な説明については、『Kubernetes入門』を参照してください。

クラスタ内のサーバー間でネットワーク設定を容易にするために、Kubernetesは制御プレーンに特定のコンポーネントを必要とします。これらのコンポーネントはノード間でもアクセス可能である必要があります。

  • A key-value store that can be distributed across nodes, such as etcd.
  • An API server (kube-apiserver) that can be used to configure workloads and send commands.
  • A controller manager (kube-controller-manager) to manage workload, perform tasks, and regulate the cluster.
  • A scheduler (kube-scheduler) to assign workloads to specific nodes.
  • A cloud controller (cloud-controller-manager) to interact with the cloud provider, resources, and services on behalf of the cluster.

ノードは、特定のコンポーネントが必要で、それによって中央サーバーと通信し、割り当てられたワークロードを実行することができます。

  • A container runtime on each node, such as Docker or runc.
  • A communication service like kubelet to and from the control plane; kubelet uses a manifest to to define the workload it receives and manage the node’s work state.
  • A small proxy, most commonly kube-proxy, to forward requests to containers.

DockerとKubernetesにはそれぞれ独自の構文を持つコマンドラインツールがあります。また、デプロイされた場合には、Docker DesktopやKubernetes Dashboardを使用して、ウェブブラウザ経由でコンテナを管理することもできます。

コマンドラインの使用

私たちのクラウドサーバーの導入記事を使って、Linuxのコマンドラインの使用を始め、ウェブサーバーソリューションの記事でウェブサーバーを設定し、データベースの記事でデータベースを管理しました。

コンテナの導入では、次のようなコマンドを通じてコマンドラインの使い方に慣れることができました。

  • cat to display a file.
  • chmod to set permissions with a new tool.
  • curl to transfer data with a specified location (the URL).
  • echo to display a string passed as an argument.
  • env to print all environment variables.
  • exit to close the interactive Docker shell.
  • mkdir to create new directories.
  • pwd to print the present working directory.
  • systemctl to manage the Docker daemon.
  • tail to print the last ten lines of a file.
  • watch to run a specific command consistently (every two seconds by default).
  • whoami to print the current user’s username.

あなたはまた、異なるコンテナエンジン用のユニークなコマンド構文を使用し、Homebrewパッケージマネージャーを使ってKubernetesクラスター用のminikubeをインストールしました。以下のセクションでは、DockerとKubernetesの導入記事で実行したコマンドを復習します。

Docker コマンドの実行

Dockerを紹介する記事では、Ubuntuサーバー上でDockerコンテナをインストールし、管理しました。デフォルトでは、dockerコマンドは管理者(root)ユーザー、sudo権限を前置したユーザー、またはdockerグループに所属するユーザーのみが実行できます。

あなたはDockerコマンドを使用して、オプション、サブコマンド、および引数をDockerコンテナに渡しました。

  • docker exec to run commands in an active container, using the –workdir flag to specify the directory that a command should be run in, the –user flag to run a command as a different user, and the -e flag to pass an environment variable into the container or the –env-file flag to specify a .env file.
  • docker images to review the images you have downloaded to your system.
  • docker info to access system-wide information.
  • docker ps to review active containers running on your system, using the -a switch to view all containers, both active and inactive, and the -l switch to view the latest container you created.
  • docker rename to rename your container.
  • docker rm with the container ID or name to remove a container.
  • docker run to start a container from a specified image, using the combined -it switches for interactive shell access.
  • docker search to search for images available on Docker Hub and docker pull to download a specified image from the registry.
  • docker start with the container ID or name to start a stopped container.
  • docker stop with the container ID or name to stop a running container.
  • docker tag to rename a created image.
  • docker volume to manage your data volumes.

Info

自分自身をチェックしてください
ドロップダウン機能を使用して回答を取得してください。

dockerコマンドとdocker execコマンドの違いは何ですか?
docker execコマンドは現在実行中のプログラムやコンテナを実行し、確認するために使用されますが、新しいコンテナを作成するためにはdocker runコマンドを実行するかもしれません。

Dockerfileとは何ですか?
Dockerfileを使用してdocker buildコマンドでイメージをビルドすることができますが、この入門記事ではそのコマンドを実行していません。Dockerfileはイメージをビルドするために使用され、docker composeでYAML構成ファイルを実行することでオーケストレーションを管理します。

あなたは、以下のスイッチなどを利用するために、サブコマンドの利用可能なオプションにアクセスするために、–helpオプションも使用しました。

  • –name to give a name to a container.
  • –rm to create a container that removes itself when it’s stopped.
  • -d will detach the container from the terminal to run it in the background.
  • -v to manage your Docker Volume by naming it or to create a bindmount (when specifying a / or ~/).

Dockerは、マルチコンテナ環境を管理するためのDocker Compose CLIツールも提供しています。ポートリダイレクションと共有ボリュームを持つウェブサーバー環境を作成するために、YAML設定ファイルを準備し、以下のコマンドを使用してコンテナを管理しました。

  • docker compose up runs the containerized environment.
  • docker compose ps provides information about running containers and port redirection.
  • docker compose logs accesses the logs for your container.
  • docker compose pause pauses the container and docker compose unpause resumes it.
  • docker compose stop will stop the container.
  • docker compose down removes the containers, networks, and volumes associated with the environment.

Info

自分自身をチェックしてください
ドロップダウン機能を使用して回答を取得してください。

dockerコマンドの使用とdocker composeの実行の主な違いは何ですか?
dockerコマンドはコマンドラインでのすべてのサブコマンドを実行しますが、docker composeは複数のコンテナ環境に使用できる設定データを提供するためにYAMLファイルを実行します。docker composeで開始されたコンテナはネットワークとデータボリュームを共有することもできます。

Docker Composeを使用することの利点は何ですか?
複数のコンテナが並行して実行されるような大規模な展開がある場合、1つのYAMLファイルを書いてコンテナの設定を行い、docker composeを実行してすべてのコンポーネントに対するコマンドを発行し、グループとして制御することができます。その結果、docker composeを使用すると、アプリケーションが成長し、強力なオーケストレーションのセットアップが必要になるにつれて、コンテナの管理をスケーリングするのに役立ちます。

DockerレジストリおよびDocker Hubを使って画像を管理するために、以下のコマンドを実行しました。

  • docker login to log in with the -u switch for your username.
  • docker commit to commit a new Docker image with the -m switch to provide a commit message and the -a switch to specify the author.
  • docker push to push your images, including to your own repository.
  • docker pull to pull your images to a new machine.

永続データについては、Dockerボリュームも設定します。新しいボリュームを作成するためには、docker volumeコマンドを使用し、ボリュームをシステム上で確認するためにはinspectサブコマンドを使用し、ボリューム一覧を表示するためにはlsサブコマンドを使用します。また、読み取り専用のアクセス権を付与するために、ボリューム名に:roを追加します。次に、Dockerコンテナとホストの間でデータを共有することも考えられます。

Dockerは一般的なコンテナエンジンであり、KubernetesはDockerコンテナエンジンを実行できるオーケストレーションプラットフォームです。

Kubernetesコマンドの実行

Kubernetesの記事では、minikubeコンパニオンを使用してDockerフレームワークを実行し、1台のマシン上で動作するKubernetesクラスタをシミュレートしました。これにより、Kubernetesクラスタのブラウザーダッシュボードにアクセスすることができました。

あなたは次のminikubeコマンドを実行しました。

  • minikube start to start the tool and enable kubectl, optionally using the -p or –profile option to specify a cluster.
  • minikube dashboard to access the Kubernetes dashboard with automatic port forwarding, using the –url option to aid port forwarding from a remote server via SSH tunneling.
  • minikube service with a specified service and the –url option to retrieve a URL for a service that is running.
  • minikube config to manage your cluster with subcommands like set memory, get profile,
  • minikube delete to delete the service in order to redeploy it.
  • minikube mount to mount a directory from your local file system into the cluster temporarily, using the local_path:minikube_host_path syntax to specify which directory and where in the container.
  • minikube profile with a specified cluster to switch the active profile.

あなたは以下のサブコマンドを使って、kubectlコマンドも使用しました。

  • kubectl get pods for a list of all the pods running in your cluster, using the -A argument to find all namespaces.
  • kubectl create deployment to create a named deployment as a service, using the –image option to call a specified remote image.
  • kubectl expose deployment to expose the named deployment, specifying a port with the –port option and the –type option.
  • kubectl get service to check if a specified service is running.
  • kubectl get nodes to list the active node(s) in the cluster, using the –kubeconfig option to specify a different YAML configuration file.

マネージドKubernetesサービスを始めるには、Silicon CloudのKubernetesクイックスタートのドキュメントを参照してください。

次は何ですか? (Tsugi wa nan desu ka?)

コンテナや人気のあるデータベースコンテナエンジンの理解を深めることで、アプリケーションを構築する際に一貫性のある開発環境をコンテナ化することができます。このような複雑なトピックに対する答えとしてはあまりにも単純なように思えるかもしれませんが、今では実験やアプリの開発、プロジェクトのスケール拡大を行うためのコンテナエコシステムが(1つか2つでさえも)手に入るようになりました。

Dockerエコシステムをより拡張するために、次のチュートリアルに従うことができます。

  • Containerizing a Node.js Application for Development With Docker Compose
  • How To Secure a Containerized Node.js Application with Nginx, Let’s Encrypt, and Docker Compose

もし直接アクションに参加したい場合は、Silicon Cloud MarketplaceのDocker One-Click Solutionを試してみてください。これは、DockerがインストールされたvServerを開始します。また、Silicon Cloudの製品ドキュメンテーション「コンテナイメージからのデプロイ方法」も確認できます。

Kubernetesクラスターの開発を続けるために、これらの記事を参考にできます。 (Kubernetesクラスタの開発を進めるためには、以下の記事を確認してみてください。)

  • Architecting Applications for Kubernetes
  • Modernizing Applications for Kubernetes
  • Best Practices for Rearchitecting Monolithic Applications to Microservices
  • Our series From Containers to Kubernetes with NodeJS or with Django

もし開発のためにリソースを解放したいのであれば、Silicon Cloud Managed Kubernetes (DOKS) サービスへの移行がおすすめです。また、DockerコンテナやSilicon Cloud Kubernetesクラスターをサポートするために、Silicon Cloud Container Registry (DOCR) も利用することができます。

コンテナの新たな知識を持っているあなたは、セキュリティ対策を施したクラウドの旅を続ける準備が整いました。もしまだであれば、クラウドサーバー、ウェブサーバー、データベースについての入門記事もご覧ください。

コメントを残す 0

Your email address will not be published. Required fields are marked *