LoginSignup
3
2

More than 3 years have passed since last update.

【AWS】Docker内のコンテナにアクセスしたい

Last updated at Posted at 2021-01-26

はじめに

1. EC2インスタンスの起動

 EC2 で「インスタンスの起動」を選択します。最低限、以下の設定を行ってください。
今回は8080 -> 80 へポートフォワーディングするので、8080番ポートを許可しておきます。
 マシンイメージ:Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
 セキュリティグループ:22番ポート(SSH)と8080番ポートを許可
http_security.PNG

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サイトにアクセス出来ることが確認できました。
web.PNG

参考資料

docker docs

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2