【初心者】必要最低限なDockerのコンテナ立ち上げまでの知識をまとめてみた

こんにちは。文系学生でありながら、エンジニアとして働けることが決まり、入社時期に向けて日々基礎から学んでいっている大学生です。
今回は、簡易アプケーションサービスを自作するためにその環境構築として`Docker`を使うことになりました。

**【今回目標とする環境構築】**
**①Docker for macをインストール
②CentOS6イメージを取得
③コンテナを起動し、コンテナに入る
④コンテナ内でApache、MySQL、Perlのインストール**

これを**LAMP環境**といいます。

```:LAMP環境
L → Linux
A → Apache
M → MySQL
P → Perl（PHP, python）
```
【参照】
[LAMP環境ってなに？Webサービスを作るための環境構築を理解しよう](https://liginc.co.jp/246048)



今回がDockerの一つ一つの説明を超ざっくりと説明しながら、このLAMP環境の構築を目指します。
最終的に大まかな流れだけでもつかんでいただければ幸いと思います。



それでは始めていきましょう。

##Dockerとは
Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。Dockerを使うことによって、OSとアプリがインストールされた環境を閉じ込めて保存しておき、いつでもその環境を立ちあげることができます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131373336392f34353537616361302d653733392d306138372d633032342d3839333537326166616264612e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/280816/fc71e0f9-0e4b-c890-6c54-b1abd2866499.png)
【引用】https://qiita.com/sivertigo/items/2211fc90cf13e0173cf3

**この図を以下の①~④までの流れを終えることによって、少しでも理解が出来ればと思います。**

今回の場合、これのUbuntuがCentOS6イメージとなり、コンテナ1を立ち上げそこにApache、MySQL、Perlがインストールされた環境を作ることが目標ですね。
Dockerはその環境を作成し、保存しておくための手段といったとこですかね（雑）

##①Docker for macをインストール

よくわからないと思いますが、下記のサイトからひとまずインストールしてみましょう。
https://docs.docker.com/docker-for-mac/install/

