Docker入門 #2 【Dockerチュートリアル】

## この記事について
公式サイトの[Getting Started with Docker for Mac](https://docs.docker.com/docker-for-mac/)の内容です

Windows版は以下です
[Getting Started with Docker for Windows](https://docs.docker.com/docker-for-windows/)

とりあえずインストールしてwebサーバー立ててみようぜ！という意図のもと書いてます

## インストール
（すでにhomebrewやDocker Toolboxでインストールしている場合はアンインストールしてください）


Mac
https://www.docker.com/products/docker#/mac

Windows
https://www.docker.com/products/docker#/windows

インストールが環境するとマスコットの Moby-Dick（白鯨くん）が微笑んでくれます
![enter image description here](https://lh3.googleusercontent.com/-gn3G83A4-fw/WODEsPQyHJI/AAAAAAAAAFo/Wdl11JCbwrQNW6Yxz3p-fXa9pNQ3H37zQCLcB/s0/docker1.png "docker1.png")

## Dockerコンポーネント
Dockerはコア機能を提供する「Docker Engine」を中心に「イメージの作成→公開→コンテナ実行」を行うためのコンポーネント（部品）が提供されています
主なコンポーネントは次の通り

**Docker Engine（Dockerのコア機能）**
Docker イメージの生成やコンテナの起動などを行うためのコア機能
Dockerコマンドの実行やDockerFileによるイメージの生成を行う
<br><hr>

**Docker Machine（Docker実行環境構築）**
ハイパーバイザやVirtualBox、AWSやAZUREなどのクラウド環境などにDockerの実行環境をコマンドで自動生成するツール
<br><hr>

**Docker Compose（複数コンテナの一元管理）**
複数コンテナの構成情報をコードで定義して、コマンドを実行することでアプリケーションの実行環境を構成するコンテナ群を一元管理するためのツール
<br><hr>

**Docker Registry（イメージの公開・共有）**
コンテナの元となるイメージを公開・共有する為のレジストリ機能
Docker公式のレジストリサービスであるDocker Hubもこの機能を使用している
<br><hr>

**[Docker Hub](https://hub.docker.com/)（Docker公式のレジストリ）**
CentOS・nginxなどの公式イメージはこのレジストリから取得する
publicなので多くのユーザーによる自作のイメージが公開されている
イメージをprivateにしたい場合は社内サーバーにDocker Registryを立て、pushする流れになる


## Dockerの情報
コンテナ・イメージ数、ユーザ情報など現在の情報表示

```bash:
$ docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
...
```

## 各ツールのバージョンを確認

## Docker本体

```bash:
$ docker --version

Docker version 1.12.0, build 8eab29e
```

## Docker Compose（複数コンテナの一元管理）
複数コンテナの構成情報をコードで定義して、コマンドを実行することでアプリケーションの実行環境を構成するコンテナ群を一元管理するためのツール

```bash:
$ docker-compose --version

docker-compose version 1.8.0, build f3628c7
```


## Docker Machine（Docker実行環境構築）
VirtualBoxをはじめ、AWSやAZUREなどのクラウド環境などにDockerの実行環境をコマンドで自動生成するツール

```bash:
$ docker-machine --version

docker-machine version 0.8.0, build b85aac1
```

## webサーバーを立てる
「webserver」という名前でコンテナを立て、nginxのイメージを公式からpullしています

```bash:
# 8080番にしてます
$ docker run -d -p 8080:80 --name webserver nginx

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
357ea8c3d80b: Pull complete
:
```

http://localhost:8080
上記にアクセス可能となります

`Unable to find image 'nginx:latest' locally`
初回起動はローカルにイメージがなく、公式からpullしているので起動に5秒ほどかかりますが
2回目からはローカルに保存したイメージを使用する為、高速な起動が可能になります

## コンテナ一覧

```bash:
$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
c5e7400c19c9        nginx               "nginx -g 'daemon off"   1 minutes ago       Up 1 minutes        443/tcp, 0.0.0.0:8080->80/tcp   webserver
```

## コンテナの終了
指定したdockerコンテナを終了

```bash:
# CONTAINER IDでkill
$ docker kill c5e7400c19c9
or
# NAMESでkill
$ docker kill webserver
```

## コンテナの削除

指定したdockerコンテナを削除

```bash:
$ docker rm c5e7400c19c9
or
$ docker rm webserver
```


チュートリアル終了です！
お疲れ様でした

## リンク
[Docker入門 #1 【Dockerとは】](https://qiita.com/wMETAw/items/b9bc643ded4b92bf6add)
Docker入門 #2 【Dockerチュートリアル】
[Docker入門 #3 【WordPress環境構築】](https://qiita.com/wMETAw/items/710bbbb328b78757463a)
[Docker入門 #4 【CodeIgniter環境構築】](https://qiita.com/wMETAw/items/aaf6a94a83e2ac5ac0c3)
[Docker入門 #5 【Ruby on Rails5環境構築】](https://qiita.com/wMETAw/items/8cb41425a5d0bdace2df)
[Docker コマンドチートシート](https://qiita.com/wMETAw/items/34ba5c980e2a38e548db)