##目標
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
<?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
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です。