「Docker」の版間の差分
提供: セキュリティ
(同じ利用者による、間の2版が非表示) | |||
行41: | 行41: | ||
* Dockerのコンテナは、揮発性で、コンテナ内の変更は、コンテナを破棄するときに消えます。フィアルシステムには、AUFS(Another Union File System)を利用しています。 | * Dockerのコンテナは、揮発性で、コンテナ内の変更は、コンテナを破棄するときに消えます。フィアルシステムには、AUFS(Another Union File System)を利用しています。 | ||
== Docker と LXC == | == Docker と LXC == | ||
− | Docker 0. | + | Docker 0.9からは、[[LXC]](Linux Containers)に依存しません。libcontainerドライバが実装され、LXCなしに稼働できます。 |
* [[Docker]] | * [[Docker]] | ||
** libcontainer | ** libcontainer | ||
行65: | 行65: | ||
* コンテナは、root ユーザを 非 root ユーザにマップする。権限昇格の影響を緩和する。 | * コンテナは、root ユーザを 非 root ユーザにマップする。権限昇格の影響を緩和する。 | ||
* Docker デーモンを root 権限なしで動作可能にする。特権が必要となる操作は、限定されたスコープを持ち、監視されているサブプロセスに委譲する。 | * Docker デーモンを root 権限なしで動作可能にする。特権が必要となる操作は、限定されたスコープを持ち、監視されているサブプロセスに委譲する。 | ||
+ | == Docker Engine 1.6 == | ||
+ | * ロギングドライバAPIが追加されました。[[syslog]]などのシステムにコンテナのログが送信でき、--log-driver オプションに json-file, syslog, none の3つのオプションが追加されています。デフォルトは、json-file です。 | ||
+ | * すべての[[コンテナ]]に対して ulimit 設定ができるようになりました。 | ||
+ | * コンテナイメージ管理リポジトリ Registry 2.0 が公開されました。 | ||
+ | |||
+ | == Docker Engine 1.5 == | ||
+ | * IPv6に対応しました。 -ipv6 フラグを指定することで、各コンテナにIPv6アドレスの割り当てが可能です。 | ||
+ | * [[コンテナ]]は、--read-onlyフラグでリードオンリーファイルシステムを利用できます。[[コンテナ]]内のアプリケーションがファイルを書き出す先を制限できます。 | ||
+ | == Docker Engine 1.3 == | ||
+ | * Docker 1.3 では、Docker イメージへのデジタル署名機能が追加されました。公開されているイメージが改ざんされていないことを示し、信頼性を保障できます。ただし、イメージが破損、または、改ざんされている場合に警告を行うのみで、起動を停止する機能はありません。今後の対応として、発行者の認証、イメージの品質保証、PKI管理機能が追加されていく見込みです。 | ||
+ | * デバッグ用に docker exec コマンドが追加されました。 | ||
+ | * CLIのオプションとして --security-opt が追加されました。カスタムの[[SELinux]]や[[AppArmor]]のラベルやプロファイルを追加できます。 | ||
+ | == DockerにコンテナにIPアドレスを割り当てる == | ||
+ | Dockerコンテナを起動すると以下のことが自動的に行われます。 | ||
+ | * veth(Virtual Ethernet)インターフェースの生成 | ||
+ | * docker0 インターフェースのIPアドレスの割り当て | ||
== 関連項目 == | == 関連項目 == | ||
* [[コンテナ]] | * [[コンテナ]] | ||
* [[最小権限の原則]] | * [[最小権限の原則]] | ||
+ | * [[LXC]] | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2015年5月16日 (土) 21:44時点における最新版
Docker とは、Linux用のアプリケーション実行環境のコンテナです。Dockerは、Go言語で開発され、Linuxの機能を利用します。
読み方
- Docker
- どっかー
目次
概要
オープンソースのコンテナ型仮想化ソフトウェアのDockerは、Docker社が開発しています。LinuxのDockerは、LXCの技術を使用していました。
Dockerでは、コンテナと呼ばれる隔離された空間でプロセスを実行します。
隔離空間
|
隔離空間
|
プロセス | プロセス | ||||
OS | |||||||
物理マシン |
Dockerの特徴
- コンテナ型であるため、仮想マシン型よりも軽量で、高速です。
- Docker 社がコンテナイメージのリポジトリ Docker Hub を提供している。
- コンテナの作成からアプリケーションのインストールまでの手順を Dockerfile と呼ばれるテキストファイルに定義できる。
- Dockerのコンテナは、揮発性で、コンテナ内の変更は、コンテナを破棄するときに消えます。フィアルシステムには、AUFS(Another Union File System)を利用しています。
Docker と LXC
Docker 0.9からは、LXC(Linux Containers)に依存しません。libcontainerドライバが実装され、LXCなしに稼働できます。
- Docker
- libcontainer
- libvirt
- lxc
- systemd-nspawn
Dockerのセキュリティ
Dockerは、Linuxのcgroupsとnamespaceの技術を用いて、コンテナを実現しています。Dockerの提供する機能は、本質的には、LXCと同じであるため、セキュリティリスクも同じと考えられます。
Dockerは、rootの権限で実行されるため、コンテナもroot権限が必要となります。root権限が必要なる原因は、Linuxカーネルにあります。
DockerデーモンとRest API 経由のアクセスを保護する必要があります。
Docker でのセキュリティ改善目標は、以下の通りです。
- コンテナは、root ユーザを 非 root ユーザにマップする。権限昇格の影響を緩和する。
- Docker デーモンを root 権限なしで動作可能にする。特権が必要となる操作は、限定されたスコープを持ち、監視されているサブプロセスに委譲する。
Docker Engine 1.6
- ロギングドライバAPIが追加されました。syslogなどのシステムにコンテナのログが送信でき、--log-driver オプションに json-file, syslog, none の3つのオプションが追加されています。デフォルトは、json-file です。
- すべてのコンテナに対して ulimit 設定ができるようになりました。
- コンテナイメージ管理リポジトリ Registry 2.0 が公開されました。
Docker Engine 1.5
- IPv6に対応しました。 -ipv6 フラグを指定することで、各コンテナにIPv6アドレスの割り当てが可能です。
- コンテナは、--read-onlyフラグでリードオンリーファイルシステムを利用できます。コンテナ内のアプリケーションがファイルを書き出す先を制限できます。
Docker Engine 1.3
- Docker 1.3 では、Docker イメージへのデジタル署名機能が追加されました。公開されているイメージが改ざんされていないことを示し、信頼性を保障できます。ただし、イメージが破損、または、改ざんされている場合に警告を行うのみで、起動を停止する機能はありません。今後の対応として、発行者の認証、イメージの品質保証、PKI管理機能が追加されていく見込みです。
- デバッグ用に docker exec コマンドが追加されました。
- CLIのオプションとして --security-opt が追加されました。カスタムのSELinuxやAppArmorのラベルやプロファイルを追加できます。
DockerにコンテナにIPアドレスを割り当てる
Dockerコンテナを起動すると以下のことが自動的に行われます。
- veth(Virtual Ethernet)インターフェースの生成
- docker0 インターフェースのIPアドレスの割り当て