「コンテナって何? どう使える?」――ソフトウェア開発の課題を解決するコンテナ技術:これから始める企業のためのコンテナ実践講座(1)(2/3 ページ)
「コンテナ技術」やコンテナ実行環境の「Docker」、大量のコンテナ管理や負荷分散を実現する「Kubernetes」について概要から本番活用の仕方まで解説する本連載。第1回は「コンテナ技術」や「Docker」が、現代のソフトウェア開発に求められるようになった理由を解説します。
クラウド時代になってからのソフトウェア開発の現状
さて、ここでいったん、クラウド時代になった昨今のソフトウェア開発の現状を整理します。
基本的にソフトウェア開発は、ユーザーから新規開発や既存機能の拡張などのリクエストがあり、そのリクエストに沿って開発の詳細を定義するところから始まります。そして、新たなソースコードを追加したり、既存のさまざまなソースコードを改修したり、連携させたりしていきます。
そのようなソフトウェア開発現場では、下記の4種類の環境で開発が進められます。
- 開発者の環境
- テスト担当者の環境(テスト環境/検証環境)
- ステージング環境
- 本番稼働環境
開発者の環境は、実際にソースコードを追加、修正する人自身が、ソースコードの挙動を確認する環境です。テスト担当者は、テスト環境を使って開発者のソースコードを別の観点からテストします。本稿では、この2つを基本的に「開発環境」とします。「ステージング環境」とは、本番前の顧客受け入れテスト用の環境です。
これらの環境において、開発者と運用管理者、それぞれの視点で課題があります。
●開発者視点での課題
まず、新しくソフトウェア開発を始める際に、開発環境の構築に時間がかかってしまうという課題があります。
次に、開発環境でシステムの挙動に問題がないことを確認していても、本番環境で問題が発生することがあります。
システムが動作しない理由は、OS、ミドルウェア、ネットワーク、データ、ライブラリなど、動作環境を構成するさまざまな要素にあります。どのプロジェクトにも通用する解決方法はありません。開発者は、本当に本番環境でソフトウェアがきちんと動くか、他ソフトウェアと相互作用するような不具合はないかなど、念には念を入れて検証してからリリースする必要があります。
さらに、「開発環境はオンプレミスで、本番環境はクラウド」と、環境ごとに構成が違う場合、その検証が大変という課題もあります。
●運用管理者視点での課題
運用管理者の視点で見たとき、既に稼働しているソフトウェアやアプリを更新することは、非常に慎重にならなければならない一方で、頻繁なリリースに対応しなければならないという課題があります。
本番稼働サーバにおける運用管理者の業務は、以下のようなものです。
【構築フェーズ】
- ハードウェア調達、OSインストール(クラウドを使う場合は、クラウドベンダーの選定、IaaSでインスタンスを立てるなど)
- 各種OS設定
- 各種ミドルウェアインストール
- 各種ミドルウェア設定
- 稼働監視設定
- 稼働監視/運用
【運用フェーズ】
- 設定変更
- ログ監視
- ミドルウェア更新
- アプリ更新
新しくサーバを構築するのは、データが入っていないので、そこまで神経質になる作業ではありません。問題は、既に運用が始まっているサーバの更新作業です。構築期間よりも運用期間の方が長いサーバの場合、更新作業にはさまざまな制約が伴います。例えば、以下のような制約です。
- サービスの利用が停止しないこと、もしくは最短の時間であること
- 利用者の少ない時間帯であること
- 再開後に、データ紛失など利用者に不便なことが起こらないこと
会社によっては、サーバの更新のために必要なコマンドを記した工程表を作成して、作業内容を全てリストアップしたものを一つ一つ手作業で2人以上のダブルチェックを行っている企業も多いのではないでしょうか。
●クラウド時代になってからのソフトウェア開発における課題まとめ
開発者視点と運用管理者視点で、それぞれの課題を見てきました。
開発者やサービスを提供する責任者は、より良いサービスを提供するために反復して機能の追加や改善を続けていきます。自分たちが作ったソフトウェアを早く本番で稼働させ、さらなるフィードバックが欲しいので、本番環境に早くソフトウェアをリリースしたいと考えます。
運用側は、サービスを停止せず、ソフトウェアを提供し続けることを重視します。開発者がリリースするソフトウェアに不具合があるかどうか、頻繁に検証する作業が必要になってきます。
このように、開発者や運用管理者でそれぞれ求められていることが異なります。もし、開発スピードを短縮できたり、何かあっても完全にアプリのバージョンを切り戻せたりすれば、これらの課題を解決できます。筆者は、こうしたソフトウェアの開発、運用における課題を解決する最適解として生まれてきたのが、コンテナ技術だと考えています。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 第1回 Dockerとは
Dockerの概要を知るための超入門連載(全4回)。Dockerとは何か、コンテナとは何か、従来のハードウェアエミュレーション型の仮想化とはどう違うのかなどについてまとめておく。 - VS CodeとPythonとDockerでWeb APIをコンテナ化!
VS CodeとPythonとFlaskで作成したWeb APIをDockerコンテナ上で実行したり、リモートデバッグしたりしてみよう。 - 無償の「Docker for Windows」で手軽にLinuxコンテナを利用する
Windows OS向けのDocker for Windowsが正式にリリースされ、Windows環境でも簡単にDockerを導入できるようになった。Windows 10のHyper-VでDockerのコンテナを利用してみよう。