Skip to content

DNET_Docker

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Docker

概要

  • Linuxコンテナを使った、主にソフトウェアの自動デプロイメント(展開)を支援するシステム
  • dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開
  • Docker for Windows(Kubernetesの構築の該当節を参照)は
    LinuxコンテナWindows Serverコンテナのフロント+αの機能を提供する。

LXC

LXC(Linuxコンテナ)とは、Linuxネイティブなコンテナの事。

  • Linux OSの持つコンテナ機能やリソースの管理機能などをベースに作られた、コンテナ型の仮想化技術

  • コンテナ自体は、Dockerが登場する以前から存在し、古くから商用製品にも採用されている技術。

  • 一般的に、Linux OS上での分離された空間を「Linuxコンテナ」と呼び、
    Linuxコンテナは、一般的に、LXCとも呼ばれる。

方式

  • コンテナ・イメージは、

    • LinuxのABI (Application Binary Interface)より上の
      「特定のディストリビューション上で再現されたファイルシステム」から。

    • VSS(バックアップの基礎知識の該当節を参照)でも使用している Copy on Write(CoW)の
      スナップショット(差分)の仕組みを UnionFileSystem の機能で実現して、差分で作成する。

  • これにより、コンテナ型の仮想化技術を実現している。
    (システム的にはカーネル共有の単なるプロセスの起動)

特徴

  • マシン全体を仮想化する仮想化技術と比べると、
    コンテナによる仮想化は軽量・高速で、実行に必要なリソースも少なくて済む。

  • システムの構成変更や展開の容易さなどから、
    開発段階から実運用環境まで、幅広く利用されている。

  • コンテナ上で動作するプログラムは、基本的にはLinuxのバイナリ。

Dockerコンテナ

  • 古いバージョンのDockerは、Linuxコンテナを使っていたため、
    Linuxコンテナも Dockerコンテナも同一のものとして考えても差し支えなかった。

  • 現在のDockerは、libcontainerを利用するようになり、
    Linuxコンテナに依存する部分が無くなった。

  • このため、Linuxコンテナと Dockerコンテナは、同じものではないが、考え方という観点では、
    Linuxコンテナも Dockerコンテナも、同様の分離された空間を提供することには違いがない。

  • 参考

機能

Build

コンテナ・イメージ(Dockerイメージ)をビルドする機能

Ship

Dockerイメージを共有する機能
(コンテナを積む、輸送するイメージ)

  • Buildした Dockerイメージ は Dockerレジストリで共有できる。
  • 改ざん検知や、脆弱性スキャン機能を持つ。

Run

DockerコンテナDockerイメージを実行させる機能

  • プロダクション環境では複数のホストで動作させる。
  • これには、オーケストレーション・ツールを利用する。

エディション

CE

  • 無償
  • サポートが不要な環境で使用する。

EE

  • 有償

  • 種類

    • Basic

      • サポート
      • 認証済コンテナ
      • 認証済みプラグイン
    • Standard

      • Basicに加え
      • LDAP、AD統合機能
    • Advanced

      • Standardに加え
      • セキュリティ機能

サブシステム

イメージ

Dockerイメージを作成するために、Docker Buildコマンドに指定するファイル

Docker multi stage build

  • Docker 17.05で導入された革新的な機能。

  • Buildを複数に分割して実行できる。

  • 今までも手動で複数のDockerファイルを組み合わせればできたが、
    1ファイルで書けるようになり気軽に中間イメージを色々使えるようになった。

  • ユースケース

    • 依存関係の分離

      • 開発用ビルドの依存
      • ランタイムの依存
    • , etc.

Dockerイメージ

  • ベースイメージに Copy on Write したスナップショット(差分)。
  • Dockerイメージを使用して Dockerコンテナを起動する。
  • イメージ・レイヤが上層に積み上げられる。

「Docker」向けに、作成した Dockerイメージを公開するサービス

クライアント

サーバ(?)

クライアントに対してサーバーなのか?(コンテナ・イメージのホスト環境的な意味)

Docker Engine (エンジン)

  • Dockerイメージの作成と Dockerコンテナの実行に必要なコア機能を提供。
  • この機能に関しては、Dockerコマンドから確認できる。

Docker Swarm (スウォーム)

  • ホストのクラスタリングと Dockerコンテナのスケジューリングをする。
  • クラスタは主に複数のマスター (master) とノード (node) から構成される。
  • Docker Swarmは K8s も利用可能(K8sもmasterとnodeから構成される)
    Kubernetesの該当節を参照)。

複数の Dockerコンテナを使うアプリケーションを定義する。

Docker Machine (マシン)

自分のネットワークやクラウド上に、自動的に Dockerコンテナをデプロイする。

