KAROUSHI -Japanese Engineer Blog-

KAROUSHI -Japanese Engineer Blog-

Web、ネットワーク構築関連で仕事している、器用貧乏エンジニア。最近はAWS関連の勉強をしています。

HTML/CSS/JavaScriptだけを使ったWebサイトなら、S3で安価に構築して公開する。

S3のレイアウトが変更されたので改めて新レイアウトでWebサイトホスティングの手順を公開します。

目次

テスト用のサイトを作成する

S3ではトップページと、エラーページが必要なため、テスト用でindex.htmlとerror.htmlを作成します。
以下をコピーしてサクラエディタなどで作成しましょう。

index.html

<html>
<head>
	<meta charset="UTF-8">
</head>
<body>
	Hello S3
</body>
</html>

error.html

<html>
<head>
	<meta charset="UTF-8">
</head>
<body>
	Error!
</body>
</html>

index.html, error.htmlをアップロードする

S3のTOP画面を表示してバケット名を選択する。
f:id:jainders:20170725000946j:plain

[アップロード]をクリックする。
f:id:jainders:20170725000958j:plain

アップロードダイアログが表示されるので、[ファイルを追加]をクリックするか、ドラッグアンドドロップでアップロードするファイルを選択します。
f:id:jainders:20170725001114j:plain

アクセス許可を設定する画面です。
以降の設定はすべてデフォルトのままでよければ[アップロード]を押してアップロードを開始します。
今回は他の設定も説明するのでデフォルトのままで[次へ]を選択します。
f:id:jainders:20170725001133j:plain

プロパティを設定画面です。
ココではストレージクラスや暗号化の要否などが設定可能です。
デフォルトのままで[次へ]を選択します。
f:id:jainders:20170725001148j:plain
f:id:jainders:20170725001208j:plain

アップロードの確認画面です。
[アップロード]を押してファイルのアップロードを開始します。
f:id:jainders:20170725001222j:plain

index.htmlがアップされているのを確認します。
同様の手順でerror.htmlをアップロードします。
以下のようになればOKです。
f:id:jainders:20170725001317j:plain

Webサイトホスティングを設定する

index.htmlとerror.htmlを表示するように設定しましょう。
[プロパティ]→[static website hosting]を選択して以下を設定します。

  • 「このバケットを使用してウェブサイトをホストする」を選択
    • インデックスドキュメント: index.html
    • エラードキュメント: error.html

f:id:jainders:20170725001410j:plain

さてまだ設定途中ですが、一度index.htmlにアクセスして表示を確認してみましょう。
index.htmlを選択して右側のプロパティから[リンク]に記載されているURLをクリックしてアクセスしてみましょう。
f:id:jainders:20170725001600j:plain

すると「This XML file does not appear to have any style information associated with it. The document tree is shown below.」と表示され、アクセス拒否されます。
f:id:jainders:20170725001425j:plain

これはバケットに読み込み許可のアクセス権限がないためです。

バケットに読み込み許可の権限を設定する

それではバケットに読み込み許可の権限を設定します。

バケット名から[アクセス権限]タブ→[バケットポリシー]を選択します。
テキストエリアに以下を張り付け[保存]を押します。
"examplebucket"は自分のバケットのバケット名を設定します。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

f:id:jainders:20170725001624j:plain

設定が完了したら再度index.htmlを表示してみます。
Hello S3と表示されればOKです。

以上です。

AWSを登録したら最初にやりたい。IAMで多要素認証やアクセス権限などの5つの設定

AWSを登録したら一番初めにやってほしいのが多要素認証(MFA:Multi-Factor Authentication)の設定です。従来のユーザ名とパスワードの他にもう一要素(例えばワンタイムパスワード)を入力してログインする手法です。AWSではデフォルトでは設定されていないので、Identify and Access Management(通称IAM)で設定する必要があります。所要時間は30分から1時間程度です。たったそれだけの時間でMFAを設定できて、セキュリティも向上するならやらない選択肢はありません。またIAMは新規ユーザを作る際にも覚えておきたいサービスなので、この機会に一度触ってみてください。

