AzureでCentOSを立ち上げ、Dockerをインストールする

# 概要
Azureで仮想マシンを作成しCentOSをインストールします。その後、CentOSにDocker CEをインストールしDockerコンテナを作成します。

## 0.前提条件

- Azureのアカウントを作成していること<br>
(Azureのアカウントはhttps://azure.microsoft.com/ja-jp/ に移動し、「無料ではじめる」をクリックして作成します)
- ターミナルソフト(Teratermなど)をインストールしていること

## 1.Azure-CLIのインストール

1. https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest からOSに対応したOSのAzure-CLIをインストールする。<br>(本記事ではWindows10を使用して記載致します)

1. ダウンロードした「azure-cli-<バージョン名>.msi」を起動する。
![013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/80ec55af-05bf-b6cd-2d3f-073e70781dd6.jpeg)

1. 「I accept the terms in the License Agreement」にチェックを入れて「Install」をクリックする。
![014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/bcf5305e-a192-76e1-e396-ae2217cab436.jpeg)

1. Azure-CLIがインストールされるので待機する。
![015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/af74008f-6153-cbab-1d47-eb310e013850.jpeg)

1. インストールが完了した画面が表示されるので「Finish」をクリックする。
![016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/9d341762-5223-45e1-f92d-363a786d6aa8.jpeg)

1. コマンドプロンプトまたはPower Shellを起動する。
![017.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/7222a7de-48e6-e071-1cd2-612641b4370b.jpeg)

1. Azure-CLIのバージョン情報を表示し、インストールされたことを確認する。

```console:
> az --version
azure-cli                         2.0.70

command-modules-nspkg               2.0.3
core                              2.0.70
nspkg                              3.0.4
telemetry                          1.0.3

Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
Extensions directory 'C:\Users\xxxx\.azure\cliextensions'

Python (Windows) 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 02:47:15) [MSC v.1900 32 bit (Intel)]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.
```

## 2.CentOSの仮想マシンを作成する

### a.ブラウザ(GUI)から作成する

1. https://azure.microsoft.com/ja-jp/ に移動し「ポータル」をクリックする。
![020.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/de7efe95-66be-5871-a5b4-2d18df1139b7.jpeg)


1. Azureのログイン画面が表示されるので、使用するアカウントを選択しログインを実施する。
![021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/b9a75b24-763d-6b28-d4e5-0920a3a2c342.jpeg)

1. Azureポータルに移動したことを確認する。<br>「Virtual Machines」をクリックする。
![022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/078e7fd8-e8f3-bcd9-fafa-ac57ebc5f293.jpeg)

1. 上部メニューから「追加」をクリックする。
![023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/89f3f4d9-f595-683b-66ec-95df59784700.jpeg)

1. 「プロジェクトの詳細」にて「サブスクリプション」と「リソースグループ」を選択する。<br>リソースグループを作成していない場合は下部にある「新規作成」をクリックする。
![024.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/1fcf0a73-c4e7-9862-c114-6fdabe0af587.jpeg)

1. 「新規作成」をクリックした場合は、「名前」に作成するリソースグループ名を入力し、「OK」をクリックする。
![026.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a6c60f64-8fb2-d5c1-9b79-975f51458fdd.jpeg)

1. 「インスタンスの詳細」にて下記の情報を入力する。
    - 仮想マシン名：<作成する名前>を入力
    - 地域：「(アジア太平洋)東日本」を選択
    - 可用性オプション：「インフラストラクチャ冗長は必要ありません」を選択
    - イメージ：「CentOS-based 7.5」を選択
    - サイズ：「サイズを変更します」をクリックし、「VMサイズ」を選択する<br>
    (本記事では「Standard B2s」のVMサイズを使用します)
![029.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/95576055-8d1f-0666-252a-8028e29c0e8a.jpeg)
![028.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/9bbfc4fd-2cac-309a-c8c8-fad10efbb8d7.jpeg)

1. 「管理者アカウント」にて「認証の種類」を選択し、必須項目を入力する。
    - パスワード：設定したパスワードで仮想マシン上のCentOSにログインする
    - SSH公開キー：RSA公開鍵を利用して仮想マシン上のCentOSにログインする
![030.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/260a8b3b-8bbf-9439-8bcd-9296cd996846.jpeg)

1. 「受信ポートの規則」にて下記の情報を選択する。
 - パブリック受信ポート：選択したポートを許可する
 - 受信ポートを選択：SSH
![031.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/fe39cf48-fd29-6279-1821-8c975d729c93.jpeg)

1. ディスクやネットワークなどの詳細な設定変更を実施しない場合は「確認および作成」をクリックする。
![031_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/2c2e46bd-b785-ba1f-a690-98f375f0bdc3.jpeg)

1. 「認証に成功しました」と表示されたことを確認する。<br>その後、下にスクロールして設定した情報が正しければ「作成」をクリックする。
![042.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/f69b54a9-e884-b37b-049f-f785bd7dc418.jpeg)

1. 「デプロイが進行中です」と表示されるので待機する。
![048.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/40bcb0e7-8b21-8880-9335-7eae0b806e04.jpeg)

1. 「デプロイが完了しました」と表示されたことを確認する。<br>「リソースに移動」をクリックする。
![049.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/4090991e-b5be-5d25-50ce-200b357b8ead.jpeg)

1. 作成した仮想マシンの情報が表示される。<br>「パブリックIPアドレス」をコピーする。
![050.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/37f9e096-21b6-143f-2f72-115d08679b90.jpeg)

1. 端末にインストールされているターミナルソフトを起動する。

1. ターミナルソフトにコピーした「パブリックIPアドレス」を入力する。<br>(ターミナルソフトの種類によって設定方法が異なります)
![071.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/69338f18-fa3d-9bdc-505a-7cdd4cb804ac.jpeg)

1. 「ユーザ名」「パスワード」(SSH公開キーで作成した場合は公開鍵認証を実施)を入力してSSH接続を実施する。<br>(ターミナルソフトの種類によって設定異なります)
![073.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/9eb963f5-1225-bf30-2616-3804f44950d2.jpeg)

1. ログインできたことを確認する。
![075.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/2531fde7-0392-77ea-7812-9dcbaa7511c3.jpeg)

1. CentOSのバージョン確認を実施する。

    ```console
    $ uname -a
    Linux CentOS-Docker 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    ```

    ```console
    $ cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)
    ```


### b.コマンドで作成する

1. Aureにログインする。

    ```console
    > az login
    Note, we have launched a browser for you to login. For old experience with device code, use "az login --use-device-code"
    ```

1. WEBブラウザが立ち上がりログイン画面が表示される。<br>アカウントを選択してログインを実施する。
![077.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/abc2b478-d11c-00ed-84a9-948fdb11b991.jpeg)

1. 「You have logged into Microsoft Azure!」と表示されたことを確認する。
![078.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/73fd7fa4-ceb1-37b2-1c6c-d859479b5070.jpeg)

1. Power Shell(またはコマンドプロンプト)に戻り、ログイン情報が表示されたことを確認する。

    ```
    You have logged in. Now let us find all the subscriptions to which you have access...
    [
        {
            "cloudName": "AzureCloud",
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "isDefault": true,
            "name": "無料試用版",
            "state": "Enabled",
            "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "user": {
            "name": "xxxx@xxxx.com",
            "type": "user"
            }
        }
    ]
    ```

1. リソースグループを確認する。

    ```console
    > az group list
    [
        {
            "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxx",
            "location": "japaneast",
            "managedBy": null,
            "name": "xxxx",
            "properties": {
            "provisioningState": "Succeeded"
            },
            "tags": null,
            "type": null
        },
        {
            "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxx",
            "location": "japaneast",
            "managedBy": null,
            "name": "xxxx",
            "properties": {
            "provisioningState": "Succeeded"
            },
            "tags": null,
            "type": null
        }
    ]
    ```

1. リソースグループが存在しない場合は下記のコマンドを実行してリソースグループを作成する。

    ```sh
    az group create --name <リソースグループ名> --location <地域>
    ```

    ```console
    > az group create --name Azure-CLI-Group --location japaneast
    {
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/Azure-CLI-Group",
        "location": "japaneast",
        "managedBy": null,
        "name": "Azure-CLI-Group",
        "properties": {
            "provisioningState": "Succeeded"
        },
        "tags": null,
        "type": null
    }
    ```

1. 下記のコマンドを実行して仮想マシンを作成する。

    ```sh
    az vm create --resource-group <リソースグループ名> --name <作成する仮想マシン名> --image <OSの種類> --admin-username <ユーザ名> --generate-ssh-keys
    ```

    ```console
    > az vm create --resource-group Azure-CLI-Group --name cli-docker-centos --image CentOS --admin-username centoscliuser --generate-ssh-keys
    ```

1. コマンド実行後、「- Runnning ...」と表示されるので待機する。

1. 仮想マシンが作成されたことを確認する。

    ```
    SSH key files 'C:\Users\xxxx\.ssh\id_rsa' and 'C:\Users\xxxx\.ssh\id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location.
    {
        "fqdns": "",
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/Azure-CLI-Group/providers/Microsoft.Compute/virtualMachines/cli-docker-centos",
        "location": "japaneast",
        "macAddress": "xx-xx-xx-xx-xx-xx",
        "powerState": "VM running",
        "privateIpAddress": "xxx.xxx.xxx.xxx",
        "publicIpAddress": "xxx.xxx.xxx.xxx",
        "resourceGroup": "Azure-CLI-Group",
        "zones": ""
    }
    ```

1. ターミナルソフトにコピーした「パブリックIPアドレス」を入力する。<br>(ターミナルソフトの種類によって設定方法が異なります)

1. 公開鍵認証を実施してSSH接続を実施する。<br>(ターミナルソフトの種類によって設定異なります)

1. ログインできたことを確認する。

1. CentOSのバージョン確認を実施する。

    ```console
    $ uname -a
    Linux cli-docker-centos 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    ```

    ```console
    $ cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)
    ```

## 3.Docker-CEのインストール

1. 依存関係のモジュールをインストールする。

    ```console
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    ```

1. Docker-CEがインストールできるようにDocker-CEのリポジトリを追加する。

    ```console
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    ```

1. Docker-CEをインストールする。(自動的にDockerの最新版がインストールされる)

    ```console
    $ sudo yum install -y docker-ce
    ```

1. Docker-CEがインストールされていることを確認する。

    ```console
    $ docker --version
    Docker version 19.03.1, build 74b1e89
    ```

## 4.Docker-CEの起動

1. Docker-CEを起動する。

    ```console
    $ sudo systemctl start docker
    ```

1. Docker-CEが起動したことを確認する。

    ```console
    $ systemctl status docker
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
    Active: active (running) since Sun 2019-08-04 15:53:39 UTC; 1min 16s ago
        Docs: https://docs.docker.com
    Main PID: 46620 (dockerd)
        Tasks: 10
    Memory: 40.0M
    CGroup: /system.slice/docker.service
            mq46620 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd....
    ```

## 5.Docker-CEでCentOSのコンテナを作成する

1. CentOSのDockerイメージをダウンロードする。

    ```console
    $ sudo docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    8ba884070f61: Pull complete
    Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
    Status: Downloaded newer image for centos:latest
    docker.io/library/centos:latest
    ```

1. CentOSのDockerイメージがダウンロードされたことを確認する。

    ```console
    $ sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              latest              9f38484d220f        4 months ago        202MB
    ```

1. CentOSのDockerコンテナを作成する。

    ```console
    $ sudo docker run -d --privileged -h centos_test --name centos_container centos /sbin/init
    4245d260886b6ba3bbd6f41e3bb7e8fe50fcf73696d2523f2fd03ff89c47fcbf
    ```

1. Dockerコンテナ内にあるCentOSのコンソール画面に入る。

    ```console
    $ sudo docker exec -it centos_container /bin/bash
    [root@centos_test /]#
    ```

1. Dockerコンテナ内にあるCentOSに入ったことを確認する。

    ```console
    [root@centos_test /]# uname -a
    Linux centos_test 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    [root@centos_test /]# cat /etc/redhat-release
    CentOS Linux release 7.6.1810 (Core)
    [root@centos_test /]# hostname
    centos_test
    [root@centos_test /]# whoami
    root
    ```

# 最後に
Azureで仮想マシンを作成し、仮想マシン上でDockerを稼働させることができます。これによりAzureの課金が発生してしまいますが、クラウド上で常にDockerを起動させ続けることができます。