【Docker】最初の第一歩。Docker を始める前に知っておくべきこと

![パンプキン カフェ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/84e4f982-aed5-3bd9-97fe-bc5cdcc8d307.png)

こんにちは、まゆみです。

今回の記事からDocker に関する記事をシリーズで書いていこうと思います。

まず実際の記事を書く前に、<font color="Red">私がDockerを学ぼうと思ったきっかけ</font>をシェアさせてください。

私が、Docker に関する記事を書こうと思ったきっかけは下記の4つです。

<ol>
<li>最初のきっかけは、アメリカ人のインフラエンジニアの友人に勉強を薦められたこと</li>
<li>日本語で書かれたDockerの関連記事が意外に少ないと感じた事</li>
<li>自分自身でDockerを試してみて、こんなに便利なツールはないと感じた事</li>
<li>上記2と3より、これから日本でDockerのスキルを持っているエンジニアは重宝されると思ったこと</li>

</ol>

です。

みなさんも、Dockerを学んで、希少価値のあるエンジニアを目指しませんか？

今回のQiitaの記事から、Dockerについての

<ul>

<li>私が座学で学んだこと</li>

<li>アメリカ人エンジニアの友人から教えてもらった実際の業務で使われていること</li>

</ul>

の両方を記事にして投稿していこうと思います。



#なぜDocker??

![Should I learn ？？.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a1afe3dc-e98e-c651-9591-01ece44c7e2c.png)


「新しい技術、学ぶの面倒だなあ。。。」

ですが、もし学習をするというコストと、その結果得られるベネフィットを比べて、ベネフィットの方が大きかったら？？

Docker は絶対に学ぶ価値があると私は思います。

開発環境を構築するとき、

>インストーラーをダウンロード

>インストーラーを起動

>エラー発生！

>トラブルシューティング

>リインストール

>また別のエラー発生！


の繰り返しで、なかなか前に進めなかった経験はありませんか？

Dockerを使うべき、最大の理由は<font color="Red">「人生をより快適にしてくれる」</font>ということです。

人生をより快適にというと大げさに聞こえるかも知れませんが、この

>エラー➡トラブルシューティング➡エラー解決➡他のエラー発生

という無限に続きそうなプロセスを簡単にしてくれるのなら、エンジニアにとってこんな朗報はありませんっ！

##どれくらい人生を楽にしてくれるの？

では、実際にDockerがどれほどパワフルな物なのか、例を示しながら解説しますね。


![Redisをインストールしてちょうだい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/13191b7d-fe96-0840-12b6-b9606ba0958d.png)


あなたは、

「Redisをインストールしておいて(そんなの簡単でしょというニュアンスも込められて)」


という命令を上司から受けました。

とりあえず、[Redisのページ](https://redis.io/download)にアクセスして試してみよう！

![2021-05-26_9-49-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/5d81b573-676f-9b13-5b1a-bb38209ea7b5.png)

わぁ。。。どこから手を付けたらいいねんっ！って吠えたくなると思います。(笑)

しかし、ここでDocker という救世主が。。。

![名称未設定のデザイン (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c841eaee-8e1f-9299-d1e4-4c61d99abc5c.png)


```
docker run -it redis
```

このコードを実行するだけで

![2021-05-26_10-03-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a7d6d38d-3f0f-a14d-a757-b5ab374b5e80.png)

ものの1秒でRedisの準備ができましたっ！


#Docker ってなに？
では今、Dockerを学ぶべき理由が分かったところで、次に、<font color="Red">Dockerとは一体どんなものなのか</font>を、Dockerで使われる用語も用いながら解説していきます

先ほど、例としてRedisのインストールをDockerを使って簡単にすることができました。

その時、水面下では何が起こっていたかというと

![Container.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/10fdd30a-4907-11af-61cc-51f4ab290dc6.png)

Docker Client(CLI)を使って、Docker Server(Docker Daemon)に命令を出します。

(※私たちはDocker Server に直接アクセスしているわけではなく、Docker Clientを通して命令を出しています)


![Docker Client.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b444868f-5466-0165-79ab-750303340eb7.png)

そしてDocker Serverが、Docker hub と言われるところにアクセスをして、そこからDocker fileというものを引っ張ってきます。

そのfileからImagesが作られImages からContainer が作られるのです。


Docker ImagesやContainer について詳しい事は、後々の記事で書いていきますが

>Docker hub にあるDocker file からDocker Images が作られ

>Container はDocker Images から作られるインスタンスである


Docker fileというものが実際どういうものなのか、[Docker hub](https://hub.docker.com/_/redis)にアクセスして、Redis のDocker fileを見てみましょう


![2021-05-26_11-01-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b7995957-821c-ae56-66a0-08753241323d.png)

<font color="Red">Docker Imagesが作られるプロセスが全て記載された</font>ファイルになります。

最終的にContainer が作られることで

>①それぞれが独立している環境

>②他の人とも共有できる環境

ができます。

Docker file はDocker hub から引っ張ってくるだけではなく、一から作成する事もできます。
そのあたりのことも後々、記事にしていきますね。


#Docker を始める前にLinuxコマンドを知っておくべき？

Docker はLinuxのコンテナ技術を利用していて、Linuxのコマンドで命令を出していくので、Dockerの勉強の前にLinuxのコマンドを知っておくべきか？と思われる方も多いと思います。

私は、Linuxのコマンドの勉強とDockerの勉強を並行して行っていけばいいと思います

Docker の学習をしていく中で、知らないコマンドも出てくると思いますが、その都度覚えていくという感じで十分前に進んで行けると思います。

#まとめ

今回はざっくりとDockerの解説をさせていただきました。

Dockerがどんなものなのか？を想像する助けになれたなら嬉しく思います。

次回以降の記事では

Docker のインストールの仕方(Windows)や、

ImageからContainer を作る時のコマンドなどについて書いていこうと思います。