はじめに
1. EC2インスタンスの起動
EC2 で「インスタンスの起動」を選択します。最低限、以下の設定を行ってください。
今回は8080 -> 80 へポートフォワーディングするので、8080番ポートを許可しておきます。
マシンイメージ:Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
セキュリティグループ:22番ポート(SSH)と8080番ポートを許可
2. コンテナのインストール
インスタンスが起動したらログインしましょう。初期ユーザは「ubuntu」です。
以下のコマンドでコンテナをインストールしましょう。
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
インストールしたらバージョンを確認しておきましょう。
ubuntu@ip-<ipaddr>:~$ sudo docker version
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.41
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:17:43 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
~省略~
3. 必要なファイルの準備
Dockerfileなどを格納したディレクトリを作成しましょう。(今回はweb_docker)。
ディレクトリには、Dockerfileとwebサイトに表示するファイル(index.html)を格納します。
ubuntu@ip-<ipaddr>:~$ ll web_docker/
total 16
drwxrwxr-x 2 ubuntu ubuntu 4096 Jan 25 16:02 ./
drwxr-xr-x 5 ubuntu ubuntu 4096 Jan 25 16:02 ../
-rw-rw-r-- 1 ubuntu ubuntu 146 Jan 25 16:01 Dockerfile
-rw-rw-r-- 1 ubuntu ubuntu 13 Jan 25 16:02 index.html
(1)Dockerfile
コンテナの作成手順書のようなものです。CentOSで起動してhttpdをインストールします。
FROM centos:centos7
RUN yum install -y httpd && systemctl enable httpd
ENTRYPOINT ["/sbin/init"]
COPY ./index.html /var/www/html/index.html
(2)index.html
webサイトに表示する内容なので適当に書いておきましょう。
this is test
4. docker buildコマンドの実行
前の手順で作成したファイルを使って、docker buildコマンドを実行しましょう。
sudo docker build -t httpd:test ./web_docker
実行したら、コンテナイメージが作成できたことを確認しましょう。
ubuntu@ip-<ipaddr>:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd test 57a73a9dba95 29 seconds ago 331MB # 想定通り作成された
centos centos7 8652b9f0cb4c 2 months ago 204MB
5. docker runコマンドの実行
今回は、8080 -> 80 へポートフォワーディングさせます。
sudo docker run --privileged -d -p 8080:80 --name webserver httpd:test /sbin/init
オプションは以下です。
オプション | 意味 |
---|---|
-d | バックグラウンドで実行 |
-p | ポートフォワーディング |
--name | コンテナ名 |
--privileged | 特権モードにする |
なお、以下のサイトにあるように、オプションとして--privilegedを付けて
/sbin/initで起動実行させないと、systemctlが使えません。
CentOS7のDockerコンテナでsystemctlを使えるようにする
6. コンテナの状態確認
コンテナを起動させたら状態確認をしましょう。
まずは「sudo docker ps -a」でコンテナの状態を確認します。
STATUS :Upになっていることを確認
PORTS:ポートフォワーディングの設定が入っていることを確認
ubuntu@ip-<ipaddr>:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a57b4836ead httpd:test "/sbin/init /sbin/in…" 11 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp webserver
次に、httpdの状態を確認します。
systemctlでActiveであることが確認できました。
ubuntu@ip-<ipaddr>:~$ sudo docker exec -it webserver /bin/bash
[root@1a57b4836ead /]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-01-26 10:21:56 UTC; 3min 55s ago
Docs: man:httpd(8)
man:apachectl(8)
7. webサイトの確認
最後に、実際にアクセスしてみましょう。
http://<EC2インスタンスのグローバルIP>:8080
想定通り、webサイトにアクセス出来ることが確認できました。