Dockerのインストールからコンテナビルドまでの方法(Linux)

# **Dockerのインストール方法**

Dockerをインストールしていろいろ試してみたいってことで
・まずDockerって何か
・インストール方法は？
・ApacheのDockerイメージからコンテナを立ち上げてみる

の3本建てで調べて試してみた内容をまとめました


## Dockerとは

まずコンテナについて難しい言葉は使わずなんとなく自分の理解した内容をメモ

アプリケーションごとに使いたいソフトウェアや設定が異なる場合、それぞれが干渉しあってしまう場合がある。
→実現したいアプリケーションごとに **コンテナ(実行環境の箱)** を独立して用意してあげてあげたらお互い干渉しない！

これは仮想マシンを実行環境ごとに作成することでも実現可能だけど、ちょっと手間が多いしリソース面でも効率が悪い。
→なので開発環境を整えたりするときとかはじゃんじゃんコンテナを使っていこうよって感じ

***

そして、コンテナを実現するためにはホストOS上に **「コンテナエンジン」** と呼ばれるソフトウェアが必要。

**Docker** はそのコンテナエンジンの１つ
→複雑で毎回繰り返すインストールや各種設定の作業を自動化することで、ミスなく常に同じインフラ環境を簡単に用意する事が可能となる。


【コンテナでの管理システム】
cgroups：コンテナが使うハードウェアのリソース管理
namespace：ホストOSとコンテナが混ざらないようにユーザを管理

<br>

## Dockerインストール方法
ではさっそくDockerをインストールして色々試してみたいってことで
とりあえず、Linux(CentOS 7)にDockerをインストールしてみました。


1.まずyum-config-managerを使用するためにyumのユーティリティパッケージをインストールする。
**#yum install -y yum-utils**

2.Dockerのリポジトリを追加
（"yum-config-manager --add-repo リポジトリURL"でリポジトリを追加）
**#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo**


3.「Docker Engine」をインストールする
**#yum install -y docker-ce docker-ce-cli containerd.io**

4.Dockerサービスを開始
**#systemctl start docker**

5.Dockerの自動起動を設定
**#systemctl enable docker**

6.Dockerサービスの状態を確認
**#systemctl status docker**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/a6f576fb-4b4b-1e62-8552-9254e8cb880d.png)

→サービスが開始され、自動起動も有効になりました

これでDockerのインストールは完了！！



## Dockerの使い方

Dockerがインストールできたということで、今回はDockerコンテナでApacheサーバーを立ててみようと思います。

具体的にはApacheのDockerイメージからコンテナを立ち上げ、Webページが表示されれば今回はゴールとします。


ではまず、Dockerイメージについて

【Dockerイメージとは】
環境を作るときは目的のDockerイメージからコンテナをビルドすることで実現する。
例えばMySQLの環境を作りたければMySQLのDockerイメージ、Apacheの環境を作りたければApacheのDockerイメージを取得する。

***
身近な例えで言えば、Dockerイメージがゲームソフトみたいなものでそこからセーブデータを作る要領でコンテナをビルドできるような感じ。
マリオのソフトからマリオのゲームが遊べるセーブデータを作って遊ぶ。
今度はゼルダがやりたければゼルダのソフトを入れてそこからセーブデータを作って遊びましょうやみたいな。
それから別に１つのソフトでセーブデータは複数作ってもいいですよね、Dockerイメージはこのゲームソフト的な位置づけです。
***

**1.Dockerイメージを取得する**
さて、そのDockerイメージですがDockerHubというサイトからGetできます

https://hub.docker.com

アカウント登録してない人は登録しましょう！

まずここで取得したいDockerイメージを検索し（今回はhttpdで検索します）右側の[Copy and paste to pull this image]のところに記載しているコマンドを実行することで指定のDockerイメージを取得することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/ea426c1c-a5be-3d21-4839-f4a2291830cb.png)

Apacheのイメージを取得するコマンド
**#docker pull httpd**

また取得済みのイメージは
**#docker images**
で確認することができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/625a5762-dcb0-6e17-bd43-bf37a71d6279.png)

→IMAGE ID とかはここから確認できます
<br>

**2.コンテナを立ち上げる**
Dockerイメージを取得出来たら次はそこからコンテナを立ち上げる。

**#docker run -d -p 8080:80 httpd**

-p オプションは、コンテナのポート番号とローカルのコンピュータのポート番号を紐づけるオプションです。
-p 8080:80　とすればロカールの8080ポートに対してリクエストを行うとコンテナ側で待ち受けている80番ポートにつながりhttpdサービスが提供されるという仕組み。

http://ホストのipアドレス:8080
でアクセスし「It Works!」が表示されたらOK！

※ip a コマンドとか使えばipアドレスは確認できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/e52ca40c-1ca6-c33e-fa4a-f9ba171afdbd.png)


**3.コンテナの状態管理コマンド**

コンテナの状態確認
**#docker ps**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/a5f3065d-796a-43b2-07a3-55ce0ddfe040.png)
→起動中の[CONTAINER ID]はここで確認できる

ちなみに起動中じゃないやつも確認したいなら
**#docker ps -a**

＜コンテナの停止と起動＞
コンテナの停止
**#docker stop [CONTAINER ID]**
コンテナの起動
**#docker start [CONTAINER ID]**

[CONTAINER ID]を指定して停止・起動を行います
<br>

**4.イメージとコンテナの削除**
コンテナの削除
**#docker rm [CONTAINER ID]**

イメージの削除
**#docker rmi -f [IMAGE ID]**
※[IMAGE ID]はdocker imagesで確認できましたね


***
## 気になって試したこと
じゃあ本体のホストOSにもApacheを入れてサービス起動したらどうなんねんってことで試してみた。

普通に考えたらわかることだけどポート指定なし(80番)ならホストの方のサービス、8080で指定してアクセスすればコンテナの方のサービスが提供されるのではとの予想。

**#yum install httpd**
**#systemctl start httpd**

Apacheを入れてサービス起動
<br>

ポート指定なし(80)でアクセスしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/87f4ef8a-b65a-1dfc-b315-cb17b0724a66.png)

→Apacheのテストページが表示されました
(うまく表示されない人はファイアウォールを停止すると表示されるかも)


で、今度はポート8080を指定してアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/8c2e31ad-fcff-cde1-c62a-71f2494e9498.png)

こっちはコンテナの側のhttpdサービスが表示されてますね！


<br>

インストールからコンテナビルドまでの流れは以上です。
本当はDockerfileからビルドするとかもやりたいんですが、それはまた次回ということで！