質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Apache

    2106questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Ubuntu

    1806questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Docker

    1047questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

docker run をした時点でapache2を起動状態にする方法はありますか?

受付中

回答 2

投稿

  • 評価
  • クリップ 2
  • VIEW 2,661

wataru1127

score 5

docker run でapache2を起動させたいのですがつまずいています

ディレクトリ構成

$ tree .
.
├── Dockerfile
└── html
    ├── index.php


index.php

<?php 
  phpinfo();
?>

ubuntu:16.04をベースにしてphpとapache2をインストールします。

Dockerfile

FROM ubuntu:16.04
MAINTAINER *** <**@**.**>

RUN apt-get update && apt-get upgrade -y && \
apt-get install apache2 -y
RUN apt-get install php libapache2-mod-php -y

COPY ./html /var/www/html
EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

[ターミナルでbuild]

$ docker build -t test/apache2 .


イメージは作成成功。

質問1

[ターミナルでコンテナ起動]

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2

...起動するもすぐ終了。

[ターミナルでコンテナ起動]

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /bin/bash


これなら起動状態が継続します。
この、/bin/bashをつけるとつけない場合の挙動の差はなんでしょうか?

質問2(本題)

docker run をした時点でapacheを起動状態にする方法はありますか?

Dockerfileに

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]


を記述すればdocker runのときにapacheが起動する、というようなことをブログ記事などでみるのですが、起動しません。

また、

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /usr/sbin/apache2 -DFOREGROUND


という記事もみましたが、これも起動しません。

今のところ、
コンテナが起動継続したコマンド↓

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /bin/bash


のあと、

$ docker exec -it test/apavhe2 /bin/bash


でコンテナの中に入り、

# service apache2 start


としたら初めてブラウザからindex.phpを見ることができました。

php:7.0-apacheというイメージをdocker Hubから落としてきて使うというのは試してみて実際うまくいくのですが、今までXAMPPなど既成のソフトを使ってきてapacheとphpのつながりとかほぼ意識せずにいたので仕組みを知りたく、ご教授お願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

Dockerfile でサービスを有効にしてください

たとえばCENTOS6のmysqldをサービス起動設定するときは

RUN chkconfig mysqld on
#cmdだったかもかも

 追記 DOCKER + CENTOS 7 でのサービスの場合

  • Dockerfile
FROM centos

# RUN
RUN yum -y update
RUN yum -y upgrade
RUN yum -y install httpd php mysql
RUN systemctl enable httpd

 起動コマンド

# docker stop httpd
# docker rm httpd
docker build -t httpd .
docker run --name httpd --privileged -d httpd  /sbin/init
docker exec -it httpd /bin/bash

 ps コマンド

[root@a8441e73e05f /]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.8  0.0  43032  3256 ?        Ss   15:37   0:00 /sbin/init
root        15  0.0  0.0  11772  1824 ?        Ss   15:37   0:00 /bin/bash
root        31  1.0  0.1  36832  6996 ?        Ss   15:37   0:00 /usr/lib/systemd/systemd-journald
root        38  1.4  0.0  41548  1844 ?        Ss   15:37   0:00 /usr/lib/systemd/systemd-udevd
root        45  0.0  0.0  41412  1372 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        46  0.0  0.0  42540  2712 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        47  0.0  0.0  41412  1576 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        48  0.0  0.0  41412  1440 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        49  0.0  0.0  41412  1432 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        50  0.0  0.0  41412  1244 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        51  0.0  0.0  41412  1396 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        52  0.0  0.0  41412  1340 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        53  0.0  0.0  41544  1360 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        54  0.0  0.0  41544  1368 ?        S    15:37   0:00 /usr/lib/systemd/systemd-udevd
root        56  1.2  0.2 308328 11872 ?        Ss   15:37   0:00 /usr/sbin/httpd -DFOREGROUND
root        57  0.0  0.0  22080  1432 ?        Ss   15:37   0:00 /usr/lib/systemd/systemd-logind
dbus        58  0.0  0.0  24284  1448 ?        Ss   15:37   0:00 /bin/dbus-daemon --system --address=systemd
root        61  0.0  0.0   9860   824 tty1     Ss+  15:37   0:00 /sbin/agetty --noclear tty1 linux
apache      72  0.0  0.1 308328  6116 ?        S    15:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache      73  0.0  0.1 308328  6116 ?        S    15:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache      74  0.0  0.1 308328  6116 ?        S    15:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache      75  0.0  0.1 308328  6116 ?        S    15:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache      76  0.0  0.1 308328  6116 ?        S    15:37   0:00 /usr/sbin/httpd -DFOREGROUND
root        79  0.0  0.0  47448  1656 ?        R+   15:37   0:00 ps aux

ubuntus の場合何か方法が違うのかな?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/02 18:04

    Dockerfileに、
    ```
    RUN service apache2 start
    ```
    を追加してみました。
    ビルド中にエラーが出て、イメージ自体は作成されますが、結果は変わりませんでした。


    RUNはやめて、
    ```
    CMD ["/usr/sbin/apache2", "service", "start"]
    ```
    はどうかなと試してみましたが、上手くいきませんでした。
    残念です。

    キャンセル

  • 2018/02/02 21:24

    start じゃなく 自動起動を有効化(onかenableだと思う)する

    キャンセル

  • 2018/02/02 22:18

    Dockerfile に
    ```
    RUN systemctl enable apache2
    ```
    → ダメでした。

    ```
    CMD ["/usr/sbin/apache2", "systemctl", "enable"]
    ```
    → ダメでした。

    キャンセル

  • 2018/02/03 01:27

    ubuntuでパッケージ検索をすると、
    $ apt-cache search httpd

    httpdというパッケージがないみたいです。
    httpdはcentOS用なんでしょうかね。

    キャンセル

  • 2018/02/03 01:40

    apache2 かもしれないよ ubunt は

    キャンセル

0

docker run時にCMDは最後の1つのみ実行される性質に依るものかと思います。

※当方の環境がcentOS7のためubuntuでは検証していません(適宜読み替えてください)。

dockerfile最終のCMD
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

起動コマンド
docker run -itd --name コンテナ名 -p 80:80 イメージ名

コンテナ内へ進入
docker exec -it コンテナ名 /bin/bash

runの最後に/bin/bash等、起動直後のコマンドを指定すると、
それが最後のCMDと解釈され、dockerfile中のCMDが効きません。

CMDを複数記述したい場合は下記URLのように.shを作り実行するのが良いようです。
https://sleepless-se.net/2018/05/26/docker%E3%81%A7%E8%A4%87%E6%95%B0cmd%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Apache

    2106questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Ubuntu

    1806questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Docker

    1047questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです