Azure VMの作成からDockerの実行環境構築まで

# はじめに

※超初心者向け

社内教育用に作成したドキュメントです。（[以前投稿した記事](https://qiita.com/kyohmizu/items/5f1929a2e949a9fa0da8)のAzure版）
パブリッククラウドもDockerも触ったことがない人を対象にしています。

# 準備するもの

- 作業マシン（Windowsを使用しました）
- Azureアカウント

# Azure VMの作成

AzureポータルからVMインスタンスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/0c5dc6c6-de73-c712-5ddd-e9da77629d32.png)

`Add`をクリック。
作成画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/d367bbf1-5a3f-7289-3cce-8b0f933ef3b8.png)

入力、変更項目は以下の通りです。

- `Resource group`：VMを作成するリソースグループを選択。新規作成もできます
- `VM name`：VMの名前
- `Region`：VMを作成するリージョン。何でもいいですが、今回は`Japan East`を選択
- `Image`：VMのOSイメージ。今回はUbuntuベースのコマンドを使用するので、デフォルトの`Ubuntu Server 18.04 LTS`を選択
- `Size`：VMのスペック。デフォルトのは高いのでグレードを落としています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/2db0b87f-b5e5-b753-96ec-2d8c54f9bb9a.png)

- `Authentication type`：ユーザー名、SSHのパブリックキーを設定します。SSHキーがない場合は、[こちら](https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html)を参考に作成してください
- `INBOUND PORT RULES`：INBOUNDポートを選択。`SSH`のみで大丈夫ですが、サービスを公開する等の場合は`HTTP`や`HTTPS`も選択する必要があります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/deb92658-d39b-351c-8f1e-c533e8950752.png)

- `Monitoring`：モニタリングは`Off`にしました。VMの監視を行いたい場合は`On`にしてください
- `Azure Active Directory`：AADでのログインに対応します。SSHキーは一つしか設定できないので、別マシンからVMにアクセスしたい場合は`On`にすると良いです
- `Auto-shutdown`：VMを自動で停止する設定。VMの停止忘れで課金が発生するのを防げます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/8a431434-8aad-a4d4-7270-48a36dbec840.png)

あとはバリデーションに成功することを確認し、作成を実行して数分待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/ac44f9d2-c8f6-c2d8-a0b0-0966eaed3814.png)

VMが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/8995c20f-6d94-b425-c9ee-d9726b63c772.png)

VMのOverviewから、`Connect`をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/acb3fa86-1ac4-7641-960f-8a8501c1e89a.png)

右側に表示される画面から、ローカルアカウントで接続するコマンドをコピーします。
シェルを起動し、コピーしたコマンドを貼り付けて実行すればVMに接続できます。

※`コマンドプロンプト`はデフォルトではSSH接続できないので、`Powershell`か`Git Bash`を使用すると良いです。

※AADで接続する場合は、[こちら](https://qiita.com/kyohmizu/items/d0cf760e000aa2a20710#2-%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B)の手順2以降を行ってください

# Dockerの環境構築

## インストール

以下の2つの方法で、Dockerをインストールできます。

### パッケージ管理ツールを使用

Ubuntuのパッケージ管理ツール`apt`を使用してインストールできます。

```bash
$ sudo apt update
$ sudo apt install docker.io
```

### 公式サイトからダウンロード

Ubuntu用の公式サイトは[こちら](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script)。
いくつかの方法が記載されていますが、スクリプトで実行するのが楽です。
※インターネットからダウンロードしたスクリプトは、実行前に必ず確認を行いましょう

```bash
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
```

## インストールの確認

バージョンが確認できればOKです。

```bash
$ sudo docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89
 Built:             Thu Jul 25 21:21:05 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:19:41 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
```

Dockerコンテナを起動してみます。

```bash
$ sudo docker container run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

（以下略）
```

Dockerの実行にはroot権限が必要です。
以下のように`sudo`をつけずに実行することもできますが、コンテナにホスト側のroot権限を与えてしまうため注意が必要です。

```bash
$ sudo usermod -aG docker $USER

（再ログイン）

$ docker container run hello-world
```

>**Warning:**
>Adding a user to the “docker” group grants them the ability to run containers which can be used to obtain root privileges on the Docker host. Refer to [Docker Daemon Attack Surface](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface) for more information.