インストールしたら、Dockerを起動させてみましょう。
![](https://camo.qiitausercontent.com/20c7a24608838bd6d5217ea738fdaa861ee3784a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3130363834332f35646537633035322d376362382d316264352d306435342d3164626263343466616439382e706e67)

右上のアイコンをクリックすれば、Dockerが起動しているかどうか確認できると思います。

次にターミナルやiTerm2といったコマンドラインツールを開きましょう。

Dockerformacをインストールことにより、dockerコマンドが使えるようになります。

```
$ docker
```

これから`$docker ~~`といったコマンドを打っていきますが、これはDocker for macをインストールしたためだと思っていただければ大丈夫です。

##②CentOS6イメージの取得


**Dockerイメージ**
Dockerは、主にこのイメージにさまざまなアプリケーションやLinuxOSが保管されています。
その保管場所が、DockerHubという場所であり、そこに各々がpush(あげる)ことにより、様々な人が同じ環境を共有できます。
DockerHubからCentOSイメージを取得するためには`docker pull`コマンドを使います。

つまりCentOSイメージとは、CentOSというLinuxOSがインストールされたイメージになります。
それを先ほどインストールしたことにより使えるようになった`$ docker`コマンドで取得すればいいわけですね。

```
$ docker pull centos:6.9
```
これで取得完了です。
インストール済みのイメージの確認は、`$ docker images`コマンドで確認できます。

```
$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
centos                    6.9                 adf829198a7f        3 weeks ago         195MB
```
インストールされてますね。
それでは次に進みましょう。

##③コンテナを起動し、コンテナに入る

###コンテナを起動

**Dockerコンテナ**
コンテナとは、OSの内部に独立したアプリケーションの実行環境のことを言います。
起動中のコンテナは`$ docker ps`で確認できます。

```
$ docker ps
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                  NAMES
```
今はまだ何も起動していませんね。
ちなみに止まっているコンテナも含めて確認するには`$ docker ps -a`を使えばいいみたいです。


それではコンテナを作成し、起動させましょう。
Dockerイメージを使用して、コンテナを起動するためには、`$ docker run`コマンドを使います。
「centos」というDockerイメージを使用して、コンテナを起動させます。

```
$ docker run docker run -d -p 8181:80 centos:6.9 /sbin/init
```
-d：コンテナをバックグラウンド実行
-p：ホストとコンテナ間のポートフォワード設定 `-p <ホスト側のポート>:<コンテナ側のポート>`
/sbin/init：　[詳しくはこちら](https://teratail.com/questions/83479)
※この辺は自分で動かしていくうちに、疑問に思った一つ一つのコマンドの意味を調べてしっかり理解していくといいと思います。


```
$ docker ps
CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                  NAMES
216cbd5ce8c7        centos:6.9                       "/sbin/init"        24 minutes ago      Up 24 minutes       0.0.0.0:8181->80/tcp   elastic_wright
```
たしかにコンテナが作成し、起動できていますね。
そしたら次はコンテナの中に入ります。

###コンテナに入る
コンテナに入るには`$ docke exec`コマンドを使います。

```
$ docker exec -it 216 /bin/bash
```
-it：標準入力を開き続け、そこを操作出来るようにする
216：ここは入るコンテナの`CONTAINER ID`また`NAME`を入力します。
※`CONTAINER ID`は上3桁で大丈夫なので、今回は`216cbd5ce8c7`のうちの`216`を入力します。
/bin/bash：bashプロセス

【参照】
[docker exec -itって実際は何をしてるの？](http://willow710kut.hatenablog.com/entry/2018/01/11/224932)

さてこれでコンテナに入ることはできました。
コンテナに入れると下記のような表示になると思います。

```
[root@216cbd5ce8c7 /]#
```
ここまできたらあとはインストールするだけですね。
ラスト頑張って行きましょう！

##④コンテナ内でApache、MySQL、Perlのインストール

インストールには`yum install`コマンドを使います。

```
Apacheインストール
# yum -y install httpd
MySQLインストール
# yum -y install mysql mysql-devel mysql-server mysql-utilities
Perlインストール
# yum -y install perl-CPAN.x86_64
```
これでそれぞれのインストール完了です。
しかし、このままだとそれぞれアプリケーションは止まった状態にあるので、起動させなくてはなりません。

```
Apache起動
# service httpd start
MySQL起動
# service mysqld start
```

これでlocalhostで設定したポート8181で、Apacheを開いてみましょう。
<img width="1440" alt="スクリーンショット 2018-09-02 11.04.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/280816/887dce8b-82b4-7e4a-ad30-78e6bdf21dd5.png">

すると
<img width="1440" alt="スクリーンショット 2018-09-02 10.54.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/280816/002eabf5-0d51-9fc5-5c5a-1d70a72f9bc7.png">

無事開けましたね。
これで今回の目標は達成です！
ここで最初に添付した画像を見てみて下さい。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131373336392f34353537616361302d653733392d306138372d633032342d3839333537326166616264612e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/280816/fc71e0f9-0e4b-c890-6c54-b1abd2866499.png)
最初見たときよりも、大まかなイメージが掴めたんじゃないでしょうか。
それが達成できれば、この記事の意義を果たすことができたと思います。
最後までお付き合いしていただきありがとうございましたmm

###【参考にさせていただいた文献様】
・[Docker入門](https://knowledge.sakura.ad.jp/13265/)
・[【初心者向け】Docker for Macで開発環境を作る（アプリサーバとDBサーバのコンテナ間連携まで）](https://qiita.com/teradonburi/items/8c23806e20ec8efc0ef4)
・[Docker Tips 目次～Cloud ServerでDockerを使おう～](https://academy.gmocloud.com/docker/20151126/1281)

##最後に
今回は自分がまだ学びはじめということもあり、かなりざっくりと説明になってしまいました。
まあ、もともとタイトルに最低限と書いてある通りなのですが(笑)
それでもDockerでも触っているうちに、よくわからないまま打っているコマンドや使わなきゃいけない知らないコマンドが出てくると思います。そういうのも含めて自分で動かし、分からないことは調べて少しずつ理解していくことが自分の成長に繋がってくるんだと思います。
どうしても最初の掴みは分からないことだらけで、大変ですがそういう時はこういった　**【初心者向け】**のサイトを見つけて頑張って行きましょう。
自分もこれを機に記事を出しつつ、理解を深めていきます。
本当に最後までありがとうございました。