AWS Docker EC2 技術ログ

AWS/EC2上でDockerを起動する

2020年9月27日

【ページ更新日:2020年9月27日】

AWSのEC2を使用して、Dockerを動かす方法をまとめています。

<参考サイト>
@naoki_mochizuki
さんのQiita記事
『(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで』

<参考動画>
クラインさん(@kleinitblog)のYouTube動画
『【AWS 入門】EC2とDockerでHello Worldしよう』

※上記2つは、かなりわかりやすいのでAWS初学者の方にオススメです。

手順と作業内容の概要

手順

  1. VPCとサブネットを作成
  2. インターネットゲートウェイを設置
  3. サーバーを設置(EC2)
  4. ファイアーウォール(セキュリティーグループ)を設定
  5. ルーティングを設定
  6. SSHでサーバーにアクセスする
  7. サーバーにDockerをインストールする
  8. ブラウザからサーバーにアクセスして「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ファイル名」にアクセスする。

  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-AWS, Docker, EC2, 技術ログ