ソフトウェア設計論

まつ本

モダンSW開発

モダンSW開発 -仮想化-


目次

・仮想化とは
・仮想化の利点
・コンテナ仮想化
・ケーススタディ:演習D

・ライブコーディング

・宿題

仮想化とは

Virtualization

物理的なHWリソースをSWで抽象化する技術

広い概念なので注意
まずはサーバ仮想に着目

サーバ仮想のアーキテクチャ

仮想化の利点

SWによる制御が可能

新しい環境を自動で構築できる
コピーや削除も可能
柔軟なリソース割当が可能

リソース効率の改善

x 1つのHWに1つの環境
o 1つのHWに複数の環境

Isolation

複数の環境を完全に独立化できる
セキュリティの確保
クリーンな環境を作れる

仮想サーバのサービス

様々な選択肢がある

AWS, EC2 (Elastic Compute Cloud)
Azure, Virtual Machines
Google Cloud, Compute Engine

物理サーバを抱えずに仮想サーバを借りる

最近よくある構造

  • 持ち家 vs 賃貸
  • 車の所有 vs カーシェア
  • 植物の所有 vs レンタル

必ずしも安くなるとは限らない
一長一短なのでよく考えて使い分ける

コンテナ仮想化

Container-based Virtualization

Containerizationとも呼ぶ

徹底した仮想化を捨てて仮想マシンの弱点を補う
Dockerがデファクトスタンダード

コンテナ vs 仮想マシン

比較

仮想マシン コンテナ
マシンの起動時間 数分 数秒👍
リソース効率 低い 高い👍
Isolation 高い👍 低い
ホストOS依存 なし👍 高い

目的は同じだが実現手段が違う

目的:論理的なマシンの構築・SWによる制御…
手段:VM vs コンテナ

手段が違うので得手不得手がある

Dockerfile

Dockerfileと呼ばれる一種のソースコードに
コンテナの構築手順を記載する

Webサーバのコンテナ

# ベースイメージ(コンテナの初期状態)を指定
FROM debian:latest

# コンテナ構築の手順(ただのシェルコマンドの集合)
RUN apt-get update && \
    apt-get install -y nginx

# 80ポートを公開
EXPOSE 80

# nginx起動(=サーバを起動)
CMD ["/usr/sbin/nginx"]

ケーススタディ:演習D

演習Dの前提

コンパイラを開発する授業
事前に配布されたテストを通るように開発する

教員の毎年のセットアップ作業

教員は3つのサーバを立ち上げないといけない

  • nginx(Webサーバ,資料の配布や連絡)
  • GitBucket(Gitサービス,ソースコード提出先)
  • Jenkins(CI環境,動作確認用)

要件

セットアップを自動化したい・属人性を減らしたい
毎年立て直したい

どの選択肢が良いだろう


まずは仮想化なし(一番左)でスタート
次の年はどうしよう

組み合わせ:VM + コンテナ

VM + コンテナ

世の中にもよくあるアーキテクチャ

VMの上でコンテナを立ち上げる
VMは24時間起動しっぱなし(毎年使いまわし)

1コンテナ:1サービス
毎年コンテナを立ち上げ直す(サービスリセット)

コンテナの立ち上げを自動化する

頑張ってDockerfileを作る
サービスの構築手順をソースコード化する

次の年度は既存コンテナを全て削除して,
Dockerfileを起動(コンテナを再生成)すればOK
https://github.com/kusumotolab/exp-dev-infra/

モダンSW開発 -仮想化-


目次

・仮想化とは
・仮想化の利点
・コンテナ仮想化
・ケーススタディ:演習D

・ライブコーディング

・宿題

ライブコーディング

概要

6回の授業を踏まえて簡単な実装をしてみる
テスト・実装~CIまで

この種の技術は一度でも経験しておくと良い
案外たいした事ない
(既存の仕組みが良くできている)

題材:Versionクラス

1つのセマンティックバージョンを表すクラス

v = Version('1.2.3')  # こんな感じ

目標40m程度

モダンSW開発 -仮想化-


目次

・仮想化とは
・仮想化の利点
・コンテナ仮想化
・ケーススタディ:演習D

・ライブコーディング

・宿題

宿題 (10m)

授業のフィードバックをせよ

感想・改善点・要望などなんでもOK

  • Xが面白かった
  • Xが役立った
  • Xはもう知っている
  • Xを聞きたかった
  • Xはよくわからなかった 等

講義への参加姿勢として捉えます
ヨイショしなくてOK

提出方法

テキストにまとめCLEに提出すること