はじめに
Introduction Dockerのメモ。
なんとなくしかDockerを使えてなかったが、ちゃんと使おうと思ったのでチュートリアルからやり始めた。
動画がめちゃくちゃわかりやすいが、毎回動画をみるのも大変なのでメモに残す。
Dockerとは
コンテナ仮想化技術をつかった、サービス開発/デプロイ基盤。
以下の製品/ツールなどを含んだサービスのことを指す。
- Docker Engine
- Docker Hub
- Docker Machine
- Docker Swarm
- Docker Compose
- Kitematic (Docker DaemonをGUIで操作する際に利用)
何を解決できるか
- 長いデプロイ時間
- コスト/リソースの無駄遣い
- スケールがむずかしい
- 移行がむずかしい
- ベンダーロックインへの対応
コンテナとは
概要
分離されたアプリケーションごとの環境。
以下の要素を含む。
- ファイルシステム
- プロセス
- メモリ
- ポート
出典 : https://training.docker.com/self-paced-training
VirtualMachineとの違い
- VMは各アプリケーションごとにゲストOSが必要
そのため
- コンテナの方が軽い
- コンテナのほうがCPU, RAM, ストレージが少なくて済む
つまり
コンテナの方が一つのマシンに多く置ける。
Docker Engine
コンテナをbuilt, ship, runするプログラム
LinuxKernel namespacesとcontrol groupsを利用している
隔離した環境を作ってくれる
Docker Client / Daemon
概要
- Client/Server構造
- Clientは入力をデーモンに伝える
- デーモンはコンテナをつくる
- Clientとデーモンは同じホストでも違うホストでも動作する
出典 : https://training.docker.com/self-paced-training
各バージョンの確認方法
docker@default:~$ docker version
Client: # DockerClientの情報
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Server: # Daemon情報
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Docker Images
- ReadOnlyなコンテナ用のテンプレート
- Dockerユーザならだれでも作れる
- DockerHubやローカルに保存できる
- Imageは「レポジトリ名:タグ」で特定する
- デフォルトのタグは、「latest」
- コンテナは1つ以上のイメージを元にして作られる
Dockerの編成を管理するツール
- Docker Machine
- DockerEngineをインストールするためのツール
- Docker Swarm
- 複数のエンジンとコンテナを持つツール
- Docker Compose
- 複数コンテナを管理するツール
詳しくは別記事にした。
[Docker]複数ホスト管理ツールのまとめ
Dockerの利点
- 担当者のやるべきことをはっきりさせる
- 開発者はアプリケーションをつくること
- システム管理者はデプロイ
- 開発速度を上げる
- どんな環境でも動作する
- スケールしやすい
- 1つのホストで複数アプリを作れる
その他 (すでに導入済みだったので軽いメモ)
DockerHubの使い方 : 22分ころ
Dockerでの作業方法 : 33分ころ
コンテナ内のプロセスの構造について
コンテナ内でのコマンドのPIDは1になる。
Container ID
- コンテナはnameかIdで区別する
- LongIdと ShortId (docker psで確認)がある
コンテナをデーモンとして使う-dオプション
- docker psでLongIdを確認
- docker logs <コンテナId> で標準出力を確認
コンテナのポートを紐付ける-Pオプション
$ docker run -d -P tomcat:7
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d286e3524ef2 tomcat:7 "catalina.sh run" 4 seconds ago Up 4 seconds 0.0.0.0:32768->8080/tcp distracted_panini
↑で<マシンのIP>:8080
に行くと、tomcatが動いている。
コンテナのポートとマシンのポートを指定して紐付ける-pオプション
$ docker run -d -p 8080:80 nginx:1.7
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48a1ef8df772 nginx:1.7 "nginx -g 'daemon off" 6 seconds ago Up 6 seconds 443/tcp, 0.0.0.0:8080->80/tcp big_lalande
↑で<マシンのIP>(:80)
に行くと、nginxが動いている。