Amazon Linux にDocker を入れてApache コンテナを起動してみた
EC2でDocker を使ってWebサーバを作ってみたのでメモ。
EC2 準備
まずは EC2 で VM を用意します。今回は Amazon Linux を利用。
ポートはとりあえずデフォルトの22 に加えて、8080 も追加。
キーは以前作成してたのでそれを流用しましたが、なければ新規作成する。
これで VM の用意が完了です。
Docker Engine のインストール
まずは Teraterm で作成した VM にアクセスします。
Amazon Linux の場合、ユーザー名は ec2-user になります。あとは VM 作成時に指定した秘密鍵を設定。
以下コマンドで 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 ページが表示されるようになります。(まだ何もしてないのでカレントディレクトリの中身が表示されてしまいますが・・)
もし以下のように 403 エラーが出たら、対象ディレクトリのパーミッションを変更してあげます。
[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 置くなどして利用できます。