＊未完成の記事です

この記事は未完成です。
誤認のまま書いた記事なので参照しないでください

削除以外に非公開にすることができないので編集が終わるまでこのような状態になっています
ご了承ください


[お詫び] 僕が利用しているPCがmac book airのため、Windowsの操作感がお伝えできません。申し訳ございません。
また、理解していない状態で見切り発射（投稿）してしまい、誤解を産むようなことをしてしまい申し訳ございませんでした。

本題に入りまして
~~前回の予告で「phpを動かしてみたい」と言ったな、あれは嘘だ。
と、ネタもここまでにしておいて、~~dockerの基礎であり、下絵になる部分のdocker imageの準備方法は（僕が調べた限りでは）４つもあって、どれもdocker使用時の方法として紹介されてるんですよ。
~~どの方法を選んでもdockerを準備できるんだから当たり前なんですが… ややこしい~~
今回はその４つの方法と簡単な紹介をしたいと思います。

#docker imageの準備しよう
docker: ![docker](http://cdn-ak.f.st-hatena.com/images/fotolife/p/portaltan/20150528/20150528170949.jpg "docker")
##docker imageの準備する４つの方法
1, docker Hubからコマンドを使ってimageを１つずつ準備する
2, docker Fileを用いてカスタムされたdocker imageの準備する
3, docker Composeを用いてdocker imageをまとめて操作する
~~4, docker imageを自作する~~

４つ書き出してみましたが、４番目は難しく、自分で書く必要もなさそうだったので説明は割愛します。

１〜３はステップアップ方式になっていて
１は単純に素のdocker imageを利用してコンテナを作る方法
２はdocker Fileを用いてdocker imageを自分好みにカスタマイズしたコンテナを作る方法
３はdocker Composeを用いてdocker imageを１つのコンテナにまとめて操作する方法
となっています。

docker公式では１つのイメージ（docker image）に、１つのコンテナを推奨しています。しかし、開発に必要なイメージが１つとは限りません。複数ある場合は、起動または停止のコマンドを操作毎に複数回打たなくてはいけません。それを解決してくれるのが複数のdocker imageを１つのコンテナにまとめて操作できるdocker Composeとなります。

### docker Hubからコマンドを拾ってきてコンテナを１つずつ準備する
1, [docker Hub](https://hub.docker.com/ "docker Hub")にアクセスします
![search box for docker hub](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1077136/d76e6e8a-2d9f-c307-a754-334ef5209e67.png)
2, 上部、検索欄から必要なソフトを探しましょう
3, 当てはまるソフトを選択しましょう
![pull image for docker hub 2021-02-09 1.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1077136/2067535c-71da-6ed3-c37f-b7bd57faf07e.png)
4, 右側にCopy and paste to pull this imageと書いていますので、この下のコードをコピーします
1行目が最短、２行目がオプション増し増しのコマンドです。
いろいろ調べてみたんですがもっと長くできるかもです。

``` ターミナル
docker pull [イメージ名]
docker pull [イメージ名]:[タグ名]
```

5, ターミナル(Mac)にコピーしたコードをペースとしてエンター
6, 必要なイメージが揃うまで２〜5を繰り返す

``` ターミナル
docker image
```

でpullしたイメージが揃ったか確認

7, コンテナを起動する

``` ターミナル
>docker run [コンテナ名]
docker run [オプション] –name [コンテナ名] [イメージ名]:[タグ名] [コンテナ起動直後に実施するコマンド]
```

### docker Fileを用いてカスタムされたdocker imageの準備する
いろいろ読んでみましたが、正直、この方法が一番意味わからなかったです。が
最も自由で、カスタム性が高いものだと思います。
１つのファイル（docker File）内でターミナルのコマンドや、docker独自のコマンドも使え、docker Fileを展開することでdocker imageを作れます。
しかも、docker Fileはコピーして共有することができるので、１人でもdocker Fileで環境を作ることができる人がいれば、そのファイルを共有してチーム全員がカスタムされた開発環境を作ることができます。すごい！！

完全には理解できなかったけどdocker Fileすごい！ っと思った記事:<br> [VS CodeでDocker開発コンテナを便利に使おう](https://qiita.com/Yuki_Oshima/items/d3b52c553387685460b0)

最後にまとめて参考にしたサイトが載っています。



### docker Composeを作成し、docker imageを自動生成する
docker Composeの便利なところはymlファイルにコードを書き、決められたコマンドを打つだけでdocker Fileが自動生成され、そのままdocker imageまで作ってくれるところです。しかも更新も可能らしい

```docker-compose.yml
version: '3.8'
services:
  php:
    #コメントアウト
    build: ./base
    ports:
    - 8080:8000
    volumes:
    - ./php
```
| コード | 説明 | 例 |
|:-:|:-:|:-:|
| version  | dockerのバージョンを指定<br>version: '3'だと3.0と判断されるらしい |  version: '3.8' |
| services  | dockerから受けたいサービスを下記に記す  |  services: |
| php  | phpを指定するってことだと思います<br>書き方が違う人もいるので変数みたいな感じ？  |  php: |
| build  | docker-compose.ymlから見て<br>docker Fileをどこに作るかパスを指定する  |  build: ./base |
| ports  | ホスト:コンテナの関係でポートの番号を書く<br>http://localhost:8080/ が自分のローカル開発環境  | ports: - 8080:8000  |
| volumes  | よく分かってないけどマウントするために書く<br>ファイルの読み込み書き込みに必要らしい  | volumes: - ./php  |


セキュリティー上ポート番号がホストとゲストで違うことやdocker Fileの保存先とマウント先が違うことが大事らしいのですが、僕の知識では説明できないので、違うフォルダにしてた方がいいということだけ覚えていたらいいと思います。

あとはターミナルでこれを打つだけ

```ターミナル
docker-compose up -d
```

siteファイルの中で作っていたとすると

>siteファイル
├ docker-compose.yml
├ baseファイル
│　└ Dockerfile
└ phpファイル
　　├ index.php
　　└ 制作物はphpファイルの中に

こんな感じになると思います

###参考にしたサイト
[Compose ファイル | Docker ドキュメント](https://matsuand.github.io/docs.docker.jp.onthefly/compose/compose-file/ "Compose ファイル | Docker ドキュメント")
[DockerでPHPを実行するコンテナを作る](https://gray-code.com/blog/php-on-docker/ 
 "DockerでPHPを実行するコンテナを作る")
[image - 入門 Docker](https://y-ohgi.com/introduction-docker/2_component/image/ "image - 入門 Docker")
[VS CodeでDocker開発コンテナを便利に使おう](https://qiita.com/Yuki_Oshima/items/d3b52c553387685460b0)
[Docker入門（第六回）〜Docker Compose〜](https://knowledge.sakura.ad.jp/16862/ "Docker入門（第六回）〜Docker Compose〜")1 ~ 6までありますが続いてるので全て読むことをオススメします。が、今回の範囲だけでいいなら6だけでも伝わります


読みやすかった記事をあげてみました。人により表現方法が多少、異なるのでサラッと読んで、読めそうと思ったものをしっかり理解してください。

##初心者がdockerでphpの開発環境を整える 一覧
[初心者がdockerでphpの開発環境を整える#1 [dockerとは？]](https://qiita.com/fulu/items/30728918802b6a96520a "dockerとは？")
[初心者がdockerでphpの開発環境を整える#2 [dockerをインストールする]](https://qiita.com/fulu/items/b2c5504278115f440c59 "dockerをインストールする")
[初心者がdockerでphpの開発環境を整える#3 [docker imageの準備方法]](https://qiita.com/fulu/items/b85fa89afc002837510f "docker imageの準備方法")
[初心者がdockerでphpの開発環境を整える#4 [レンタルサーバーでdockerが使えない？]](https://qiita.com/fulu/items/ab599c73354151e8e80a "レンタルサーバーでdockerが使えない？")