Edited at

Amazon Linux 2 でdockerを使ってみる (Apache2.4)


概要

EC2インスタンスを起動して、dockerを使えるようにする。


インスタンス起動

EC2 -> インスタンス -> インスタンスの作成

※ Amazon Linux 2 AMIを選択

※ セキュリティグループは、80ポートと22ポートを解放する。

(22ポートは不要だが学習用なので簡略化のため設定)


サーバへ接続する

ターミナルを使って起動したEC2インスタンスに接続する。

※ IAMユーザーにてssh接続。

※ アカウントは、多要素認証 (MFA) を設定し、利用しない。


ターミナル

$ ssh aws

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

https://aws.amazon.com/amazon-linux-2/
Run "sudo yum update" to apply all updates.


とりあえず、yumを更新しておく。


ターミナル

$ sudo yum update -y



Dockerインストール

Amazon Linux Extras リポジトリを使ってインストールします。

下記コマンドにてインストールできる内容を確認する。


ターミナル

$ amazon-linux-extras list

...
20 docker available \
[ =17.12.1 =18.03.1 =18.06.1 ]
...

インストールされる内容を確認してみる。


ターミナル

$ amazon-linux-extras info docker

docker recommends docker # yum install docker

dockerをインストールする。


ターミナル

# インストール (最新版を指定してみる)

$ sudo amazon-linux-extras install -y docker=18.06.1

# 起動
$ sudo service docker start
$ sudo systemctl enable docker.service
$ sudo service docker status

# バージョン確認
$ docker -v
Docker version 18.06.1-ce, build ...

# dockerグループに参加する
$ sudo usermod -a -G docker ec2-user
$ cat /etc/group | grep docker
docker:x:993:ec2-user

# 設定を反映するため、sshを再接続する
$ exit
$ ssh aws



コンテナ起動

コンテナを起動して動作確認してみる。


ターミナル

# Hello Worldを実行してみる

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

# ubuntuを起動してみる
$ docker run --rm -it ubuntu bash
root@***********:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
...
root@***********:/# exit

# イメージ確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
hello-world latest 4ab4c602aa5e 3 months ago 1.84kB

# コンテナ確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26b515135561 hello-world "/hello" 4 minutes ago Exited (0) 3 minutes ago amazing_davinci
a89895358ad3 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago kind_zhukovsky
d055b97abbfa hello-world "/hello" 5 minutes ag Exited (0) 5 minutes ago sleepy_northcutt

# 不要なコンテナ一括削除
$ docker rm `docker ps -f "status=exited" -q`
26b515135561
a89895358ad3
d055b97abbfa

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES



Apache2.4

webサーバを起動し、80ポートでアクセスできるようにしてみる。


ターミナル

$ docker run -d --name httpd -p 80:80 httpd:2.4

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
************ httpd:2.4 "httpd-foreground" 3 seconds ago Up 2 seconds 80/tcp httpd


ブラウザでアクセスしてみる。

起動したインスタンスの「パブリック DNS (IPv4)」に記載されているIPアドレスにアクセス。

※ 今回のIPアドレス: IPv4 パブリック IP 13.113.85.220

test.png

後片付け(コンテナ破棄)


ターミナル

$ docker rm -f httpd

httpd

以上


まとめ

docker-composeなどで構成管理して、コマンド一発で起動したり、Amazon Elastic Container Registry (ECR)などにアプリコードも含めたDockerfileで構築したdockerイメージを登録して、そこから起動できるようにしたらもっと実践的になりそうですが、ここで書くと読み難くなるので別途記事化したいと思います。


参考サイト