【ページ更新日:2020年9月27日】
AWSのEC2を使用して、Dockerを動かす方法をまとめています。
<参考サイト>
@naoki_mochizukiさんのQiita記事
『(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで』
<参考動画>
クラインさん(@kleinitblog)のYouTube動画
『【AWS 入門】EC2とDockerでHello Worldしよう』
※上記2つは、かなりわかりやすいのでAWS初学者の方にオススメです。
手順と作業内容の概要
手順
- VPCとサブネットを作成
- インターネットゲートウェイを設置
- サーバーを設置(EC2)
- ファイアーウォール(セキュリティーグループ)を設定
- ルーティングを設定
- SSHでサーバーにアクセスする
- サーバーにDockerをインストールする
- ブラウザからサーバーにアクセスして「Hello from Docker」を表示する
作業内容の概要
VPCとサブネットを作成
- VPCは、AWSが持つ広大な土地の中の「自分の土地」(Virtual Private Cloud)
- サブネットは、VPC内につくるグループ
- サブネットは、VPC内に複数作成できる
- サブネットのイメージは「家」
- AWSでVPCを作成し、その中にサブネットを作成します。
インターネットゲートウェイを設置
- インターネットゲートウェイは、「インターネットの入り口」
- AWSの環境から外部との接続をするために必要
- 作成したVPCに設置する
サーバーを設置(EC2)
- 作成したサブネットの中にサーバーを設置する
- AWSでサーバーを設置するときは、EC2(仮想サーバー)を使用する
- サーバー1つ1つをインスタンスという
- インスタンス作成時に次のセキュリティグループの設定画面が入る
- キーペアの作成画面で好きなキーペア名を設定し、キーペアをダウンロードする(SSHでサーバーにアクセスする時に使用するので必ず!)
ファイアーウォール(セキュリティーグループ)を設定
- SSH(ポート範囲22)からのアクセスを許可する
- HTTP(ポート範囲80)からのアクセスを許可する(今回の場合)
- ソースの部分には「0.0.0.0/0」と入力し、すべてのIPアドレスからのアクセスを許可する
- HTTP通信は、普通の通信のこと
- SSH通信は、鍵の概念を用いたセキュリティが強固な通信のこと
ルーティングを設定
- VPCのサービス画面からルートテーブルを作成
- ルートテーブルに名前をつけて、対象のVPCを選択する
- 作成したルートテーブルにルートを設定していく
- 送信先が「0.0.0.0/0」のルートを作成(「0.0.0.0/0」はすべてのIPアドレス)
- ターゲットは作成したインターネットゲートウェイを選択する
- デフォルトでルートが1つ入っているが、それは「ローカル内ではつながります」ということ
- つまり、「作成したVPC内ならつながります」ということ
- 作成したルートをどのサブネットに適用させるか設定する
SSHでサーバーにアクセスする
- 作成したインスタンス(EC2サーバー)にアクセスする
- EC2のサービス画面から作成したサーバーの「IPv4パブリックIP」をメモする(あとで使用する)
- このIPアドレスにアクセスすれば、作成したEC2サーバーにつながる
- ターミナル上でダウンロードしたキーペアファイルのパーミッションを変更する
- ターミナル上でSSHでアクセスする(メモしていたIPv4パブリックIPを使用)
サーバーにDockerをインストールして起動させる
- yumをアップデートする
- yumはいろんなものをインストールできるもの
- Dockerをインストールする
- Dockerを起動する
ブラウザからサーバーにアクセスして「Hello from Docker」を表示する
- サーバー上に作業用ディレクトリを作成する
- 作成したディレクトリ内にhtmlファイルを作成する
- Dockerfileを作成する
- Webサーバーにnginxを使用する
- 先ほど作成したhtmlファイルをコンテナ内にコピーする
- Dockerのイメージを作成する(ビルド)
- 作成したイメージからコンテナを作成して起動させる
- EC2サーバーのIPv4パブリックIPにログインする
使用するコマンド一覧
キーペアファイルのパーミッション(権限)を変更する
ダウンロードしたパーミッションファイルのパーミションを変更します。
以下のコマンドを、ターミナルで実行してください。
※ $は入力しないでください。
$ chmod 600 キーファイルのパス
chmodコマンドについては、Samurai Blogさんの記事を参考にしてください。
SSHでEC2サーバーにアクセスする
サーバーのIPv4パブリックIPを使用してアクセスします。
以下のコマンドを、ターミナルで実行してください。
※ $は入力しないでください。
$ ssh -i キーペアファイルのパス ec2-user@IPv4パブリックIP
オプションの「 -i 」はキーペアファイルの指定ができるようにするもの
yumをアップデートする
念のためyumをアップデートしておきます。
以下のコマンドを、ターミナルで実行してください。
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ sudo yum -y update
DockerをEC2サーバーにインストールする
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ sudo yum -y install docker
EC2サーバーでDockerを起動する
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ sudo service docker start
作業用ディレクトリを作成する
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ mkdir ディレクトリ名
cdコマンドを使用して、作成したディレクトリに移動します。
ターミナル上でhtmlファイルを作成する
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ vi htmlファイル名
このコマンドにより、viというテキストエディタが起動します。
viの操作については、Google先生に聞いてください。(参考サイト)
ターミナル上でDockerfileを作成する
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ vi Dockerfile
このコマンドにより、viというテキストエディタが起動します。
Dockerfileはつぎのような内容にしてください。
FROM nginx COPY ./作業ディレクトリ/htmlファイル名 /user/share/nginx/html/
今回はWebサーバーとして「 nginx 」を使用します。
nginxが最初に表示するhtmlファイルは/user/share/nginx/html/のディレクトリ内におくため、ここにhtmlファイルをコピーしてきます。
Dockerfileからイメージを作成する(ビルド)
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ sudo docker build -t イメージ名
「 -t 」オプションで、作成するイメージに名前を付けることができます。
作成したイメージからコンテナを起動する
以下のコマンドを、ターミナルで実行してください.
※ EC2サーバーにアクセスした状態で作業してください。
※ $は入力しないでください。
$ sudo docker run --rm -d -p 80:80 イメージ名
- 「 --rm 」は、コンテナが停止されたと同時にコンテナを削除するオプションです。
- 「 -d 」は、バックグランドで起動するオプションです。
- 「 -p 」は、どのポートを使用するか設定するオプションです。
次のコマンドでコンテナが起動しているか確かめることができます。
$ sudo docker ps
ブラウザからhtmlファイルにアクセスする
URL「http:// IPv4パブリックIP /htmlファイル名」にアクセスする。