目次

セキュリティステータスの設定

AWSマネジメントコンソール画面の左上の[サービス]→[IAM]を選択してIAMのダッシュボード画面を表示しましょう。
f:id:jainders:20170630234940j:plain

画面を表示するとセキュリティステータス一覧が表示されています。これらを1つずつ設定していきます。(はじめからすでに「ルートアクセスキーの削除」はチェックが入っています。)

ルートアカウントのMFAを有効化

早速ルートアカウントにMFAの設定を行います。
[ルートアカウントのMFAを有効化]→[MFAの管理]を押します。
f:id:jainders:20170630232111j:plain

すると[MFAデバイスの管理]ダイアログが表示されます。
f:id:jainders:20170630235054j:plain

  • 仮想MFAデバイススマホにMFAアプリをインストールして認証コードを生成してログインする方法です。
  • ハードウェアMFAデバイス:仮想MFAデバイスと同様認証コードを生成してくれます。違うのは物理デバイスを別途購入する必要があります。

 AWSがサポートしている物理デバイスこちら。
 
仮想MFAデバイススマホにインストールして準備してほしい旨が記載されています。仮想MFAのアプリはいくつかあるようですが、以下が分かりやすくてオススメです。

  • Authy

スマホにインストールして設定が完了したら[次のステップ]を押します。
f:id:jainders:20170630235118j:plain

MFAデバイスの管理画面で、スマホにインストールした仮想MFAデバイスから認証コード6桁を生成して2回入力します。Authyの場合は6桁の認証コードを生成したあと、1分後にまた6桁の認証コードが生成されます。それらを入力した後[仮想MFAの有効化]を押してください。
f:id:jainders:20170630235137j:plain

成功すると以下のようにMFAデバイスとしてスマホが関連付けらえれた旨が表示され、MFAの設定は完了です。以降ルートアカウントでログインする際には毎回関連付けたスマホで認証コードを1コ生成してログインする必要があります。
スマホを亡くすとルートアカウントでログインできなくなります。AWSの解約はルートアカウントでしかできないので、失くしたり、他のスマホに変えた際に誤って捨てたりしないように注意してください。
万が一スマホを亡くしてAWS解約ができなくなってしまった場合は、AWSサポートに電話してMFAの設定を解除してもらいましょう。
f:id:jainders:20170630235224j:plain

個々のIAMユーザの作成

ここでは新規ユーザを作成します。AWSを他のインフラメンバーや開発メンバーに公開して一緒に使う場合などはここで新規アカウントと権限を設定して生成します。
f:id:jainders:20170630235246j:plain

以下画面から[ユーザ追加]を押して新規ユーザアカウントを作ってみます。
f:id:jainders:20170630235322j:plain

ユーザ追加画面で以下項目を入力して、[次のステップ:アクセス制限]を押します。

  • ユーザ名:任意。アクセス権限が同一でよいなら下にある[別のユーザの追加]をクリックして複数ユーザを同時に作ることが可能です。
  • アクセスの種類
    • プログラムによるアクセス:AWS CLIなどを利用する場合にチェックします。あとから設定変更可能なので、良く分からない場合はチェックを外しましょう。
    • AWSマネジメントコンソールへのアクセス:AWSマネジメントコンソールへアクセスする権限を付与します。AWSマネジメントコンソールとは今まさに触っている管理画面のことです。
  • パスワード
    • 自動生成パスワード:ランダムなパスワードを生成したい場合。
    • カスタムパスワード:最初から決まったパスワードを設定する場合。
  • パスワードのリセットが必要:開発メンバー用に生成する場合、上記を自動生成パスワードにして、ココもチェックしておきます。アカウントの作成が完了したらユーザ名と自動生成されたパスワードを開発メンバーに連絡して、ログインしてもらい新しいパスワードを設定してもらいましょう。

f:id:jainders:20170630235655j:plain

