コンテナで Web サーバーを稼働させる
Docker Hub の検索
まずは Docker Hub で Web サーバー稼働用コンテナを作成するためのイメージを検索
$ sudo docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 1305 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with ... 38
centos/httpd 15 [OK]
armhf/httpd The Apache HTTP Server Project 8
macadmins/netboot-httpd use in combination with bruienne/bsdpy 4 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or b... 3
lolhens/httpd Apache httpd 2 Server 2 [OK]
salim1983hoop/httpd24 Dockerfile running apache config 2 [OK]
rgielen/httpd-image-php5 Docker image for Apache httpd with PHP 5 b... 1 [OK]
rgielen/httpd-image-simple Docker image for simple Apache httpd based... 1 [OK]
lead4good/httpd-fpm httpd server which connects via fcgi proxy... 1 [OK]
antoineco/httpd-mod_cluster Apache HTTP Server with JBoss mod_cluster 1 [OK]
trollin/httpd 0
manasip/httpd 0
publici/httpd httpd:latest 0 [OK]
manageiq/httpd Container with httpd, built on CentOS for ... 0 [OK]
memeglobal/adserver-httpd-events7 0
jbpt/httpd 0 [OK]
antoineco/httpd Extra OS variants for the official HTTPd i... 0 [OK]
ppc64le/httpd The Apache HTTP Server Project 0
tplatform/aws-linux-httpd24-php70 aws-linux-httpd24-php70 0 [OK]
efrecon/httpd A micro-sized httpd. Start serving files i... 0 [OK]
sbutler/pie-httpd PIE httpd server 0
openbucks/httpd 0
dockerpinata/httpd
今回は httpd というレポジトリを利用する。
curl でリポジトリ内のイメージのタグ名を調べる
$ curl -s https://registry.hub.docker.com/v2/repositories/library/httpd/tags/ | grep -Po '"name":.*?[^//]",'
"name": "alpine",
"name": "2-alpine",
"name": "2.4-alpine",
"name": "2.4.29-alpine",
"name": "2.2-alpine",
"name": "2.2.34-alpine",
"name": "latest",
"name": "2",
"name": "2.4.29",
"name": "2.4",
実際にコンテナを作成する
今回は 2.4.29 というタグ名のイメージを取得して利用する。
$ sudo docker run -d -p 8080:80 httpd:2.4.29
Unable to find image 'httpd:2.4.29' locally
2.4.29: Pulling from library/httpd
85b1f47fba49: Pull complete
3dee1a596b5f: Pull complete
86144720cb98: Pull complete
23273e61b31a: Pull complete
011f98a84808: Pull complete
d90c670741e8: Pull complete
d8ac004c0f2d: Pull complete
Digest: sha256:5eafd4b4774375dc385fa0ed980b76a1a63e5102e5a3a9baaabe3b9d2eef877c
Status: Downloaded newer image for httpd:2.4.29
50413563b3045302bd26ddba5688ff2426b4ecf86f202329d051d6dcafefba4a
それぞれのオプションについて
- -d: コンテナ内でプロセスをバックグラウンドで稼働させる
- -p: ホストの待ち受けポートとコンテナの待ち受けポートを紐づけるためのもの。今回ホストの TCP 8080 番に届いたパケットをコンテナの TCP 80 番に転送する。
ホストの IP アドレスに対して TCP 8080 番にアクセスしてみる。
$ curl http://10.1.11.202:8080/
<html><body><h1>It works!</h1></body></html>
-> OK
$ sudo docker stop dreamy_goldstine
stop する。
コンテナ内で稼働する Web サーバーでコンテンツを公開する
先ほど作成したコンテナ内で以下のコンテンツを公開する。
$ cat /home/ec2-user/www/index.html
<html>
<body>
<h1> This is my page </h1>
</body>
</html>
このためには以下のように -v オプションにより、/home/ec2-user/www ディレクトリをコンテナの /usr/local/apache2/htdocs ディレクトリにマウントする。
[bash] $ sudo docker run -d -p 8080:80 -v /home/ec2-user/www:/usr/local/apache2/htdocs httpd:2.4.29 9ae657fb11fd6d41ccbbfd471e810b126efaa7ca5c9c484c05236866c89bb914
$ curl http://10.1.11.202:8080/