Dockerについて

Dockerについて勉強したので、まとめる。

Dockerとは、コンテナ型仮想環境を作成、実行、管理するためのプラットフォーム

Dockerイメージ：仮想環境をまとめたもの。
Docker.Hub：Dockerイメージが集まった場所。

・メリット
プログラムのじっこ環境を素早く立ち上がる
再現性のある環境を用意できる
設定ファイルを共有することで同じ環境を立ち上げることができる
PC環境を汚さずに済む

--------------------------------------------

##### コンテナコマンド
```docker:sample
#単純なメッセージを表示するイメージからコンテナを動かしてみる
docker run hello-world

docker:dockerコマンド
run:サブコマンド
hello-world:イメージの指定

docker runコマンドは、下記3つのコマンドを実行している
docker pull：イメージの取得
docker create：コンテナの作成
docker start：コンテナの起動
```

##### タグ
イメージに付けることができるラベル名のことをタグと言う。
タグは自由な名前を付けることができる。
例えばプログラミング言語のイメージでは、バージョンを表すタグが付けられている。
ruby:2.6というイメージの場合は、"ruby"イメージのタグ"2.6"という意味になる。
これはRubyのバージョン2.6を含むイメージということになる。
タグを明示しない場合は、latestというタグ名が使われる。

##### メッセージ
```docker:sample
#クジラさんに単純なメッセージを言わせてみる
docker run docker/whalesay cowsay Hello!
```

##### イメージ
```docker:sample
#ローカル上のdocker image一覧を表示
docker images

#イメージにタグ付けするコマンド
docker tag docker/whalesay my_whalesay
- tag:タグ付けするサブコマンド
- docker/whalesay:元となるイメージ名
- my whalesay:新しいイメージ名

#イメージの詳細情報を表示するコマンド
docker inspect my_whalesay

#ローカルのイメージを削除するコマンド
docker rmi docker/whalesay
docker rmi -f docker/whalesay #オプション[-f]を付けると強制削除

#DockerHub上のイメージを取得(pull)するコマンド
docker pull docker/whalesay

#latestタグは必ずしも最新ではないことに注意する

#Dockerfileからイメージを作成することをbuildという
#イメージファイルを作成(build)するコマンド
docker build --no-cache -t docker-whale .
--no-cache:cache
- build:イメージをビルドするサブコマンド
- -t docker-whale:-tでタグ名を作成、タグ名は「-t」の後に指定
- .:ビルドコンテキストの指定(ファイルのディレクトリ場所)
```

##### DockerHub
```docker:sample
#DockerHubへイメージをpushする
#pushする前にDockerHubにログインする必要がある。
docker login #username,passwordを入力する

#サーバーを利用している場合
docker login <サーバー名> #username,passwordを入力する

#DockerHubにおけるタグ付けルール
<DockerID>/<イメージ名>:<タグ名> #タグ名は省略可、省略すると自動でlatestとなる
docker tag docker whale kame/docker-whale:ver1 #イメージにタグを追加する

#DockerHubへイメージをpushする
docker push <DockerID>/<イメージ名>:<タグ名>
docker push kame/docker-whale:ver1 

#DockerHubへイメージをpushしたので、ローカルのイメージを削除する
docker rmi -f <IMAGEID> #IMAGEIDはdocker imagesで確認

#DockerHub上のイメージを取得(pull)してみる
docker pull kame/docker-whale:ver1
```

##### コンテナの起動・停止
```docker:sample
#nginxサーバーの構築
nginxのコンテナを立ち上げるコマンド
docker run --name <コンテナ名> -d \
-p <ホスト側のポート番号> <コンテナ側のポート番号><イメージ> 
#コマンド中で「\」を入れると改行できる
$ docker run --name test-nginx -d -p 8080:80 nginx 
#-dはデタッチモード、コンテナの実行をバックグランドで実行する
#コマンドを実行したフォアグランドで実行されるので、他の操作ができない

#コンテナを停止する
docker stop test-nginx

#コンテナを削除する
docker rm test-nginx
```

##### docker-machine
```docker:sample
#docker-machine(ホストの中身を)確認する
docker-machine ls

#docker-machineを停止する
docker-machine stop　<ホスト名>
docker-machine stop test

#docker-machineを削除する
docker-machine rm test

#docker-machineを設定する設定コマンド
docker-machine env

#操作対象の設定(アクティブにする)
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env) #環境によってコマンドが異なるので、「docker-machine env」で確認する

#操作対象の設定(アクティブ)を解除する
docker-machine env -u
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env -u)で解除

#ipの確認
docker-machine ip default
```


##### ログ確認
Dockerコンテナ内のログを確認するにはdocker logsコマンドを使用

```dockerfile
docker ps    //コンテナ名を確認
docker logs -f <コンテナ名>    //ログを確認したい時(-f：fllow。ログの出力を表示し続ける)
docker logs <コンテナ名> -f 2>/dev/null    //アクセスログを確認したい時(エラーログを捨てる)
docker logs <コンテナ名> -f 1>/dev/null    //エラーログを確認したい時(アクセスログを捨てる)
```