ユーザのアクセス制限を設定します。
グループを作成しておけば、新規アカウントをグループに紐づけるだけで、そのグループのアクセス権限が設定されるので楽です。今回は「グループを使用してアクセス許可を割り当て」で作成しますのでスキップします。
f:id:jainders:20170630235747j:plain

[既存のポリシーを直接アタッチ]を選択して[フィルター]のテキスト入力欄に"Admini"と入力します。すると一番上に[AdministratorAccess]が表示されるのでそこにチェックを入れます。ポリシーの設定が完了したら[次のステップ:確認]を押します。
※ AdministraterAccessはAWSの全権限を与えるポリシーです。本来であればセキュリティを強固に保つために、利用するサービスだけにチェックするべきです。今回は説明のためだけに設定しています。
f:id:jainders:20170630235755j:plain


アカウント作成前の確認画面です。
問題なければ[ユーザの作成]を押してください。
f:id:jainders:20170630235915j:plain

今回作成したユーザ情報をCSVでダウンロードしたり、Eメールで送信することができます。開発メンバーに送信したい場合はココから送信すると楽ですね。
[閉じる]を押してIAMのダッシュボード画面に戻ります。
f:id:jainders:20170630235927j:plain

グループを使用してアクセス許可を割り当て

グループ生成します。先ほどの個々のIAMユーザの作成でグループを作成している場合は、すでにチェックが付いていると思いますのでスキップしてください。
では[グループの管理]を押してグループを生成します。
f:id:jainders:20170630235935j:plain

[新しいグループの作成]を押しましょう。
f:id:jainders:20170630235949j:plain

グループ名を設定し、[次のステップ]を押します。
グループ名:任意。
f:id:jainders:20170701000306j:plain

グループに紐づけるポリシーを設定します。
フィルタのテキスト入力欄に"Admini"と入力してポリシーから[AdministratorAccess]にチェックを入れて[次のステップ]を押します。
※ AdministraterAccessはAWSの全権限を与えるポリシーです。本来であればセキュリティを強固に保つために、利用するサービスだけにチェックするべきです。今回は説明のためだけに設定しています。
f:id:jainders:20170701000344j:plain

グループ作成前の確認画面です。問題ないか確認して[グループの作成]を押します。
f:id:jainders:20170701000352j:plain

グループのTOP画面に戻り先ほど作成したグループ名が一覧に表示されていること確認してください。
f:id:jainders:20170701000404j:plain

IAMパスワードポリシーの適用

アカウントのパスワードポリシーを設定します。簡単なパスワードはブルートフォースアタックで簡単に突破されてしまいます。ここでパスワードポリシーを事前に決めておいて、ユーザにポリシーに合ったパスワードを設定してもらいましょう。
[パスワードポリシーの管理]を押します。
f:id:jainders:20170701000413j:plain

パスワードポリシー画面では、パスワードの最小長や、大文字小文字の必須チェックなど、社内のセキュリティに即したパスワードポリシーを設定してください。
Security Token Serviceリージョンは、東京以外使うことがなければ無効化しておくことをオススメします。
f:id:jainders:20170701000450j:plain

新規アカウントでログイン

さてIAMダッシュボードに表示されているセキュリティステータスはすべてチェックマークになったでしょうか。
ルートアカウント以外でログインする場合は、ログインするサイトが違うので注意が必要です。
IAMダッシュボードの[IAMユーザのサインインリンク]のURLをコピーしてブラウザのお気に入りに入れておきましょう。
f:id:jainders:20170701000509j:plain

それでは右上から一度サインアウトして新規アカウントでログインしてみてください。
新規アカウント用のログインページはルートアカウントのログインページとデザインが異なり以下のような画面です。
ログインに成功して、AMSマネジメントコンソールの画面が表示されれば成功です。
f:id:jainders:20170701000805j:plain

IAMの設定は以上です。お疲れさまでした。

S3でバケットを作成する

AWSのS3の画面デザインが大幅に変わりましたね。
新しいデザインでS3の基本的なことを学びましょう。


