web-dev-qa-db-fra.com

Comment utiliser le conteneur Docker comme serveur Apache?

Je viens de commencer à utiliser Docker et j'ai suivi le tutoriel suivant: 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"]

et

[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"

Construire et exécuter:

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

Ma question est la suivante: lorsque docker s'exécute sur mon serveur avec IP http://88.xxx.x.xxx/ , comment puis-je accéder à l'hôte local Apache s'exécutant à l'intérieur du conteneur de docker à partir du navigateur de mon ordinateur ? Je voudrais utiliser un conteneur Docker comme serveur Web.

15
Upvote

Vous devrez utiliser redirection de port pour pouvoir accéder à votre conteneur Docker depuis le monde extérieur.

Depuis les Docker docs :

Par défaut, les conteneurs Docker peuvent établir des connexions avec le monde extérieur, mais le monde extérieur ne peut pas se connecter aux conteneurs.

Mais si vous souhaitez que les conteneurs acceptent les connexions entrantes, vous devrez fournir des options spéciales lors de l'appel de docker run.

Qu'est-ce que cela signifie? Vous devrez spécifier un port sur votre machine hôte (généralement le port 80) et transférer toutes les connexions sur ce port au conteneur Docker. Puisque vous exécutez Apache dans votre conteneur Docker, vous souhaiterez probablement également transférer la connexion au port 80 sur le conteneur Docker.

Il est préférable de le faire via le -p option pour le docker run commande.

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

La partie de la commande qui dit -p 80:80 signifie que vous transférez le port 80 de l'hôte vers le port 80 du conteneur.

Lorsque cela est correctement configuré, vous pouvez utiliser un navigateur pour surfer sur http: //88.x.x.x et la connexion sera transmise au conteneur comme prévu.

Le Docker docs décrit le -p option à fond. Il existe plusieurs façons de spécifier le drapeau:

# 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

Edit: Lorsque cette question a été initialement publiée, il n'y avait pas de conteneur Docker officiel pour le serveur Web Apache. Maintenant, une version existante existe.

Le moyen le plus simple de faire fonctionner Apache est d'utiliser le conteneur Docker officiel . Vous pouvez le démarrer en utilisant la commande suivante:

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

De cette façon, vous montez simplement un dossier sur votre système de fichiers afin qu'il soit disponible dans le conteneur Docker et que votre port hôte soit transféré vers le port conteneur comme décrit ci-dessus.

23
wassgren

Il y a une image officielle pour Apache . La documentation de l'image contient des instructions sur la façon dont vous pouvez utiliser ces images officielles comme base pour une image personnalisée.

Pour voir comment cela se fait, jetez un œil au Dockerfile utilisé par l'image officielle:

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

Exemple

Assurez-vous que les fichiers sont accessibles à la racine

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

Hébergez ces fichiers en utilisant l'image Docker officielle

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

Les fichiers sont accessibles sur le port 80.

12
Mark O'Connor