【初心者向け】コンテナ 入門!完全ガイド
コンテナ
☘️ はじめに
本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
👀 Contents
コンテナ とは
コンテナを理解するには、次のようなサイトを見るとよいでしょう。
ここでは、簡単に要点だけ記述します。
アプリケーションは、主に「ランタイム、ライブラリ、プログラムコード、設定ファイル」から構成されます。
これらを開発のフェーズごとに異なる環境で稼働させるときの問題点として、ローカルでは動いていたけど、×× 環境では動かないといったことがよくあると思います。
この問題は、それぞれの環境でリリースした手順が異なっていたり、インストールされているランタイムや依存ライブラリが異なっていたり、といったことで発生します。
これを解決するため、アプリケーションの稼働に必要なものをコンテナという一つのものにパッケージしてしまおうということです。
これによって、どの環境でも動作が保証されることになります。
なお、一般的にパッケージの中に「設定ファイル」は含みません。設定ファイルは、環境ごとの動作を変化させるものであるため、設定ファイルを含むということは、環境それぞれが個別にセットアップされていることと大差なく、「どの環境でも動作が保証」された状態とは言えないからです。
コンテナベースの設計思想・原則については、次の資料を参考にしてください。
そして、コンテナとよく比較されるのが仮想マシン(VM)です。これについては、AWS Black Belt Online Seminar CON141 コンテナ入門 に次のような図で説明されています。
仮想マシンもコンテナもライブラリや他の依存関係とアプリケーションをまとめてパッケージ化していますが、コンテナには次のようなメリットがあります。
- ゲスト OS がない分、仮想マシンより軽量
- 軽量なため、高速に起動が可能
- 一度ビルドされたコンテナは不変であるため、可搬性が高い(どこでも起動できる)
また、コンテナはホストと OS のカーネルを共有しているため、セキュリティ上のリスクがあります。これについては、「AWS Black Belt Online Seminar コンテナセキュリティ入門」や、次の資料を参考にしてください。
AWS Black Belt Online Seminar
【AWS Black Belt Online Seminar】CON141 コンテナ入門(0:10:00)
【AWS Black Belt Online Seminar】CON142 Docker 入門(0:14:11)
【AWS Black Belt Online Seminar】CON120 AWS コンテナ全体概要(0:17:29)
【AWS Black Belt Online Seminar】CON110 なぜ今コンテナなのか(0:09:00)
【AWS Black Belt Online Seminar】CON130 コンテナセキュリティ 100(0:16:34)
【AWS Black Belt Online Seminar】CON231 コンテナセキュリティ入門 Part.1(0:13:51)
【AWS Black Belt Online Seminar】CON232 コンテナセキュリティ入門 Part.2(0:10:26)
【AWS Black Belt Online Seminar】CON233 コンテナセキュリティ入門 Part.3(0:13:26)
Docker
Docker 社(旧 dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)です。
ドッカー と読みます(Wikipedia)。
2021 年 9 月に有料化されましたが、個人利用、スモールビジネス、教育機関、非商用のオープンソースプロジェクトでは引き続き無料で利用できます。
有償化の猶予期間は、2022 年 1 月 31 日までした。
コンテナは、Dockerfile というテキストファイルに記述することで利用できます。
# syntax=docker/dockerfile:1
FROM ubuntu:22.04
COPY . /app
RUN make /app
CMD python /app/app.py
Docker Compose
複数のコンテナで構成されるアプリケーションで、Docker イメージのビルドや各コンテナの起動・停止などを簡単に行えるようにするツールで、YAML 形式で定義します。
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
Kubernetes (K8s)
コンテナの運用管理と自動化を行うために設計されたオープンソースソフトウェアで、Google 社が社内で利用していたコンテナ管理ツールを汎用化したものです。
「クバネティス」「クバネテス」「クーべネティス」など読みます(Wikipedia)。「クーベ」と略したり、「K8s(ケーエイツ)」
マニフェストファイルを YAML または JSON 形式で定義します。
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
Discussion