目次

S3にバケットを作成する

AWSのホーム画面から上部メニューから[サービス]→[S3]でS3画面に行きましょう。
f:id:jainders:20170626000902j:plain

S3画面にきたら[バケットを作成する]からバケット作成画面へ行きます。
f:id:jainders:20170626000918j:plain

以下を入力して左下の[作成]ボタンを押しましょう。
バケットの作成画面です。
バケット名:一意のもの。またSSL対応するなら.(ピリオド)は入れないようにしましょう。
リージョン:特になければアジアパシフィック(東京)で。
f:id:jainders:20170626000934j:plain

バケットの作成が完了するとS3画面に先ほど作成したバケット名が表示されます。
f:id:jainders:20170626000948j:plain

バケットにファイルをアップロードする

作成したバケット名をクリックしてバケットの中に入ります。
[オブジェクトタブ]→[アップロード]でアップロード画面へ。
f:id:jainders:20170626000959j:plain

[ファイルを追加]を押すか、ドラッグアンドドロップでファイルを追加しましょう。
f:id:jainders:20170626001008j:plain

例ではtext.txtをアップロードしてみました。
アップロードが完了するとこのように追加されます。
f:id:jainders:20170626001021j:plain

また、アップロードしたファイルをクリックすると詳細画面に遷移し、そこの[ダウンロード]からダウンロードすることができます。
f:id:jainders:20170626001030j:plain

S3の基本的な内容は以上です。

IntelliJ IDEAのインストール手順

IntelliJ IDEAが最近注目を浴びていますね。有償版UltimateのPHPStromやWebStromが使いやすいとかなんとか。あとはGrails3をサポートしているのがIntelliJだけみたいですね。使ったことないですけど。
最近はSublimeTextやATOMを使っていたのですが、毎回同じものを入れているので正直最初から入ってた方が楽だなぁって思ったり。。。
やっぱ統合環境って一発インストールするだけである程度なんでもできるから楽ですよねー。
eclipseはUIが分かりづらいし重いし。。。というわけでIntelliJ IDEAをまずは入れてみました。こいつはJavaも対応しているし軽くて使いやすいならeclipseから移動しようかなぁと思ってます。
今回はまずはインストールまで紹介します。

目次

IntelliJ IDEAのダウンロード

まずはJetBrainsのサイトからIntelliJ IDEAをダウンロードしましょう。以下からアクセスして右上の[Download]を押してください。
IntelliJ IDEA the Java IDE
f:id:jainders:20170101223016j:plain

無償版と有償版が選べます。今回は無償版をダウンロードします。左のCommunityの[DOWNLOAD]を押しましょう。
f:id:jainders:20170101223018j:plain

以下画面でしばらく待つと自動的にダウンロードが始まるので、保存先を選んでダウンロードしてください。
f:id:jainders:20170101223020j:plain

IntelliJ IDEAのインストール

IntelliJ IDEAをダウンロードしたらexeを実行しましょう。すると以下画面になるので[Next]を押します。
f:id:jainders:20170101223536j:plain

インストール先の設定です。そのままで[Next]を押します。
f:id:jainders:20170101223538j:plain

デスクトップにショートカットを作成するかと、紐づける拡張子を選択します。またJREをまだインストールしてない場合は、JetBrainsのJREをインストールするか選択できます。
よく分からなければ以下のようにすればよいと思います。(32bitか64bitかは気にしたほうがいいですが。。。)
f:id:jainders:20170101223540j:plain

ここはそのままで[Next]を押しましょう。
f:id:jainders:20170101223541j:plain

インストールが始まるのでそのまま待ちます。
f:id:jainders:20170101223542j:plain

インストール完了画面です。そのままIntelliJ IDEAを起動する場合はチェックを入れて[Finish]を押しましょう。
f:id:jainders:20170101223543j:plain

IntelliJ IDEAの初回起動

