Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Dockerコンテナとは何か改めて考える

Dockerコンテナについて少し詳しく解説をします。

対象

目的 (Objective)

以下の問題の改善を目的としています。

  • アプリケーションの実行環境が変わると、確実な実行が保証できない
  • 環境構築に時間がかかる

戦略 (What)

以下の戦略をとっています。

  • 複数システムが同居しても競合の問題を起こさない
  • 各システムで独立した実行環境を構築する

戦術 (How)

仮想化によって、上記の戦略を実現しています。

特徴:

  • アプリケーションとOS・ライブラリ・Tool等をワンパッケージで提供する
  • 他の仮想化技術より早い起動を実現する
    • カーネルをホストPCと共有することで、コンテナ実行の度にカーネルを読み込まずに済む
      理由:
      ディストリビューション(CentOS、Ubuntu等)が異なってもカーネルは共通である(Linuxとは本来、カーネル部分だけを指す)。
      そのため、Linux上で動かすのであれば、カーネルをホストPCと共用しても問題ない。
  • 可搬性・冪等性を確保する
    • 可搬性・冪等性を阻害する要因
      • CPUアーキテクチャが異なる
      • カーネルバージョンが異なる
      • ダイナミックリンクライブラリを使用する
  • dockerfile用DSL・DockerHubを用意することで、環境構築の手間を減らす
    • アプリケーションデプロイに特化している
      • 全てのアプリケーションがコンテナ化に向いているわけではない
        コンテナは一旦破棄し、作り直すと、初期状態に戻る。そのため、ステートレスなアプリケーションと相性が良い。反面、ステートフルなアプリケーションは下記のような工夫が必要である。
        • ホストPCとディレクトリを共有
        • 永続化が必要な部分をストレージ用コンテナに分離

コンテナの仕様

OCIにて標準化が進められています。

コンテナ適用例

  • 本番環境
    • 開発環境と本番環境との差異を吸収する
  • 開発メンバ間での開発環境の統一
  • サンプル環境・サンプルコードの配布
    • 実行環境ごと配布することになるので「動かない」可能性を減らせる

終わりに

コンテナの基本事項をまとめ直しました。コンテナ構築の際に役立てていただけたら幸いです。

参考

Docker/Kubernetes 実践コンテナ開発入門

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

さわって学ぶクラウドインフラ docker基礎からのコンテナ構築

【初心者向け】Linuxカーネルって一体なんだ?

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away