用Docker和docker-compose运行PHP,Apache和MySQL

我无法弄清楚如何使用我的容器在Docker中运行(通过docker-compose)。

在过去的几个星期里,我一直在阅读Docker,并且我有兴趣构build一个我可以开发的环境,并且可以高效地复制和我的同事合作。

我读过以下文章:

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-centos-7

https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-and-phpmyadmin-with-docker-compose-on-ubuntu-14-04

https://www.digitalocean.com/community/tutorials/how-to-work-with-docker-data-volumes-on-ubuntu-14-04

我已经通过由前面的文章中find的命令组成的Bash脚本安装了Docker和Docker Compose:(以sudo身份运行)

## Install Docker package function docker_install { echo "__ installing docker" # Run installer script wget -qO- https://get.docker.com/ | sh # Add user parameter to docker group usermod -aG docker $1 # Enable docker on boot sudo systemctl enable docker.service # Start docker now sudo systemctl start docker.service } ## Install docker-compose package function docker-compose_install { echo "__ installing docker-compose" # Update yum repo sudo yum install epel-release # Install pip with "yes" flag sudo yum install -y python-pip # Install SSL Extension sudo pip install backports.ssl_match_hostname --upgrade # Install docker-compose through pip sudo pip install docker-compose # Upgrade python sudo yum upgrade python* } # Call Functions docker_install docker-compose_install 

我的Docker镜像有一个docker-compose.yml文件。 (现在我只是把PHP和Apache作为一个概念validation,我将包括MySQL一次可以让PHP和Apache一起工作)

 php: image: php links: - httpd httpd: image: httpd ports: - 80:80 

我打电话给一个sudo docker-compose up -d ,我没有收到任何错误:

 Creating containerwrap_httpd_1 Creating containerwrap_php_1 

任何我的问题是:当我运行一个php -vservice httpd status后图像正在运行我收到:

 -bash: php: command not found 

 ● httd.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead) 

如果图像正在运行,为什么我不能使用PHP或查看Apache的状态? 我该如何利用我的PHP和Apache容器?

更新

我再次询问了这个问题的更明智的版本。

似乎你对Docker的概念有一些误解。 您可以将每个Docker容器映像为一个轻量级的虚拟机(当然,Docker容器与真实虚拟机不同)。 所以基本上在你创buildphp和httpd容器之后,这些php和httpd命令只能在容器的bash中使用。 您不能在主机上执行这些命令,因为您的主机与您的容器不同。 如果你想附加到容器bash,看看这个命令exec 。 您应该能够在容器的bash中运行php或httpd命令。

如果你想从你的主机连接到你的php容器,你可以尝试docker run -p参数,它将把publish a container's port(s) to the host.

或者你想连接你的PHP和httpd容器在一起,你应该考虑阅读docker的networking文件来弄清楚如何使用链接或dockernetworking 。

你所缺less的是容器就像不同的机器。 在你的液滴上运行命令,你将看不到在这些机器上运行的任何东西。 你需要连接到他们。 一个简单的方法是使用一些东西: docker exec -it CONTAINER_ID /bin/bash 。 这将让你访问每个容器bash。

对于您的Apache服务器将是containerwrap_httpd_1,并且它将一直在变化,除非您的docker-compose.yaml设置为每次创build和启动服务时都使用一个常量名称。 当然,您可以使用curl localhost或打开浏览器浏览您的Droplet IP地址,只要它在默认端口(或使用转发端口)上转发http。 这将会看到Apache的默认网页,因为您已经为服务设置了导出80:80规则。