CentOS の docker イメージからコンテナを生成し、そのコンテナにwebサーバをインストールします。
webサーバにapacheを使用します。
簡単なdockerコンテナの起動については理解していることを前提としますので、以下を参考にしてからこの記事を読んで下さい。
やりたいこと
やりたいことは以下の通りです。
- docker hub から CentOS7のイメージをダウンロードし、コンテナを起動する。
- コンテナへログインする。
- apacheをインストールし、apacheを起動する。
コンテナ起動
今回、apacheを使用する際、いくつかオプションを指定してdockerコンテナを生成する必要があります。
ポイントは以下の2点です。
- ポートフォワード
- 権限の設定
なお、dockerイメージはコンテナ生成時にダウンロードするので、docker pull コマンドは使用しません。
ポートフォワード
apacheを使用してHTTPリクエストを受ける場合、ポートフォワードで接続ポートを指定する必要があります。
-p オプションを使用し、接続ポートを指定します。 “ホストOSポート:ゲストOSポート” の形式で指定します。
apacheはデフォルトの設定だと、ポート80でHTTPリクエストを受けます。したがって、ゲストOSのポートは80とします。
ホストOSのポートは任意のポート番号で構いませんが、他のコンテナがポートフォワードをしている場合、そのポート番号は使用出来ません。また、well-knownポート(ウェルノウンポート)の指定は避けて下さい。ホストOSで既に使用されているのでウェルノウンポートの利用はしない方が良いです。ポートに関しては説明しないので、詳しく知りたい場合は他のサイトを参考にして下さい。
権限モードでの実行
dockerコンテナでhttpdサービス(apache)を起動したい場合、サーバにログインしているユーザにサービスを実行可能にする権限を指定しないと起動が出来ませんでした。
docker コマンドのオプション /sbin/initへ–privileged を指定するとhttpsサービスが実行可能となります。
dockerコンテナを起動する場合、あらゆる権限が付与されない状態のようで、OSの起動時に(/sbin/initの段階で)権限を付与することでサービスの操作を行えるようにするという感じです。
詳しい説明は他のサイトを参照して下さい。
docker run -itd --privileged --name コンテナ名 イメージ名:タグ名 /sbin/init
コンテナ起動
上記を考慮し、以下のコマンドを実行しdockerコンテナを生成します。
docker run -itd --privileged --name centos7 -p 3002:80 centos:centos7 /sbin/init
エラーでなければ成功です。自分の環境では以下のような数字が表示されました。
7914e6424fd848aad94ec6c733b2f3c7aae311eebbd05ed7e9f89c4f6ffa3e7e
起動の確認
dockerコンテナが起動していることを確認します。
docker ps コマンドを使用します。
-a オプションで全てのコンテナの状態が確認出来ます。
docker ps -a
起動していれば、STATUSがUPになっています。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7914e6424fd8 centos:centos7 "/sbin/init" About a minute ago Up About a minute 0.0.0.0:3002->80/tcp centos7
コンテナへログイン
生成したCentOS7コンテナへログインします。
docker exec コマンドを使用し、ログインしたいコンテナ名を指定します。コンテナ名でなくコンテナIDでも指定可能です。
docker exec -it centos7 bash
apacheのインストール
centosへapacheをインストールする方法については以下を参照して下さい。
確認
最後に、apacheのデフォルトページが表示されることを確認しましょう。
以下のURLをブラウザに入力します。
http://localhost:3002/
以下のような画面が表示されることを確認します。
最後に
今回はCentOSのイメージを利用し、生成したコンテナへapacheをインストールしました。
docker hub ではapacheがインストールされたイメージも存在しますので、そちらを使うのも良いでしょう。
次回は更にPHPをインストールします。