👻

【初心者向け】コンテナ 入門!完全ガイド

2023/11/06に公開

コンテナ

☘️ はじめに

本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

👀 Contents

コンテナ とは

コンテナを理解するには、次のようなサイトを見るとよいでしょう。

コンテナ化とは?(AWS)

コンテナとは(Google Cloud)

コンテナーとは(Azure)

コンテナについて理解する(Red Hat)

ここでは、簡単に要点だけ記述します。

アプリケーションは、主に「ランタイム、ライブラリ、プログラムコード、設定ファイル」から構成されます。

container-001

これらを開発のフェーズごとに異なる環境で稼働させるときの問題点として、ローカルでは動いていたけど、×× 環境では動かないといったことがよくあると思います。
この問題は、それぞれの環境でリリースした手順が異なっていたり、インストールされているランタイムや依存ライブラリが異なっていたり、といったことで発生します。

container-002

これを解決するため、アプリケーションの稼働に必要なものをコンテナという一つのものにパッケージしてしまおうということです。
これによって、どの環境でも動作が保証されることになります。

container-003

container-003

なお、一般的にパッケージの中に「設定ファイル」は含みません。設定ファイルは、環境ごとの動作を変化させるものであるため、設定ファイルを含むということは、環境それぞれが個別にセットアップされていることと大差なく、「どの環境でも動作が保証」された状態とは言えないからです。

コンテナベースの設計思想・原則については、次の資料を参考にしてください。

そして、コンテナとよく比較されるのが仮想マシン(VM)です。これについては、AWS Black Belt Online Seminar CON141 コンテナ入門 に次のような図で説明されています。

vm-vs-container

仮想マシンもコンテナもライブラリや他の依存関係とアプリケーションをまとめてパッケージ化していますが、コンテナには次のようなメリットがあります。

  • ゲスト 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

Docker 社(旧 dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)です。

ドッカー と読みます(Wikipedia)。

2021 年 9 月に有料化されましたが、個人利用、スモールビジネス、教育機関、非商用のオープンソースプロジェクトでは引き続き無料で利用できます。
有償化の猶予期間は、2022 年 1 月 31 日までした。

Pricing & Subscriptions

docker-price

コンテナは、Dockerfile というテキストファイルに記述することで利用できます。

# syntax=docker/dockerfile:1
FROM ubuntu:22.04
COPY . /app
RUN make /app
CMD python /app/app.py

Dockerfile を書くベストプラクティス

Docker Compose

複数のコンテナで構成されるアプリケーションで、Docker イメージのビルドや各コンテナの起動・停止などを簡単に行えるようにするツールで、YAML 形式で定義します。

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

Docker Compose

Kubernetes (K8s)

Kubernetes (K8s)

コンテナの運用管理と自動化を行うために設計されたオープンソースソフトウェアで、Google 社が社内で利用していたコンテナ管理ツールを汎用化したものです。

「クバネティス」「クバネテス」「クーべネティス」など読みます(Wikipedia)。「クーベ」と略したり、「K8s(ケーエイツ)」

マニフェストファイルを YAML または JSON 形式で定義します。

apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
    - name: busybox
      image: busybox
      args:
        - sleep
        - "1000000"
GitHubで編集を提案

Discussion