第1章 Dockerの基礎
- 構成ファイルとコマンドだけで環境が作れる。
- アプリケーションと実行環境を同梱したデプロイがDocker流
- Dockerを利用するメリット
- 環境起因のトラブルを最小限にできる
- 冪等性が保てる
- いつなんど実行しても同じ結果が保証される
- 環境起因のトラブルを最小限にできる
- Docker Compose
- yamlファイルで起動順を制御したりできる
第2章 Dockerコンテナのデプロイ
- Dockerイメージとは
- コンテナを具現化するためのテンプレート
$ docker image pull gihyodocker/echo:latest # イメージを取ってくる
$ docker container run -t -p 9000:8080 # コンテナ実行
$ curl http://localhost:9000/ # アクセスしてみる
$ docker stop $(docker container ls -q) # 停止
$ docker container stop $(docker container ls --filter "ancestor=example/echo" -q) # 停止
$ docker image build -t example/echo:latest . # dockerイメージを作成
$ docker image ls # dockerイメージを確認
$ docker container run -p 9000:8080 example/echo:latest # ポートフォワーディング
- Dockerに対する操作
- イメージとコンテナの2つに大別される。
Dockerイメージ
- 「Dockerイメージをビルドする」
$ docker image --help # ヘルプを見る
$ docker search --limit 5 mysql # 検索する
- imaegeIDはバージョン番号としての役割もある
-
latest
はGitでいうこところのmaster
ブランチ
$ docker image tag example/echo:latest example/echo:0.1.0 # 特定地点をバージョン名などでタグ付けしておく
Dockerコンテナ
- 実行・停止・破棄の3つの状態
$ docker container run -t -d --name gihyo-echo example/echo:latest # 名前付きコンテナをつくる(開発時に便利)
$ docker container run -it alpine:latest # ターミナルが表示されて文字が入力できる。仮想環境にログインしたように使える。
$ docker container ls -q # コンテナIDだけ抽出する
$ docker container ls --filter "name=echo1" # 名前でフィルターする
$ docker container ls -a # 終了したコンテナを含める
$ docker container rm f66f6f2013da # コンテナを破棄する
$ echo '{"version":100}' | docker container run -i --rm gihyodocker/jq:1.5 '.version' # そのときだけ必要なコンテナは --rm で即時破棄する
$ docker container logs -f &(docker container ls --filter "ancestor=jenkins" -q) # ログを見る
$ $ docker container exec -it echo sh # コンテナ内でコマンド実行する
$ docker container cp echo:/echo/main.go . # コンテナ内のものをコピーしてくる
$ docker container cp dummy.txt echo:/tmp # コンテナへコピーする
運用管理向けコマンド
- prune
- 実行していないコンテナを一括削除
$ docker container prune # 実行していないコンテナを一括削除
$ docker image prune # 実行していないイメージを一括削除
$ docker container stats # コンテナ単位でのリソース使用状況を見る
- Docker Compose
- docker同士を連携する
- Jenkinsの例
docker-compose.yml
version: "3"
services:
echo:
image: example/echo:latest
ports:
- 9000:8080
$ docker-compose up -d # 起動
$ docker-compose down # 停止
$ docker-compose up -d --build # 毎回ビルドして裏で起動
$ docker-compose ps # 起動を確認
-
volume
はコピーでなく共有する
第3章 実用的なコンテナの構築とデプロイ
- Dockerはアプリケーションとインフラをコンテナ単位で分離したもの
- 1コンテナに1つの関心事
- 「1分置きにHello!を出力する」など
- レプリカとして複製された場合に副作用がないか
- Dockerのポータビリティの限界
- CPUアーキテクチャやOSの前提
- ダイナミックリンクの課題
- アプリケーションの挙動を環境変数で制御する
第4章 実践的なアプリケーション構築
SwarmでTODOアプリをつくる
$ docker container run -v ${PWD}:/root ch04/tododb:latest
とりあえずここまで。