Docker ( 2 ) ~ Web サーバーを稼働させる ~

October 31, 2017

コンテナで 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/

This is my page

[/bash]

 © 2023, Dealing with Ambiguity