LoginSignup
0
0

More than 3 years have passed since last update.

【Docker】dockerfileを利用してEC2にApacheコンテナを構築

Last updated at Posted at 2020-12-27

目標

dockerfileを利用してEC2インスタンスにApacheコンテナを構築する。

はじめに

Docker学習の備忘録メモです。
基本的には以下のサイト(※)の内容を参考に構築しており、
基本的なコンテナやDockerの概念も分かりやすく記載してあるため、こちらを参考にした方がよいかと思います。

※参考サイト(特に「その3:Dockerfileってなに?」を本記事では主に利用しております。)
【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜
【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その2:Dockerってなに? 〜
【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その3:Dockerfileってなに? 〜

前提

・EC2インスタンス(Amazon Linux 2 AMI (HVM), SSD Volume Type利用)(※)が構築済みであること。

※セキュリティグループでTCP8080番ポートを空けること。

作業の流れ

項番 タイトル
1 Dockerデーモン起動
2 Dockerイメージの作成
3 Dockerコンテナの起動
4 接続検証

手順

1.Dockerデーモン起動

①Dockerのインストール
EC2インスタンスにOSログイン後、Dockerをインストールします。

sudo yum install -y docker

②Dockerデーモン起動及び自動起動の有効化

sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
sudo systemctl is-enabled docker

③ec2-userをdockerグループに所属させる

sudo usermod -a -G docker ec2-user
cat /etc/group | grep docker

一旦ログアウト後(※)、docker infoでDockerのシステム情報が表示されることを確認します。
※ログアウトしないとdocker info実行時パーミッションエラーとなる。

[ec2-user@ip-172-31-32-204 ~]$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.13-ce
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: c623d1b36f09f8ef6536a057bd658b3aa8632828
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0 (expected: fec3683)
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.14.209-160.339.amzn2.x86_64
 Operating System: Amazon Linux 2
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 983.3MiB
 Name: ip-172-31-32-204.ap-northeast-1.compute.internal
 ID: RKGH:NETA:2FJW:FP7Q:X52F:F2DG:NSPR:YCQD:RYG2:XN54:ATEO:CLYY
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

2.Dockerイメージの作成

①コンテナ配備用PHPファイル作成
作成するコンテナに配備するためのPHPファイルを作成します。

vi test.php
test.php
<?php
  echo "hoge";
?>

②dockerfileの作成
Dockerhubから取得したCentOSイメージをベースとして(FROM)、httpd及びphpをインストール(RUN)、かつ先ほど作成したtest.phpを/var/www/html配下にコピー(COPY)し組み込み、更にコンテナ起動時にはhttpd起動コマンドを実行する(CMD)Dockerイメージを新規作成…といったフローを実行するためのdockerfileを作成します(※)。

※RUN及びCOPYはDockerイメージ新規作成時に実行し、イメージ内に組み込まれる。それに対し、CMDはコンテナ起動時に実行するコマンドを指定する。

vi dockerfile
dockerfile
FROM centos:centos7

RUN yum -y install httpd php

COPY test.php /var/www/html/

CMD ["/usr/sbin/httpd","-DFOREGROUND"]

③Dockerイメージの作成
docker buildを利用してdockerfile内のフローを適用したdockerイメージを作成します。
カレントディレクトリ内に存在するdockerfileを利用して、testphpという名前のdockerイメージを作成するという趣旨のコマンドです。

# Successfully tagged testphp:latestと最終行に出力されればOK
docker build -t testphp .

docker imagesでdockerイメージ一覧を確認します。
ベースとしたCentOSとそこからカスタマイズしたtestphp(※)のDockerイメージの作成が確認出来ます。

※Dockerイメージ作成時、タグ名を指定しないと自動的にタグ名はlatestとなる。

[ec2-user@ip-172-31-32-204 ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testphp             latest              f5e7748e4f37        2 minutes ago       348MB
centos              centos7             8652b9f0cb4c        6 weeks ago         204MB

3.Dockerコンテナの起動

作成したDockerイメージから、docker runでdockerコンテナtestwebを起動します。
-dでバックグラウンド起動(フォアグラウンドで起動した場合コンソール操作が以降不可となるので基本的にはこのオプションはつける)、-p 8080:80でローカルホスト8080番ポート→コンテナ80番ポートへフォワーディングする設定とします。

docker run -d -p 8080:80 --name testweb testphp:latest

docker psでコンテナ一覧を確認し、testwebという名前のコンテナが確認できます。

[ec2-user@ip-172-31-32-204 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
216b216e14bf        testphp:latest      "/usr/sbin/httpd -DF…"   4 minutes ago       Up 4 minutes        0.0.0.0:8080->80/tcp   testweb

4.接続検証

ブラウザから<EC2のグローバルIPアドレス>:8080/test.phpでアクセスをかけ、hogeと表示されるページが表示されればOKです。

image.png

0
0
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
0
0