初回起動時に表示され鵜画面です。IntelliJ IDEAの別バージョンをインストール済みの場合、以前の設定をインポートするか聞かれますが、初めてインストールする場合は必要ないので下の方を選んで[OK]しましょう。
f:id:jainders:20170101223545j:plain

UIの色を選択します。好きな方をどうぞ。私は右の黒い色にしました。
f:id:jainders:20170101223546j:plain

インストールするツールを選択します。特に変更する必要はありません。人によってはSVNを使わないのでチェックを外したりなどはありますね。[Next Featured plugins]を押しましょう。
f:id:jainders:20170101223548j:plain

ここはそのままで[Start using IntelliJ IDEA]を押しましょう。(ぶっちゃけ何の設定か分かりません。中で使うエディタですかね。)
f:id:jainders:20170101223549j:plain

そのままで待ちましょう。
f:id:jainders:20170101223551j:plain

次の画面に来たらOKです。ひとまず終了させましょう。

Ansibleでnginxを簡単インストール

前回Amazon LinuxにAnsibleをインストールしてpingを送信するところまでやりました。今回は続きですのでAnsibleをインストールしていない人はまずは前回のインストールから実施してください。
Amazon LinuxでAnsibleを簡単インストール~ping送信まで - KAROUSHI -Japanese Engineer Blog-

今回はAnsibleでNginxをインストールしてみようと思います。これができれば環境構築のたびにインストールコマンドを繰り返す必要がなくなります。

目次

Ansible実行ユーザの用意

実行ユーザの作成

まずはAnsibleでログインするためのユーザを作成しましょう。
ログインできれば何でもいいので、すでにログインユーザがある場合は読み替えてください。

$ sudo useradd ansible
$ sudo passwd ansible
Changing password for user ansible.
New password: <任意>(今回はpasswd)
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

BAD PASSWORDと怒られますが気にしない。

実行ユーザのsudo権限付与

sudo権限でyumなどを実行する必要があるため、権限を付与しましょう。
以下コマンドを実行して★の行を追記してください。

$ sudo visudo

----------ファイルの中身----------
# Defaults specification
Defaults:ansible !requiretty ★

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ansible ALL=(ALL)       NOPASSWD:ALL ★

ユーザパスワードログインの許可

Amazon Linuxではデフォルトでユーザのパスワードログインができないようになっているので許可しておきましょう。
以下PasswordAuthenticationのnoをyesに変えましょう。設定を変更したらsshdを再起動するのを忘れずに。

$ sudo vim /etc/ssh/sshd_config 
PasswordAuthentication no
→PasswordAuthentication yes

$ sudo service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

ユーザログインの確認

最後にansibleでログインできることを確認しましょう。パスワードは先ほど作成した時に入力したものです。(今回はpasswd)

$ ssh ansible@localhost
ansible@localhost's password: 
$ exit

プレイブックでNginxをインストールする

インベントリファイルの作成

Ansibleでは接続先情報をインベントリファイルに記載します。
インベントリファイルに複数のサーバ情報を記述する際に便利な記載方法があるが今回は説明しません。
今回は自サーバに接続するのでlocalhostと先ほど作成したansibleユーザの情報です。

$ mkdir -p ~/samplebook
$ cd samplebook/
$ vi hosts.yml 

----------中身----------
[localhost]
localhost

[all:vars]
ansible_ssh_user=ansible
ansible_ssh_pass=passwd

プレイブックの作成

ようやくプレイブックの作成です。今回行っているのは以下です。

  1. yumでNginxのインストール
  2. Nginx起動と自動起動化(chkconfigに登録)
  3. Nginxの起動確認
$ vim main.yml 

----------中身----------
- hosts: all
  become: yes
  tasks:
  - name: Nginxインストール
    yum: name=nginx state=latest
  - name: Nginx起動
    service: name=nginx state=started enabled=yes
  - name: Nginxの起動確認
    shell: ps aux | grep nginx
    register: ps_result
    changed_when: false
  - debug: var=ps_result.stdout_lines
    when: ps_result | success

プレイブックの実行

