containerdを使用したコンテナ開発

★★★ Live配信告知 ★★★
◆◇世界一わかりみの深いクラウドネイティブ on Azure◆◇
6/22(金) 12:00~ 第14回:世界一わかりみの深いAzure Bot Service 〜AIによるFAQチャットボット構築〜
今回はAzure Cognitive Service for LanguageというAzureのAIサービスを用いて、FAQチャットボットの構築方法についてわかりみ深く説明します。
◆◇PS Live配信◆◇
5/20(金) 17:00~ アウトプットはイイぞ 〜人生折り返し地点からの情報発信で学びが楽しくなった話〜
2020年にMicrosoft MVP for Azure を受賞した武井が人生を変えたアウトプットについてそのノウハウをお伝えします。

はじめに

こんにちは、サイオステクノロジーのエンジニア 中島です。

昨今でコンテナ開発といえば、Dockerと呼ばれるくらいDockerがかなりの市民権を得ることになりました。では、Docker以外は?と呼ばれるとPodmanが出てきます。Podmanを使用した方法について別のBlog記事などがありますので、本記事では、containerdを使用したコンテナ開発環境が作れるのか?をテーマに実施した内容を説明します。

 

containerdについて

 まず、containerdについて簡単に触れます。containerdはContainer Runtime Interface(CRI)と呼ばれるソフトウェアの一つで、コンテナを動作させることに使用するソフトウェアのことです。ほかのCRIソフトウェアをあげるならば、CRI-OやDocker Engineなどがあります。

 ここで、containerdの歴史をすこし説明するとこのソフトはDockerの一部でした。コンテナ技術の標準化の運動により、Docker内のコンテナランタイムの部分が分離したものが、containerdとなりました。

 詳細は、公式サイトを確認してください。

 

コンテナ開発環境構築について

 containerdを使用して開発するための補助ツールとしてnerdctlと呼ばれるコマンドラインツールがあります。ただし、コンテナを開発するためには、containerdやnerdctl以外に、BuildKitと呼ばれるコンテナをビルドするためのツールやContainer Network Interface(CNI)を実現するための各種プラグインの導入をすることで始めて開発環境が構築することができます。

図1 containerdを使用したコンテナ開発環境

 

実環境構築

 コンテナ開発環境構築方法について、本記事はRootlessモードで構築する方法について説明します。まず、Rootlessモードとはその名の通りroot以外のユーザで起動することです。なぜこれを行うかというと、containerdやBuildKitを使用するためにデーモンを利用しているため通常の起動ではrootで立ち上がることや操作するためにいちいちrootになって操作する必要があります。OS本体に影響がある操作ができる状態でroot権限を付与することはものすごく危険なため、その不安を少しでも少なくするためRootlessモードで立ち上げる必要があります。

 では、実施にその方法について説明します。

PC環境について

 実際に試す際に操作環境を一致させたほうが再現度が高いため実際に作業した条件をいかに書きます。

  • VirtualBox
  • OS:Ubuntu 21.10 64Bit
  • CPU:2
  • Memory:4GB
  • ディスク:30GB

インストールについて

aptを利用して以下のソフトをインストールします。

  • containerd
  • rootlesskit
  • curl
  • golang

インストールする際には以下のコマンドを実行します。。

 

nerdctlは公式ページにビルドしたパッケージがあるので、それをダウンロードして特定フォルダ(/usr/local/bin)に登録するように以下のコマンドを実行する。

 

BuildKitも公式ページにビルドしたパッケージがあるので、ダウンロードしてフォルダパスを登録するように以下のコマンドを実行する。

 

nerdctlが使用するCNI Pluginを使用できるように公式ページにビルドしたパッケージがあるので、それをダウンロードして特定フォルダ(.opt/cni/bin)に登録できるように以下のコマンドを実行する。

 

containerdやBuildKitをrootlessモードで起動させるため以下のコマンドで実行する。

 

rootlessモードで実行するときに、/etc/cni内のフォルダ操作で権限がないためパーミッションエラーが発生するために以下のコマンドで操作権限を与える。

 

実際の動作テスト

サーバーの起動テスト

以下のコマンドでnginxのコンテナ動作テストを行う。

 

nerdctl psコマンドでコンテナが動作していることを確認する。

 

ブラウザでlocalhost:8080にアクセスすると以下の通り表示される。

図2 nginx動作によるページ表示

 

コンテナを停止する場合は以下のコマンドを実行する。

 

コンテナのビルドテスト

 go言語でhello Worldと表示するプログラムを以下の通り作成前に、以下の通り初期化する。

 

以下のプログラムをmain.goファイル内に記載する。

 

以下の通り用意したプログラムをビルド実行するとHello Worldと表示する。

 

以下の通りDockerfileを使用して、コンテナ化する準備する。

 

以下のコマンドで、作成したコンテナをgohello:latestとしてビルドする

 

コンテナを実行すると以下の通り表示する。

 

docker-composeファイルの実行

 NextCloudを立ち上げるためのdocker-compose.ymlファイルを作成して、docker-composeで利用するための準備をします。

 

以下のコマンドでdocker-composeファイルを実行します。

 

ブラウザでlocalhost:8080にアクセスすると以下の通り表示する。

図3 NextCloudの画面表示

 

停止する場合は以下のコマンドを実行してください。

 

まとめ

 結果から、containerdでコンテナ開発環境の構築を作れることがわかりました。これまでの内容を読んだ読者ならわかりますが、DockerやPodmanに比べて、環境構築が大変なことが理解できたと思います。

 また、この構築をやることでコンテナ開発に必要な物がよく理解でいたためやる意味があると感じます。しかし、実際に開発環境を作るになるならば、特別な理由がない限りDockerやPodmanを使用した方が容易に開発環境ができるためそちら導入したほうが良いです。

 





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*