209
216

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS EC2インスタンスにdockerとdocker-composeをインストールして簡単なWEBサービスを立ち上げる方法

Last updated at Posted at 2018-08-21

経緯

docker中毒の私は最近何をするにもdockerを使ってしまいます。ということで今回はAWS EC2にdockerとdocker-composeをインストールしていきたいと思います。
dockerの動作確認がてらnginxコンテナでWEBサービスを起動してアクセスしてみます。

前提条件

  • AWSのアカウントが作成してあること
  • SSHクライアントが用意してあること(今回はCygwinを使いました。)

やること

  1. AWS EC2インスタンスの新規作成
  2. dockerインストール
  3. docker-compose インストール
  4. dockerでnginxコンテナを立ち上げる

1. AWS EC2インスタンスの新規作成

早速やっていきましょう。

AWSコンソールで[EC2]を押下する

image.png

[インスタンスの作成]を押下する

image.png

AMIを選択する

今回は、Amazon Linuxの次世代バージョンであるAmazon Linux 2を選択しました。
「無料利用枠の対象」と記載のあるAMIは"750 時間/月" 無料で使用できます。24時間*31日=744時間なので、無料というわけですね。
image.png

インスタンスタイプを選択する

特に高スペックを要求しないので、ここも無料利用枠のついているやつを選択しました。
image.png

インスタンスを作成する

内容に問題ないかを確認して、作成を押下します。
image.png

キーペアを作成してダウンロードする

EC2インスタンスにSSHログインするために鍵ペアを自動で作成してくれます。
キーペア名に任意の名前を付けて、「キーペアのダウンロード」を押下します。
秘密鍵がダウンロードされますので、その後、「インスタンスの作成」が活性化するので押下します。
※秘密鍵が盗まれるとEC2に対して何でもできてしまうので、取り扱いには十分に注意してください。絶対に第三者に教えないでください。

image.png

作成完了

インスタンスの表示を押下します。
image.png

ステータスチェックが「初期化しています」から切り替われば作成は完了です。
SSH接続するために、パブリックDNS(IPv4)に表示されている「ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com」を控えておきます。
image.png

EC2インスタンスにログイン

ホームディレクトリにダウンロードした秘密鍵をコピーした後、パーミッションを400に設定します。

$ cp /path/to/sample.pem ~/.ssh/
$ chmod 400 ~/.ssh/sample.pem

以下コマンドで接続できれば成功です。ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.comは上記で控えた自分のEC2インスタンスのものに置き換えてください。

$ ssh -i ~/.ssh/sample.pem ec2-user@ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com
Last login: Tue Aug 21 01:19:50 2018 from XXXXXXXXXXXXXXXXXXXXXXXX

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-XX-XX-XX-XX ~]$

2. dokcerインストール

以下コマンドを実行します。

$ sudo yum install -y docker          # dockerのインストール
$ sudo service docker start           # dockerの起動
$ sudo usermod -a -G docker ec2-user  # ec2-userをdockerグループに入れる。これでec2-userがdockerコマンドを実行できる
$ sudo docker info                    # dockerの起動確認

上手く起動しない場合は一度ログアウトして再ログインすると上手くいくと思います。

3. docker-composeインストール

(2022-11-24: インストールの方法が変わっていたので最新の手順に修正)
以下コマンドを実行します。
docker-composeの最新バージョンは以下のサイトから確認できますので、コマンドの2.4.1のところを適宜書き換えて実行してください。
https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/

$ sudo mkdir -p /usr/local/lib/docker/cli-plugins
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
$ docker compose version

上手く起動しない場合は一度ログアウトして再ログインすると上手くいくと思います。

4. dockerでnginxコンテナを立ち上げる

作業用のディレクトリ作成

$ cd
$ mkdir docker-nginx-test

ディレクトリ配下は以下のような構成にしました

docker-nginx-test
  - html
      - index.html # hogeとでも書いておく
  - Dockerfile
Dockerfile
FROM nginx
COPY ./html /usr/share/nginx/html

コンテナ起動

$ cd docker-nginx-test
$ docker build -t docker-nginx-test .
$ docker run -d --rm -p 80:80 -v $(pwd)/html:/usr/share/nginx/html --name docker-nginx-test docker-nginx-test

プロセスを確認して起動しているか確認します。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
947526fd9aac        docker-nginx-test   "nginx -g 'daemon of…"   2 seconds ago       Up 1 second         0.0.0.0:80->80/tcp   docker-nginx-test

無事起動しています。

セキュリティグループで80番ポートを開放する

httpでアクセスするため80番ポートを開放します。AWSコンソールから行います。

セキュリティグループの[launch-wizard-X]を押下する

image.png

インバウンドの[編集]を押下する

image.png

TCP 80番ポートを開放する

タイプ「HTTP」、ソース「0.0.0.0/0」を入力して保存します。
image.png

ブラウザでアクセスする

ブラウザでアクセスしてページが表示されれば成功です。
image.png

209
216
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
209
216

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?