これで準備完了です。作成したインベントリと、プレイブックを指定したAnsibleコマンドを実行し、Nginxをインストール&起動しましょう。

$ ansible-playbook -i hosts.yml main.yml 

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [nginxインストール] *************************************************************
ok: [localhost]

TASK [nginx起動] *****************************************************************
ok: [localhost]

TASK [nginxの起動確認] **************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "ps_result.stdout_lines": [
        "root      4374  0.0  0.0  58084  1016 ?        Ss   14:14   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf", 
        "nginx     4376  0.0  0.3  58456  3932 ?        S    14:14   0:00 nginx: worker process                   ", 
        "root      8086  0.0  0.2 113084  2776 pts/3    S+   16:21   0:00 /bin/sh -c ps aux | grep nginx", 
        "root      8088  0.0  0.1 110460  2020 pts/3    S+   16:21   0:00 grep nginx"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0   

Nginxの画面確認

最後にhttp://へアクセスし、以下の画面が表示されれば正常にインストールして起動されています。
f:id:jainders:20170101012414j:plain

Amazon LinuxでAnsibleを簡単インストール~ping送信まで

今までLinux構築手順書を書いて、そこからコピー&ペーストして実行。。。というのを繰り返していました。それがChefやAnsibleなどの構成管理ツールの登場により従来のテキストエディタやエクセルで手順書を作成するというものから、構成管理ツールで手順を作成、実行。完成したらあとは配布すれば全く同じ環境ができるので楽です。
日本では多少歴史の長いChefが圧倒的シェアを誇っているようですが、使っている技術者に聞くとかなり学習コストが高いとのこと。どちらがよいか調べてみると後発のAnsibleがChefの悪いところが改善されてだいぶ使いやすくなり、学習コストも低いとこのことなので試しに使ってみました。
今回はAWS EC2のAmazon Linux上でAnsibleをインストールし、簡単なサンプルを動作させるところまで説明します。
これを読んでAnsibleに興味を持ってもったらぜひ現場で使いましょう!そして面倒で手間のかかる手順書作成やレビュー作業を止めて、作業時間を減らして少しでも早く帰りましょう!

目次

Ansibleをインストールする。

Amazon Linuxにはpipが初めから入っているのでそれでインストールします。
Amazon Linux以外の自前の環境でpipが入ってない場合は、easy_installでpipを入れてください。(え?easy_installも入ってないだって!?)

$ sudo pip install ansible

一応バージョンを確認してみると、2.2.0.0が入ってる模様。

$ ansible --version
ansible 2.2.0.0
  config file = 
  configured module search path = Default w/o overrides

ちゃんと応答が返ってきました。これでインストール完了です。
わーすっごい簡単!

localhostや他サーバへpingを打つ!

まずは初歩です。自分自身にpingを打ってみましょう。

$ ansible localhost -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

WARNINGが出ていますが最初は気にしないでください。
今回はSUCCESSの文字が出ているのでlocalhost(自分自身)に対してpingが通っていることが分かります。

次はでたらめなIPに対してpingが通るか確認してみましょう。すると。。。

$ ansible 10.20.30.40 -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

 [WARNING]: No hosts matched, nothing to do

とWARNINGが表示され、"ホスト名がマッチしなかったから何もしないよ"と表示されてしまいます。
えーじゃぁ自分以外のところにはどうやったらpingを送信できるんだ!
答えは/etc/ansible/hostsに書きます。
ですが現時点で存在しないので、まずはディレクトリとファイルを作成します。

$ sudo mkdir -p /etc/ansible/
$ sudo vim /etc/ansible/hosts
[test]
172.10.1.1

わざと存在しないサーバのIPアドレス(172.10.1.1)にしました。
ではtestに対してpingを送信してみましょう。

$ ansible test -m ping                                                                                                  172.10.1.1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.10.1.1 port 22: Connection timed out\r\n", 
    "unreachable": true
}

