ソースからNerdctlを使用した環境を作る

★★★ 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 を受賞した武井が人生を変えたアウトプットについてそのノウハウをお伝えします。

はじめに

 前回では、nerdctlやbuildkitなどのソフトインストールはビルドされたパッケージを使用しました。パッケージを使用しない方法でインストールは?と疑問に思ったので、GitHubに公開してあるソースを利用してインストールする方法を試してみました。また、各ソフト実行をrootユーザで行う方法も試しましたの記載します。

ビルド対象について

 aptコマンドでインストール難しい以下のパッケージをソースコードからビルドする対象とします。

  • nerdctl
  • buildkit
  • CNI Plugins

ビルド実行

 ソースコードからビルドを実行する前にaptを使用して以下のパッケージを導入します。

  • containerd
  • golang
  • curl
  • git
  • make

導入するために以下のコマンドを実行します。

なお、本ビルドで導入したバージョンは以下の通りになります。

  • containerd 1.5.5-0ubuntu3.1
  • go 1.17
  • curl  7.740
  • git 2.32.0
  • make 4.3

nerdctl

 GitHubのサイトからソースコードをダウンロードします。ダウンロード先としてホームフォルダ直下とし、ダウンロードしたフォルダを作業フォルダとします。その作業を実施するためのコマンドをいかに記載します。

 次に、ソースコマンドからビルドを実施します。以下のコマンドを実行することでソースコードからビルドが行われます。なお、ソースコードはGo言語で記載しているためgo言語コンパイルツールが必要となります。

 上記コマンドを実行すると「_output」フォルダが作成され、そのフォルダ下にnerdctlコマンドのバイナリファイルが作成されます。

 それらをインストールするためのスクリプトがmakeで記載されているため以下のコマンドを使用してインストールします。

 上記コマンドを実行すると_outputフォルダ内のnerdctl実行バイナリとextras/rootless/フォルダ内に記載されたルートレス実行用スクリプトが/usr/local/bin/フォルダにコピーされます。

 以上で、nerdctlのビルドとインストール作業は完了です。

buildkit

 GitHubのサイトからソースコードをダウンロードします。ダウンロード先としてホームフォルダ直下とし、ダウンロードしたフォルダを作業フォルダとします。その作業を実施するためのコマンドをいかに記載します。

 buildkitのソース内に記載してあるMakefile内でbuildxを使用している。これを使用するためには、dockerをインストールする必要があります。よって、以下のコマンドでインストールと現在のユーザで実行できるように設定を行い、そのあとで再起動を行います。

 上記コマンド実施後、以下のコマンドを実行して、ソースコードからビルドを実施します。

 makeコマンドを実行すると、フォルダ内にbinフォルダが作成されその中に、buildkitを実行するための成果物が作成されます。それをインストールするには以下のコマンドを実行してください。

CNI Plugins

 GitHubのサイトからソースコードをダウンロードします。ダウンロード先としてホームフォルダ直下とし、ダウンロードしたフォルダを作業フォルダとします。その作業を実施するためのコマンドをいかに記載します。

 ビルドを実行するためには、ビルド用の実行スクリプトが存在しているため、以下のコマンドでスクリプトを実行しビルドを実行します。なお、ソースコードはGo言語で作成されているためGo言語のコンパイルツールが必要となります。

 スクリプトを実行するとbinフォルダが作成され、その中にCNI Pluginsバイナリが作成されます。もしインストールする場合は、以下のコマンドを実施します。

 以上で実行に必要なソフトのビルドとインストールは完了です。

実際の動作テスト

 コンテナを実行するためのツール導入が完了しましたので、rootでコマンドを実行し動作確認をしてみます。

nginxサーバーの起動テスト

 以下のコマンドでnginxの動作テストを行います。

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

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

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

 

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

 

コンテナのビルド

buildkitを動かすためには、buildkitdプログラムを立ち上げないとbuildツールが動かないため以下のコマンドでプログラムが起動し続ける。停止する場合はCtrl+Cで止めてください。

 buildkitプログラムを立ち上げるためには、buildkitdと呼ばれるバイナリを実行する必要があります。動作確認のため以下のコマンドでプログラムの実行テストを行います。なお、停止する場合は、Ctrl+Cで停止してください。

 上記のバイナリが動作し続ける状態でも、コンテナビルドすることはできますが、今後のことを考えるとサービス登録させたほうが作業がしやすくなるため/etc/systemd/systemフォルダ内にbuildkit.serviceファイルを作成してサービス登録するための準備をします。そのために以下のコマンドを実行してファイルのテキストエディタを開きます。

 上記テキストエリアに以下のデータ入力します。

 入力保存後、以下のコマンドでbuildkitのサービスを立ち上げます。

 一応、buildkitのサービスにアクセスできるかテストするため、buildkitが確保しているディスク容量を以下のコマンドで確認します。

 コンテナビルドのテストとして、実際にgo言語プログラムをコンテナ内でビルドして実行します。なお、そのgo言語プログラムはhello Worldと表示するプログラムとします。そのプログラムを作るための下準備として、以下の通り初期化します。

 main.goというファイルを作詞して以下の通り入力を行います。

 go言語のプログラムのテストとして以下の通り実行することで、Hello Worldと表示します。

 つぎに、上記プログラムをコンテナ化します。なお、使用するコンテナはここのリンク先にあるものを使用します。実際にDokcerfileファイルを作成して以下の通り入力します。

 なお、これまでのフォルダとファイル構成は以下の通りになります。

 以下のコマンドを使用して、コンテナ名をgohello:latestとしてビルドします。

 作成したコンテナを実行する場合は以下コマンドを実行すると、書いたプログラムの通り実行されます。

docker-composeファイルの実行

 docker-compose用のファイルテストとして以下の通り、NextCloudを立ち上げるためのdocker-compose.ymlファイルを作成します。

 上記ファイルをnerdctlで行うために以下のコマンドを実行します。また、オプションとしてデーモンとしてプログラムを実行します。

 上記コマンド実行後、ブラウザでhttp://localhost:8080にアクセスすると以下の通りNextCloudの初期画面が表示されます。

図2 NextCloudの画面表示

 

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

まとめ

 ソースコードからビルドして、ソフトをインストールを行い、コンテナ開発やコンテナ動作を確認することができました。今回、ビルドで使用したソースコードはビルドしやすいような環境を整えるように作成してあったためそんなに難しくなかったと思います。皆様も、様々なOSSのソースコードからビルドしてプログラムを実行できるようにしてみてはどうでしょうか?

 なお、本記事でおこなったrootユーザによる作業は特別なことがない限りは避けるべきことなので、紹介したように作業することはできるだけおこなわないようにしましょう。





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



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


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

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

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

Be the first to comment

Leave a Reply

Your email address will not be published.


*