web-dev-qa-db-ja.com

DockerコンテナをApacheサーバーとして使用するには?

私はちょうどdockerの使用を開始し、次のチュートリアルに従いました: https://docs.docker.com/engine/admin/using_supervisord/

FROM ubuntu:14.04
RUN apt-get update && apt-get upgrade
RUN apt-get install -y openssh-server Apache2 supervisor
RUN mkdir -p /var/lock/Apache2 /var/run/Apache2 /var/run/sshd /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 22 80
CMD ["/usr/bin/supervisord"]

そして

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:Apache2]
command=/bin/bash -c "source /etc/Apache2/envvars && exec /usr/sbin/Apache2 -DFOREGROUND"

ビルドして実行:

Sudo docker build -t <yourname>/supervisord .
Sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord

私の質問は、IP http://88.xxx.x.xxx/ を使用してサーバー上でdockerが実行されている場合、コンピューターのブラウザーからdockerコンテナー内で実行されているApache localhostにアクセスするにはどうすればよいですか? ? DockerコンテナをWebサーバーとして使用したいと思います。

15
Upvote

ポート転送を使用して、外部からDockerコンテナにアクセスできるようにする必要があります。

Docker docs から:

デフォルトでは、Dockerコンテナは外部と接続できますが、外部とは接続できません。

ただし、コンテナが着信接続を受け入れるようにする場合は、docker runを呼び出すときに特別なオプションを指定する必要があります。

それで、これはどういう意味ですか?ホストマシンのポート(通常はポート80)を指定し、そのポート上のすべての接続をdockerコンテナーに転送する必要があります。 DockerコンテナでApacheを実行しているため、おそらくDockerコンテナのポート80にも接続を転送する必要があります。

これは、-pコマンドのdocker runオプションを使用して行うのが最適です。

Sudo docker run -p 80:80 -t -i <yourname>/supervisord

-p 80:80と書かれているコマンドの部分は、ホストからポート80をコンテナのポート80に転送することを意味します。

これが正しくセットアップされると、ブラウザを使用して http://88.x.x.x にアクセスでき、接続は意図したとおりにコンテナに転送されます。

Docker docs-pオプションを徹底的に説明しています。フラグを指定する方法はいくつかあります。

# Maps the provided Host_port to the container_port but only 
# binds to the specific external interface
-p IP:Host_port:container_port

# Maps the provided Host_port to the container_port for all 
# external interfaces (all IP:s)
-p Host_port:container_port

編集:この質問が最初に投稿されたとき、Apache Webサーバー用の公式dockerコンテナはありませんでした。現在、既存のバージョンが存在します。

Apacheを起動して実行する最も簡単な方法は、 公式Dockerコンテナー を使用することです。次のコマンドを使用して起動できます。

$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/Apache2/htdocs/ httpd:2.4

この方法では、ファイルシステムにフォルダーをマウントするだけで、Dockerコンテナーで使用できるようになり、上記のようにホストポートがコンテナーポートに転送されます。

23
wassgren

Apache の公式イメージがあります。画像ドキュメントには、この公式画像をカスタム画像のベースとして使用する方法の説明が含まれています。

それがどのように行われるかを確認するには、公式イメージで使用されるDockerfileを覗いてください:

https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile

ルートがファイルにアクセスできるようにする

Sudo chown -R root:root /path/to/html_files

公式のドッカーイメージを使用してこれらのファイルをホストする

docker run -d -p 80:80 --name Apache -v /path/to/html_files:/usr/local/Apache2/htdocs/ httpd:2.4

ファイルはポート80でアクセスできます。

12
Mark O'Connor