-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_Docker
- 戻る(Linux、言語等に依存しない汎用開発支援ツール)
- Docker
- Podman
- Linuxコンテナを使った、主にソフトウェアの自動デプロイメント(展開)を支援するシステム
- dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開
- Docker for Windows(Kubernetesの構築の該当節を参照)は
LinuxコンテナとWindows Serverコンテナのフロント+αの機能を提供する。
LXC(Linuxコンテナ)とは、Linuxネイティブなコンテナの事。
-
Linux OSの持つコンテナ機能やリソースの管理機能などをベースに作られた、コンテナ型の仮想化技術
-
コンテナ自体は、Dockerが登場する以前から存在し、古くから商用製品にも採用されている技術。
-
一般的に、Linux OS上での分離された空間を「Linuxコンテナ」と呼び、
Linuxコンテナは、一般的に、LXCとも呼ばれる。
-
コンテナ・イメージは、
-
LinuxのABI (Application Binary Interface)より上の
「特定のディストリビューション上で再現されたファイルシステム」から。 -
VSS(バックアップの基礎知識の該当節を参照)でも使用している Copy on Write(CoW)の
スナップショット(差分)の仕組みを UnionFileSystem の機能で実現して、差分で作成する。
-
-
これにより、コンテナ型の仮想化技術を実現している。
(システム的にはカーネル共有の単なるプロセスの起動)
-
マシン全体を仮想化する仮想化技術と比べると、
コンテナによる仮想化は軽量・高速で、実行に必要なリソースも少なくて済む。 -
システムの構成変更や展開の容易さなどから、
開発段階から実運用環境まで、幅広く利用されている。 -
コンテナ上で動作するプログラムは、基本的にはLinuxのバイナリ。
-
古いバージョンのDockerは、Linuxコンテナを使っていたため、
Linuxコンテナも Dockerコンテナも同一のものとして考えても差し支えなかった。 -
現在のDockerは、libcontainerを利用するようになり、
Linuxコンテナに依存する部分が無くなった。 -
このため、Linuxコンテナと Dockerコンテナは、同じものではないが、考え方という観点では、
Linuxコンテナも Dockerコンテナも、同様の分離された空間を提供することには違いがない。 -
参考
- コンテナ技術の基礎知識 | Think IT(シンクイット)
https://thinkit.co.jp/story/2015/08/11/6285
- コンテナ技術の基礎知識 | Think IT(シンクイット)
コンテナ・イメージ(Dockerイメージ)をビルドする機能
- コマンドを使用してBuildできる。
- 基本的には、Dockerファイルを使用してBuildする。
-
前述のCopy on Writeのスナップショット(差分)の仕組みで
Dockerイメージを重ね合わせる事が出来る。
Dockerイメージを共有する機能
(コンテナを積む、輸送するイメージ)
- Buildした Dockerイメージ は Dockerレジストリで共有できる。
- 改ざん検知や、脆弱性スキャン機能を持つ。
Dockerコンテナ で Dockerイメージを実行させる機能
- プロダクション環境では複数のホストで動作させる。
- これには、オーケストレーション・ツールを利用する。
- 無償
- サポートが不要な環境で使用する。
-
有償
-
種類
-
Basic
- サポート
- 認証済コンテナ
- 認証済みプラグイン
-
Standard
- Basicに加え
- LDAP、AD統合機能
-
Advanced
- Standardに加え
- セキュリティ機能
-
Dockerイメージを作成するために、Docker Buildコマンドに指定するファイル
-
Docker 17.05で導入された革新的な機能。
-
Buildを複数に分割して実行できる。
-
今までも手動で複数のDockerファイルを組み合わせればできたが、
1ファイルで書けるようになり気軽に中間イメージを色々使えるようになった。 -
ユースケース
-
依存関係の分離
- 開発用ビルドの依存
- ランタイムの依存
-
, etc.
-
- ベースイメージに Copy on Write したスナップショット(差分)。
- Dockerイメージを使用して Dockerコンテナを起動する。
- イメージ・レイヤが上層に積み上げられる。
「Docker」向けに、作成した Dockerイメージを公開するサービス
クライアントに対してサーバーなのか?(コンテナ・イメージのホスト環境的な意味)
- Dockerイメージの作成と Dockerコンテナの実行に必要なコア機能を提供。
- この機能に関しては、Dockerコマンドから確認できる。
- ホストのクラスタリングと Dockerコンテナのスケジューリングをする。
- クラスタは主に複数のマスター (master) とノード (node) から構成される。
- Docker Swarmは K8s も利用可能(K8sもmasterとnodeから構成される)
(Kubernetesの該当節を参照)。
複数の Dockerコンテナを使うアプリケーションを定義する。
自分のネットワークやクラウド上に、自動的に Dockerコンテナをデプロイする。
Dockerデーモンに Dockerイメージの実行を要求すると、Dockerデーモンは、
-
実行する Dockerイメージの正しいバージョンを持っていることを確認する。
-
持っていない場合、指定された Dockerレジストリから引き出す。
-
Dockerデーモンに Dockerイメージの実行を要求する。
-
この実行では、構築・実行・Dockerコンテナの配付を行う。
-
この動作をカスタマイズするにはいくつかの方法がある。
- イメージを指定する際
- イメージ・プルポリシー
Linuxのnamespace機能は、
オブジェクトに対する名前付けにより隔離機能を提供する。
- オブジェクト : LinuxのプロセスID
- コンテナ内で、同じPIDを使用できるなど。
-
オブジェクト
- ネットワークデバイス、IPアドレス、ポート番号
- ルーティング・テーブル、フィルタリング・テーブル
-
コンテナ内で、同じポート番号を使用できるなど。
- オブジェクト : LinuxのユーザID
- ホスト、コンテナで隔離する。
(アカウントを異なる権限でマップする。)
- オブジェクト : ファイルシステム
- ホスト、コンテナで隔離する。
- オブジェクト : Unix Time-sharing System(現在は既にその意味は失われている)
- システム識別子(nodename 及び domainname)を隔離する。
-
オブジェクト : プロセス間通信(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サーバ
-
コンテナ化されたアプリケーションの性能に影響を与える。
-
参考
- Dockerのストレージドライバを理解する - Qiita
https://qiita.com/NaotoHanaue/items/b9f395a63f7aae2a41b7 - ストレージ・ドライバの選択 — Docker-docs-ja ドキュメント
http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html
- Dockerのストレージドライバを理解する - Qiita
種類:AUFS / Btrfs / Device Mapper / OverlayFS / ZFS
移行メモ: 元ページでは各ドライバが見出しのみで本文が無い(書きかけ)ため、
一覧にまとめた。
- Windowsから
- Ubuntuから(VM起動後の開発環境のセットアップ(Linux)の該当節を参照)
- CentOSから
- Windowsから
- Ubuntuから
Windowsと同じでOK。- ただしCMDではないが。
- WSL2なら、シェルも同じ。
- CentOSから
移行メモ: 元ページでは「CentOSから」の 2 項が見出しのみで本文が無い(書きかけ)。
※ Dockerがべスプラをどっかに書いているかもしれんけど。
- Confファイルの存在するフォルダをマウント出来るようにする。
- Confファイルが存在しない場合は、既定値でConfファイルを生成するとか。
- Dockerでは、単一のファイルをマウントすることも出来る
(SRCが存在しない場合、DESTはフォルダとなるので要注意)。
- Confファイルはdocker buildする際に同梱させれば良い。
- ただ、Confファイル同梱の場合、コンフィグが難しいので、
環境変数で上書きできるような仕組みを実装したりすると良さそう。
-
Docker ドキュメント日本語化プロジェクト
Docker-docs-ja 17.06.Beta ドキュメント
http://docs.docker.jp/index.html -
Docker Engine
http://docs.docker.jp/engine/index.html -
Docker Compose
http://docs.docker.jp/compose/index.html -
Docker Machine
http://docs.docker.jp/machine/overview.html -
Docker Registry
http://docs.docker.jp/registry/toc.html -
Docker Swarm
http://docs.docker.jp/swarm/index.html
- Tech Basics/Keyword:Docker
http://www.atmarkit.co.jp/ait/articles/1407/14/news122.html
http://www.atmarkit.co.jp/ait/series/1511/
- (1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識
http://www.atmarkit.co.jp/ait/articles/1405/16/news032.html - (2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方
http://www.atmarkit.co.jp/ait/articles/1406/10/news031.html - (3):Dockerfileとdocker buildコマンドでDockerイメージの作成
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html - (終):Docker Hubの使い方とGitHubからのDockerイメージ自動ビルド
http://www.atmarkit.co.jp/ait/articles/1408/26/news038.html
http://www.atmarkit.co.jp/ait/series/5086/index.html
- 第1回 Dockerとは
http://www.atmarkit.co.jp/ait/articles/1701/30/news037.html - 第2回 Dockerを使ってみる
http://www.atmarkit.co.jp/ait/articles/1701/31/news043.html - 第3回 Dockerコマンドの使い方
http://www.atmarkit.co.jp/ait/articles/1702/01/news061.html - 最終回 Windowsプログラムを実行するWindowsコンテナ
http://www.atmarkit.co.jp/ait/articles/1702/02/news039.html
※ この記事は、Windows寄りになっている。
- (31:特別編)所要時間わずか10分で「Docker」を体験しよう
――Azureで始めるDocker入門
http://www.atmarkit.co.jp/ait/articles/1504/13/news020.html
-
Dockerの日本語ドキュメント
https://qiita.com/maemori/items/dd162002fbdd53d5582a -
Dockerを体系的に学べる公式チュートリアル和訳
https://qiita.com/Michinosuke/items/5778e0d9e9c04038903c -
Dockerコンテナとイメージを簡易的に理解する
https://qiita.com/horikeso/items/b9456a529444ff1ed547 -
なぜDockerではホストOSと違うOSベースのコンテナイメージが動くのか
https://qiita.com/kirikunix/items/33414240b4cacee362da
- docker-compose コマンドまとめ
https://qiita.com/aild_arch_bfmv/items/d47caf37b79e855af95f - Docker Compose - docker-compose.yml リファレンス
https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa
-
Dockerコンテナ内で操作 attachとexecの違い
https://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560 -
Docker | docker コンテナの中で vim が使えない場合
https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e -
ツール類のインストール
-
apt-get
「are you root?」となる場合は、先頭に sudo を付与。apt-get update apt-get install XXX
-
yum
yum install XXX
-
移行メモ(正誤): 元ページの「先頭にsodoを付与」は「sudo」の誤記のため修正した。
- Docker multi stage buildで変わるDockerfileの常識
https://qiita.com/minamijoyo/items/711704e85b45ff5d6405
- dockerを触ってみる
http://namu-r21.hatenablog.com/entry/2016/10/15/124009 - dockerが使うUnionFileSystemを僕なりに解釈した
http://namu-r21.hatenablog.com/entry/2016/10/27/013006 - dockerのファイルシステムについて知る
http://namu-r21.hatenablog.com/entry/2016/10/25/160147
-
連載:Docker入門
- (第一回)~Dockerとは何か、何が良いのか~
https://knowledge.sakura.ad.jp/13265/ - (第二回)~Dockerセットアップ、コンテナ起動~
https://knowledge.sakura.ad.jp/13795/ - (第三回)~各種dockerコマンドとDockerイメージ作成について~
https://knowledge.sakura.ad.jp/14427/ - (第四回)~Dockerfileについて~
https://knowledge.sakura.ad.jp/15253/ - (第五回)~コンテナ間通信~
https://knowledge.sakura.ad.jp/16082/ - (第六回)~Docker Compose~
https://knowledge.sakura.ad.jp/16862/
- (第一回)~Dockerとは何か、何が良いのか~
-
Dockerコンテナをクラウドサービス上で
共有できる「Docker Hub」を使ってみる
https://knowledge.sakura.ad.jp/2210/- DockerとDocker Hubの操作と概念
https://www.slideshare.net/zembutsu/docker-container-image-command-introduction-2017-03
- DockerとDocker Hubの操作と概念
-
連載:Docker Compose入門(Dockerコンポーズの該当節を参照)
Tags: 移行, Linux, コンテナ, Docker, OSS, 開発基盤
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。