コンテナ技術概要

コンテナは「三方良し」のテクノロジー

コンテナは「三方良し」のテクノロジー

開発者のメリット

  • 開発者(Dev)は、アプリを動かす上で必要なライブラリなど依存関係をコンテナにまるごとパッケージでき、環境依存の問題から解放される
  • 開発環境やテスト環境をすぐ入手でき、アプリ開発に集中できる

運用者のメリット

  • 運用者(Ops)は、動作が確認されているコンテナを受け入れる
  • 言語や技術、バージョン等によってデプロイ手順を変えなくてよい
  • 統一手法で管理できる(ホストからはOSプロセスに見える)
  • デプロイも高速

コンテナと従来の仮想マシン(VM)との比較

コンテナと従来の仮想マシン(VM)との比較

低負荷、高集約率、高速起動

  • 低負荷、起動速い (ホストからはプロセスとして見えるだけ)
  • ゲストOSやハードウェアエミュレートの負荷なし (ユーザー空間を隔離しているだけなので実装がシンプル)

高ポータビリティ

  • Cloud(AWS, Azure, Google...)でもオンプレミスでもLinuxが動くところならどこでも稼動 & 移植が容易
  • 標準技術、ノーベンダーロックイン
  • Git likeなバージョン管理機能とイメージ共有機構(Docker Registry)

使い捨てできる環境をすぐ用意

  • コマンド1つでコンテナを作成したり消去したりできる
  • 設定ファイルから何度も同じコンテナを作成可能(Immutable)
  • 数秒でコンテナが起動する
  • アプリケーション層で抽象化できる
  • インフラをコード化でき、構成管理を自動化しやすい

コンテナによるアプリケーション可搬性

Linuxコンテナ + Linuxホスト = あらゆる環境での可搬性

コンテナによるアプリケーション可搬性

Linuxコンテナ(Docker)のワークフロー

原則としてLinux Kernelのみに依存しており可搬性が高い

  • Dockerfileに環境構築手順を記述(設計図)
  • 基本は「命令 引数」という簡易な形式
# コンテナの元になるベースイメージ(RHEL8 UBI)を指定
FROM registry.access.redhat.com/ubi8/ubi

# 作成者
LABEL maintainer hogehoge

# yumでいろいろインストール
RUN yum -y install httpd
RUN yum clean all
RUN echo "Apache is running." > /var/www/html/index.html

# ポート開放
EXPOSE 80

# ローカルファイルをコンテナ内に追加
ADD run-apache.sh /root/run-apache.sh

# 権限付与
RUN chmod +x /root/run-apache.sh

# コンテナ起動時にrun-apache.shを実行
CMD ["/root/run-apache.sh"]

コンテナオーケストレーション基盤とは?

複数ノードのコンテナランタイムを統合し、単一の巨大なコンピューティングリソースとして扱う、スケーラブルなコンテナクラスタ実現のためのミドルウェア

Linuxコンテナ(Docker)のワークフロー

Kubernetes(k8s)によるコンテナオーケストレーション

Kubernetesとは

コンテナ化後の世界

コンテナ化後の世界

top