Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

経緯

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インストール

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

$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/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

y-do
独立系SIer 兼 Webエンジニアやってます PHP, JavaScript, css, mysql, docker, elasticsearch, awsとかが好物
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした