Docker メモ

導入してみて、詰まったところをメモします。

## Dockerとは
仮想環境を簡単に作れるもの。VirtualBoxなどと比べると軽量で高速らしい。

## インストール
まずは Docker Community Edition をインストール。

* [Install Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/install/)
* [Install Docker Desktop for Windows](https://docs.docker.com/docker-for-windows/install/)  
  * [Docker Toolbox overview](https://docs.docker.com/toolbox/overview/)  
  Windows10 Home Edition では、toolboxも必要でした。

インストールしたら docker を起動して、ターミナルから確認

```
$ docker -v
Docker version 18.09.2, build 6247962
```

## 基本的な構成
ざっくりとした構成図です。

![alt](https://www.plantuml.com/plantuml/svg/SoWkIImgAStDuSf9JIjHACbNACfCpoXHICaiIaqkoSpFu-9Aoyn9LN39JyvEBG8nkK0IYNdfSC77JKiUDozytBpdSTCEB9AR7pS3KTlZvYwkv9pyqXIeX4Tf4bTYUcfUYO97Vd495nV20WLTNJiiHbiff835599ACtDIk30LWFLXsWhNLrIQnmMt6uSbN23743980nncDSKb-GKrgHMfoPfS3gbvAS0m1000)

DockerコンテナはDockerイメージを元に作成されます。Dockerコンテナが仮想環境です。  
Dockerイメージは予めDockerHubに用意されているものを取得するか、自分で作成したDockerfile(テキストファイル)をbuildすることで作成できます。
   
## コンテナを作ってブラウザからアクセスしてみる
 まずはイメージとコンテナの確認。どちらも存在しません。

```
$ docker images
REPOSITORY  TAG IMAGE ID  CREATED SIZE

$ docker ps -a
CONTAINER ID  IMAGE COMMAND CREATED STATUS  PORTS NAMES
```

コンテナを作成。

```
$ docker run --name myNginx -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
fc7181108d40: Pull complete 
d2e987ca2267: Pull complete 
0b760b431b11: Pull complete 
Digest: sha256:96fb261b66270b900ea5a2c17a26abbfabe95506e73c3a3c65869a6dbe83223a
Status: Downloaded newer image for nginx:latest
259abccb75f8af516fc5ff31a29cee018e28d42d654f830302d1d3c0dda4146e
```

* [-name(名前)](http://docs.docker.jp/engine/reference/run.html#name): コンテナの名前
* [-d(デタッチド)](http://docs.docker.jp/engine/reference/run.html#detached-vs-foreground): バックグラウンドで実行
* [-p(ポート)](http://docs.docker.jp/engine/reference/run.html#expose): コンテナのポートをホスト側に公開

---
再度イメージとコンテナの確認。Dockerイメージがダウンロードされて、コンテナが作成、起動されています。

```
$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED     SIZE
nginx       latest  f68d6e55e065  4 days ago  109MB

$ docker ps
CONTAINER ID  IMAGE   COMMAND                  CREATED             STATUS                        PORTS                  NAMES
259abccb75f8  nginx   "nginx -g 'daemon of…"   58 seconds ago      Up 57 seconds                 0.0.0.0:8080->80/tcp   myNginx
```

ブラウザから `http://localhost:8080/` にアクセスするとページが表示されます。

```
Welcome to nginx!
...
```

コンテナの動作確認

```
$ docker ps
```
コンテナの停止

```
$ docker stop {CONTAINER ID}
```
Dockerイメージや、Dockerコンテナはどんどん溜まって行くため不要であれば削除します。

コンテナの削除

```
$ docker rm {CONTAINER ID}
```
イメージの削除

```
$ docker rmi {IMAGE ID}
```


## Dockerfile からの Build

* [Dockerfile リファレンス](http://docs.docker.jp/engine/reference/builder.html)  

ファイル名`Dockerfile`でファイルを作成。

```Dockerifle
FROM centos:7
RUN yum update -y 
RUN yum install -y ...
...
```
`Dockerfile`のあるディレクトリまで移動して`build`する。

```
$ cd {path to Dockerfile}
$ docker build 
```

## 参考
- [docker-docs-ja 17.06.Beta](http://docs.docker.jp/engine/reference/run.html)
- [さくらのナレッジ Docker入門](https://knowledge.sakura.ad.jp/13265/)

--- 

以下、未整理

---
## DockerのIP
```
$ docker-machine env
$ docker-machine ip
```


## コンテナの作成
```
$ docker run -it ubuntu
```

## コンテナにアクセス
起動中のコンテナにアクセスするにはexecコマンドを使います。


## コンテナの停止・削除
```
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -q -a)
```

## イメージの削除
```
$ docker rmi $(docker images -q)
```

### docker-compose
```
# 起動
# -d でコンテナをデーモン化
$ docker-compose up -d

# 停止
$docker-compose down
```


# Wordpress

## docker-compose を使う
* `./docker-compose.yml`を作成する

  ```yml
  version: '3.1'

  services:
    # mysql ※ 5.7はダメ(2019.06.07)
    db:
      image: mysql:5.6
      container_name: mysql
      environment:
        MYSQL_ROOT_PASSWORD: wwcom999999
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpress
        MYSQL_PASSWORD: wordpress
    # wordpress
    wordpress:
      image: wordpress:latest 
      restart: always
      container_name: wp 
      ports:
        - "8080:80"
      depends_on:
        - db
      volumes:
        - ./var/www/html:/var/www/html
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_NAME: wordpress
        WORDPRESS_DB_USER: wordpress
        WORDPRESS_DB_PASSWORD: wordpress
  ```
1. マウント用のディレクトリ作成  
    ホストマシンからファイル編集ができるように、コンテナにマウントするためのディレクトリを作成する。
    ```
    $ mkdir -p ./var/lib/www
    ```

1.  初期化
    ```
    $ docker-compose up -d
    ```

1. IP の確認
  ブラウザからアクセスするために、dockerのIPを確認
    ```
    $ docker-machine ip
    192.168.99.100
    ```

1. ブラウザから`192.168.99.100:8080`へアクセスする。

* vmware toolbox の設定  
  Oracle VM VirtualBoxマネージャーから以下を開く
  ```
  設定 > ネットワーク > 高度 > ポートフォワーディング
  ```
  以下の設定を追加する。
  ```
  ホストポート：80
  ゲストポート：80
  ```

## その他
* 停止
    ```
    $ docker-compose stop
    ```
* 再開
    ```
    $ docker-compose start
    ```
* 停止と削除
    ```
    $ docker-compose down
    ```
* 確認
    ```
    $ docker-compose ps
    ```
## プラグイン
* [welcart](https://wordpress.org/plugins/usc-e-shop/#installation)
)