DevOpsについて(Docker等)

機械学習技術 人工知能技術 自然言語処理技術 セマンティックウェブ技術 オントロジー技術 検索技術 データベース技術 アルゴリズム デジタルトランスフォーメーション技術 Visualization & UX ワークフロー&サービス ITインフラ技術 本ブログのナビ

DevOpsについて(Docker等)

DevOpsは、ソフトウェア開発(Dev)とIT運用(Ops)を組み合わせて、ソフトウェア提供のスピード、効率、品質を向上させるための一連のプラクティスとなる。DevOpsは、開発チームと運用チームの間の従来のサイロを取り払い、コラボレーション、自動化、継続的改善の文化を促進することを目的としている。

DevOpsの主な原則は以下のようになる。

  • 継続的インテグレーションとデリバリー(CI/CD)。開発者と運用担当者が協力してソフトウェアのデリバリー・パイプラインを自動化し、コードのテスト、統合、デプロイを可能な限り迅速かつ効率的に行うことができる。
  • Infrastructure as code (IaC):インフラストラクチャーをコードで管理し、プロビジョニングする。インフラストラクチャをコードで管理し、プロビジョニングすることで、より効率的で信頼性の高いアプリケーションのデプロイメントを可能にする。
  • モニタリングとロギング : DevOpsチームは、問題を迅速に特定し修正するために、リアルタイムのモニタリングとロギングを優先する。
  • コラボレーションとコミュニケーション: DevOpsは、開発、運用、およびその他の関係者間のコラボレーションとコミュニケーションの文化を促進し、従来のサイロを破壊して、より速く、より効率的なソフトウェアデリバリを可能する。

DevOpsは、ソフトウェア開発プロセスを改善し、高品質のアプリケーションをより速く、より確実に提供することを目指す組織において、近年ますます普及している。

本ブログでは以下のページにてこのDevOps技術の概要とDocker等の具体的な実装について述べる。

技術詳細

ドメイン駆動設計 (Domain-Driven Design, DDD) とは、ソフトウェア開発において、ビジネスドメインの理解に基づくソフトウェアの設計手法となる。ここではについて述べる。

Dockerは、従来のハイパーバイザー型の仮想化基盤では手動で行なっていたOSのインストールといった複雑な人間の手作業をできるだけ省力化し、すぐにアプリケーションをコンテナとして稼働させる仕組みを提供している。また、アプリケーション構築の自動構築化、複数コンテナの強調動作、ソフトウェアコンポーネントの破棄、開発、本番環境構築の時間短縮など、従来の仮想化基盤と比較にならないレベルで高効率化を実現できる点などの特徴を持つ。

このように2013年に始まった、いわゆる「コンテナ革命」は、今や欧米において「ポスト仮想化」の大きな波に乗り、さまざまな先進的なベンダーが、Dockerをベースとした周辺ソフトウェアの開発とサービスの提供にしのぎを削っている。

Dockerによるコンテナ基盤は、人工知能、IoT、ビッグデータなどのソフトウェア開発力がキーとなる分野に必須の要素技術となる。世界の開発競争に打ち勝つには「柔軟性とスピードで確信をもたらす先進技術」の採用が不可欠であり、欧米のオープソースコミュニティや先進企業では、Dockerのような確信的なITを駆使し、自社の利益を生み出す努力を日々重ねている。彼らは、今までと同じ技術を使っていては、自分たちのビジネスの成長はあり得ないということを十分理解している。

前回は、企業のクラウドネイティブへの歩みとともに、その中で期待されているコンテナオーケストレーションについて述べた。しかし、クラウドネイティブを実装する上での大きな課題は、クラウド技術に対する環境依存となる。例えば、特定のクラウドベンダーサービスを利用すると、そのサービスの機能やサービスレベルによって、アプリケーションのアーキテクチャ変更が強いられる。これでは、いくらクラウドを利用しても、ビジネス変化に迅速に対応できるとは限らない。

コンテナ技術が注目されている一つの理由は、こうしたベンダー依存からの解放となる。その技術的要素には、Linux Kernelの機能が活用されており、これまでのアプリケーション実行環境と大きく変わるものはない。しかし、コンテナ技術の標準化への対応によって、クラウドが特定のベンダーによって占有されることなく利用できることに、クラウドネイティブへの第一歩がある。

ここでは、こうしたコンテナを支える技術について述べるとともに、コンテナやKubernatesがどういった仕組みによって、ビジネス価値を提供しているのかについて述べる。

Dockerを導入する上で、検討しなければいけない項目としては、まず「そもそもDockerが自社に必要なのか?」というものとなる。Dockerは、コンテナを管理するための様々な機能を提供しているが、既存の仮想環境などと比べて、メリットとデメリットを把握しておく必要がある。

たとえば、多くのハイパーバイザー型の仮想化ソフトウェアでは、ライブマイグレーションの機能を提供しており、ゲストOSを稼働させたまま、別の物理マシンに移動させることが可能だが、Dockerにおいては、ライブマイグレーションの機能が標準で提供されていないため、稼働中のコンテナを別のマシンに移動できない。

今回はDockerのインストールおよび設定を行い、さらにLaravel Sailをダウンロードし動作させるまでを述べる。

マイクロサービスは、1つのコマンドで複製やデプロイができる自己完結型のアーティファクトとしてパッケージ化されている必要がある。また、サービスは数秒以内に稼働できるように、起動時間が短く軽量である必要もある。コンテナは、ホストOSと必要な依存関係を持つベアメタルマシンをセットアップするのに比べ、固有の実装により迅速にデプロイすることができる。また、コンテナ内にマイクロサービスをパッケージ化することで、開発から本番環境への移行をより速く、自動化することも可能となる。よってマイクロサービスはコンテナ内にパッケージ化することが推奨されている。

Terraformは、クラウドインフラストラクチャやその他のITリソースを自動化するためのオープンソースのツールとなる。Terraformは、プログラマブルな方法でリソースを作成、変更、バージョン管理することができる。

Kubernetesは、Dockerやその他のコンテナランタイムで実行されるアプリケーションを管理するためのオープンソースのオーケストレーションツールとなる。Kubernetesは、複数のノードにまたがるアプリケーションのデプロイ、スケーリング、管理、そしてフェイルオーバーを簡単に行うことができる。

Gitは、ソースコードのバージョン管理システムで、Gitを使用することで、プロジェクトの変更履歴を追跡し、複数の人々が同時にプロジェクトに取り組むことができるものとなる。ここではGitの概要、開始するための準備、環境設定、基本コマンドと参考図書について述べている。

コメント

タイトルとURLをコピーしました