ちゃんと172.10.1.1にpingが送信されています。ただ、存在しないサーバなので"UNREACHABLE"(未到達)と表示されました。これは想定通りの動作なので問題ありません。
もしも複数サーバにpingを送信したい場合は先ほどのhostファイルにIPアドレスを追加すればOKです。

【例1】
[test]
172.10.1.1
172.10.1.2

【例2】
[test1]
172.10.1.1
172.10.1.2

[test2]
172.10.2.1

まとめ

本日やったことのまとめです。

  1. pipでansibleをインストールする
  2. ansible <ホスト名> -m pingpingを送信する
  3. ホスト名は/etc/ansible/hostsに記載する。

Windows10でDocker Toolboxを使って15分でコンテナ(マシン)を準備する

Windowsを使っているとLinux環境が急にほしくなる時があります。そんなとき今までVirtualBoxVM環境を作ってVMマシンを立ててOSを
インストールして。。。ということを毎回やっていたのですが、すっごい時間がかかるんですよね。。。
CentOS minimumインストールでも短くて1時間くらいかかってました。
これがDockerとDocker ToolBoxの登場で一気に短くなりました。またそれだけではなく公式で公開されているコンテナを利用することで、Webサーバが既にインストール済みのコンテナで作ることができます。
つまり、CentOSのコンテナを作って起動して、ログインしてWebサーバのソフトウェアをインストールして、、、という作業が不要になり、Webサーバインストール済みのコンテナを呼び出し起動するだけで構築ができます。
他にも特徴はいろいろありますが、とにかくVMより今はコンテナが注目されているんだなーくらいに思ってください。
では早速環境を作って触ってみましょう。

目次

前提環境

OS:Windows10 64bit

Windows版Docker Toolboxのインストール

公式サイトからDocker Toolboxをダウンロードします。
今回はWindowsなので右のダウンロードボタンを押してください。
https://www.docker.com/products/docker-toolbox
f:id:jainders:20161106001518j:plain

DockerToolbox-1.12.2.exeをクリックしてダウンロードを開始します。
f:id:jainders:20161106001529j:plain

ダウンロードが完了したら落としたファイルをクリックしてインストールを開始しましょう。
以下のようなWelcome画面が表示されます。Nextを押します。
f:id:jainders:20161106001531j:plain

インストール先を指定します。デフォルトで問題ないのでNextを押します。
f:id:jainders:20161106001532j:plain

コンポーネントを選択します。デフォルトで全部選択されています。そのままでNextを押します。
f:id:jainders:20161106001533j:plain

追加オプションを指定します。これもデフォルトのままでよいです。Nextを押します。
f:id:jainders:20161106001534j:plain

インストール前の確認画面です。Installを押してインストールを開始しましょう。
f:id:jainders:20161106001535j:plain

インストール中です。少々待ちましょう。
f:id:jainders:20161106001536j:plain

インストール完了画面です。そのままFinishを押しましょう。
f:id:jainders:20161106001541j:plain

Docker Quickstart Terminalをクリックしましょう。するとデフォルトのVMを作ってDockerコンテナを1つ自動で作成する処理が開始されます。ちょっと時間がかかります。カップラーメンかコーヒーでも作って飲み食いしながら待ちましょう。
(途中なぜかWaiting for an IP...と表示されたところで止まりましたが、Enterを押したら処理が開始されました。)
f:id:jainders:20161106001603j:plain

完了するとクジラのマークが出現します。
f:id:jainders:20161106001606j:plain

以下コマンドを打つとdefaultコンテナができていることが確認できます。
hoge@DESKTOP-0LCRDL8 MINGW64 ~
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v1.12.3

またOracleVM VirtualBoxを起動してみましょう。デスクトップにショートカットアイコンがあればそれをクリック。なければWindowsスタートから起動しましょう。
以下のようにDefaultというVMマシンが1つ作成されていることを確認してください。ここでDockerコンテナが動いています。
f:id:jainders:20161106001608j:plain


Dockerが正常に動作するか確認しましょう。以下コマンドを打ってください。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

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

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/


上記のように表示されればOKです。

以上です。