Dockerデーモン

Dockerデーモンに Dockerイメージの実行を要求すると、Dockerデーモンは、

  • 実行する Dockerイメージの正しいバージョンを持っていることを確認する。

  • 持っていない場合、指定された Dockerレジストリから引き出す。

  • Dockerデーモンに Dockerイメージの実行を要求する。

  • この実行では、構築・実行・Dockerコンテナの配付を行う。

  • この動作をカスタマイズするにはいくつかの方法がある。

    • イメージを指定する際
    • イメージ・プルポリシー

仕組み

名前空間

Linuxのnamespace機能は、
オブジェクトに対する名前付けにより隔離機能を提供する。

PID namespace

  • オブジェクト : LinuxのプロセスID
  • コンテナ内で、同じPIDを使用できるなど。

Network namespace

  • オブジェクト

    • ネットワークデバイス、IPアドレス、ポート番号
    • ルーティング・テーブル、フィルタリング・テーブル
  • コンテナ内で、同じポート番号を使用できるなど。

UID namespace

  • オブジェクト : LinuxのユーザID
  • ホスト、コンテナで隔離する。
    (アカウントを異なる権限でマップする。)

Mount namespace

  • オブジェクト : ファイルシステム
  • ホスト、コンテナで隔離する。

UTS namespace

  • オブジェクト : Unix Time-sharing System(現在は既にその意味は失われている)
  • システム識別子(nodename 及び domainname)を隔離する。

IPC namespace

  • オブジェクト : プロセス間通信(IPC)オブジェクト

    • 共有メモリ、メッセージキュー
    • スレッド同期ツールキット
  • コンテナ内で、IPCオブジェクトを隔離する。

リソース管理

Linuxのcgroups機能は、リソース管理機能を提供する。

リソース

  • CPU : cgroup 内のタスクによって使用されるCPUリソースの

    • cpu : 使用量の制限
    • cpuacct : 自動レポートを生成
    • cpuset : 配置をセット
  • memory : cgroup 内のタスクによって使用されるメモリ・リソースの

    • 自動レポートを生成
    • メモリ使用の上限設定
  • device : cgroup 内のタスクによるデバイスへのアクセス許可・拒否

  • freezer : cgroup 内のタスクを一時停止あるいは再開

  • net_cls : ネットワークパケットをタグ付け

  • blkio : cgroup 内のタスクによる、ブロックデバイス上の I/O へのアクセスを制御・監視

管理機能

プロセスをグループ化して管理可能

ルート ┬-> ユーザ・アプリ ┬-> エディタ
       │                  └-> 自作アプリ
       │
       └-> デーモン・アプリ ┬-> WWWサーバ
                             ├-> APサーバ
                             └-> DBサーバ

ストレージ・ドライバ

種類:AUFS / Btrfs / Device Mapper / OverlayFS / ZFS

移行メモ: 元ページでは各ドライバが見出しのみで本文が無い(書きかけ)ため、
一覧にまとめた。

インストールと利用

インストール

利用

  • Windowsから
  • Ubuntuから
    Windowsと同じでOK。
    • ただしCMDではないが。
    • WSL2なら、シェルも同じ。
  • CentOSから

移行メモ: 元ページでは「CentOSから」の 2 項が見出しのみで本文が無い(書きかけ)。

Docker対応

ミドルウェアユーザ・プログラムで違いそう。

※ Dockerがべスプラをどっかに書いているかもしれんけど。

ミドルウェア

  • Confファイルの存在するフォルダをマウント出来るようにする。
  • Confファイルが存在しない場合は、既定値でConfファイルを生成するとか。
  • Dockerでは、単一のファイルをマウントすることも出来る
    (SRCが存在しない場合、DESTはフォルダとなるので要注意)。

ユーザ・プログラム

  • Confファイルはdocker buildする際に同梱させれば良い。
  • ただ、Confファイル同梱の場合、コンフィグが難しいので、
    環境変数で上書きできるような仕組みを実装したりすると良さそう。

参考

内部リンク

Docker Documentation

@IT

いまさら聞けないDocker入門

http://www.atmarkit.co.jp/ait/series/1511/

超入門Docker

http://www.atmarkit.co.jp/ait/series/5086/index.html

※ この記事は、Windows寄りになっている。

山市良のうぃんどうず日記

Qiita

docker-compose コマンド

コンテナ内で操作

移行メモ(正誤): 元ページの「先頭にsodoを付与」は「sudo」の誤記のため修正した。

Docker multi stage build

see the elephant

さくらのナレッジ


Tags: 移行, Linux, コンテナ, Docker, OSS, 開発基盤

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally