I'm a cloud engineer at foot of the small mountain

クラウド・ETL/ELT・Nocode・BigQuery などを中心に書ければね。最近触ったサービス・フレームワークなどのメモ

Amazon Linux にDocker を入れてApache コンテナを起動してみた

EC2でDocker を使ってWebサーバを作ってみたのでメモ。

EC2 準備

まずは EC2 で VM を用意します。今回は Amazon Linux を利用。

f:id:sennanvolar44:20210108063522p:plain

ポートはとりあえずデフォルトの22 に加えて、8080 も追加。
f:id:sennanvolar44:20210108063839p:plain

キーは以前作成してたのでそれを流用しましたが、なければ新規作成する。
f:id:sennanvolar44:20210108064759p:plain

これで VM の用意が完了です。

Docker Engine のインストール

まずは Teraterm で作成した VM にアクセスします。
Amazon Linux の場合、ユーザー名は ec2-user になります。あとは VM 作成時に指定した秘密鍵を設定。
f:id:sennanvolar44:20210108065412p:plain

以下コマンドで Docker Engine をインストールします。

$ sudo yum update -y
$ sudo amazon-linux-extras install docker
$ sudo yum install docker

インストール後、バージョンを確認する場合

# docker --version
Docker version 19.03.13-ce, build 4484c46

今回は Amazon Linux へのインストールだったので、手順はこちらを参考にしました。
docs.aws.amazon.com

もし、一般ユーザーでdocker コマンドが実行できない場合は、docker グループに入れてあげることで実行できるようになります。

$ sudo usermod -a -G docker ec2-user

Webサーバ起動

いまは VM で Docker を動かすための Docker Engine をインストールまでしたところなので、以下のコマンドで Docker Hub から Apache の Docker Image をダウンロードして実行します。

docker run -dit --name webapp1 -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

  • -dit : コンテナをバックグラウンドで実行させる
  • --name : コンテナ名
  • -p : Docker ホストとコンテナのポート番号。外部からは8080 でアクセスし、ホストからは 8080 と紐づいたコンテナのポート80 にアクセス
  • -v : ホストのディレクトリ、コンテナのディレクト

それでは実行してみます。

[ec2-user@ip-172-31-42-9 ~]$ docker run -dit --name webapp1 -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

もし上記のようなエラーが発生した場合、Docker 自体が起動していないという意味ですので、起動してあげます。

[ec2-user@ip-172-31-42-9 ~]$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
[ec2-user@ip-172-31-42-9 ~]$

実行して ID が返ってきたら起動できたということですので、 ステータスをみてみます。

[ec2-user@ip-172-31-42-9 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                  NAMES
a374217edee6        httpd:2.4           "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   webapp1

Status がUp になってるので起動しているのが確認できます。
ちなみに、-a を最後に付与すると停止中のコンテナも表示されます。

この状態で EC2 のIPアドレスと8080でブラウザからアクセスするとWeb ページが表示されるようになります。(まだ何もしてないのでカレントディレクトリの中身が表示されてしまいますが・・)
f:id:sennanvolar44:20210109133959p:plain

もし以下のように 403 エラーが出たら、対象ディレクトリのパーミッションを変更してあげます。 f:id:sennanvolar44:20210109133655p:plain

[ec2-user@ip-172-31-33-236 home]$ chmod 755 ec2-user/
[ec2-user@ip-172-31-33-236 home]$ ll
total 0
drwxr-xr-x 2 root     root       6 Jan  9 04:33 centos
drwxr-xr-x 4 ec2-user ec2-user 109 Jan  9 04:24 ec2-user
[ec2-user@ip-172-31-33-236 home]$

あとは、ホスト側の対象ディレクトリ内にindex.html 置くなどして利用できます。