docker入門 

# 前提

dockerの名前ぐらいは聞いたけど、よくわからんという方向けです。

### 環境

* Windows 10 Pro

# 動画

qiitaがYoutube埋め込み対応したらしいので貼ってみました。
動画で見たい方はこちら。

<iframe width="560" height="315" src="https://www.youtube.com/embed/iBsE0xXF2Co" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# ここからは文章で確認した人向け

動画の前半の部分だけ文章で書いておきました。
実際に動かしている部分は動画を参照してください。

# 仮想環境とは

実際に存在する物理的なコンピューターに仮想的なコンピューターやOSの環境を作ることです。

たとえば、
Windowsのパソコンに別のOSの「Linux」とか「Mac」を入れるようなことですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/ea85c5b2-dc82-9c89-8d6a-4fde211ff4a9.png)

## 仮想技術の種類

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/d660528a-cc51-608e-36a3-e2ca07aaad48.png)

そんな仮想環境ですが、実現するための仮想化技術にはいくつか種類があって今回は「ホスト仮想化」というのと「コンテナ仮想化」について確認してみます。

### 【ホスト仮想化】

コンピューターの中にコンピューターを仮想的に作ったようなものです。
仮想的なハードウェアもあって、ネットワークの設定やメモリの設定・ストレージのサイズなども設定できます。

有名な製品には「VM Ware」とか「Virtual Box」がありますね。
特にVM Wareは本番のサーバ環境を構成する際にも利用されますね。

コンピューターの中にコンピューターを構成するだけあって、
起動に時間がかかるし本体のコンピューターのマシンパワーも多く使います。

### 【コンテナ仮想化】
こちらはコンピューターの中にコンテナという箱を作ってOSの一部を入れたようなものです。
仮想的なハードウェアがあるわけではなく、仮想的なネットワーク設定ぐらいが存在します。

ハードウェアはホストのハードウェアをそのまま使います。
コンテナがプロセスのひとつとして動作します。

ホスト仮想化と比較して、CPU/メモリなどのマシンパワーの使用量が少なくて起動が早いという特徴があります。

有名な製品は「docker」ですが、他にもいくつかコンテナ技術の製品はあります。
AWSのFargateもコンテナ技術ですね。

### 【ホスト】とは

仮想化技術では仮想環境をもつ本体のコンピューターのことを「ホスト」呼びます。

## Infrastructure as Code

コンテナ仮想化ではAnsibleとかChefのようにインフラのコード化をすることもできます。

「Infrastructure as Code」と言って、コードにしておくことで再現性のあるインフラ環境を用意することができます。いつでも簡単に同じインフラ環境を作り直すことができるんです。

## なにがうれしいの？

* パソコンに簡単にサーバ環境を作れる。
* データベースなどをすぐに初期状態にできる。
* サーバにコンテナごとリリース（同じ環境）
* 環境をすぐに復旧できる。
* 同じ環境をすぐに複数作れる。

システム開発ではローカル環境にデータベースを用意することも多いですね。
その環境を作るのにいちいち手順書をもとに準備したりテーブル定義やマスタデータが変わる度に各自が反映するのは大変ですね。

コンテナを使うことで、データベースの最新の情報をコードで共有すると各自はコンテナを再作成するだけでいいというわけですね。

新しく参画したメンバーにもコマンド一つで環境が出来上がるって最高ですよね。

# Docker Install

* Linux, Windows, Macにインストール可能
* [ここから](https://docs.docker.com/get-docker/)インストール

Windows 10 homeにはDocker Toolboxしか対応してなくて大変だったが、最近はWindows 10 homeでも「Docker Desktop for Windows」が使えます。

## Hello world

インストールできたらHello worldやってみましょう。

Windowsならコマンドプロンプトやpower shellを開いて`docker run hello-world`を実行してみてください。

```
> docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

※このときdocker hubというところから「hello-world」のdockerイメージがダウンロードされています。

# Docker Hub

[Docker Hub公式サイト](https://hub.docker.com/)

Docker Hubは色んな人がコンテナのイメージをアップロードして公開している場所です。GitHubをご存知の方はGitHubのdocker版と思ってもらったらいいと思います。コンテナイメージというのはコンテナの種になるイメージファイルです。

よく使うコンテナイメージの例はこんなものがあります。

* centos
* ubuntu
* python
* java
* php
* redmine
* jenkins
* nginx
* httpd
* mysql
* postgres

自分でもアップロードして配布できます。

### チャレンジ

dockerインストールした人はwordpressぐらいなら数分ぐらいで作れるのでやってみてください。

* [dockerでwordpress](https://qiita.com/HyunwookPark/items/92d10899cd19f2f06f91#wordpress)

# P.S.

動画内のコードは今度貼ります。