运行 PHP、Apache 和 MySQL 与 Docker & docker-compose
Running PHP, Apache and MySQL with Docker & docker-compose
我不知道如何使用我的容器 运行 在 Docker 中(通过 docker-compose)。
过去几周我一直在阅读 Docker,我有兴趣构建一个我可以在此基础上开发的环境,并且我可以有效地复制以与我的同事协作。
我已阅读以下文章:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-centos-7
我已经安装了 Docker 和 Docker Compose 通过 Bash 脚本,该脚本由之前文章中的命令组成:(运行 as 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
# 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 作为概念验证,一旦可以让 PHP 和 Apache 一起工作,我将包括 MySQL)
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 -v
和 service httpd status
后图像是 运行ning 我收到:
-bash: php: command not found
和
● httd.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
如果图像是 运行ning 为什么我不能使用 PHP 或看不到 Apache 的状态?我应该如何使用我的 PHP 和 Apache 容器?
更新
我问过 的更明智的版本。
你缺少的是容器就像不同的机器。 运行 你的 droplet 上的命令,你不会在那些机器上看到任何东西 运行。你需要连接到他们。一种简单的方法是使用一些东西:
docker exec -it CONTAINER_ID /bin/bash
。这将使您可以访问每个容器 bash.
对于您的 Apache 服务器,它将是 containerwrap_httpd_1 并且它将始终更改,除非您将 docker-compose.yaml 设置为每次创建服务时都使用常量名称并开始。当然,您可以 curl localhost
或打开浏览器并浏览到您的 Droplet 的 IP 地址,前提是它在默认端口(或使用转发端口)上转发 http。这将产生查看 Apache 的默认网页的效果,因为您已经为服务设置了导出 80:80 规则。
看来你对Docker的概念有些误解。你可以把每个 docker 容器想象成一个轻量级的虚拟机(当然 Docker 容器和真正的 VM 是不一样的)。所以基本上在您创建 php 和 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 的网络文档以了解如何使用 link or docker network。
我不知道如何使用我的容器 运行 在 Docker 中(通过 docker-compose)。
过去几周我一直在阅读 Docker,我有兴趣构建一个我可以在此基础上开发的环境,并且我可以有效地复制以与我的同事协作。
我已阅读以下文章:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-centos-7
我已经安装了 Docker 和 Docker Compose 通过 Bash 脚本,该脚本由之前文章中的命令组成:(运行 as 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
# 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 作为概念验证,一旦可以让 PHP 和 Apache 一起工作,我将包括 MySQL)
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 -v
和 service httpd status
后图像是 运行ning 我收到:
-bash: php: command not found
和
● httd.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
如果图像是 运行ning 为什么我不能使用 PHP 或看不到 Apache 的状态?我应该如何使用我的 PHP 和 Apache 容器?
更新
我问过
你缺少的是容器就像不同的机器。 运行 你的 droplet 上的命令,你不会在那些机器上看到任何东西 运行。你需要连接到他们。一种简单的方法是使用一些东西:
docker exec -it CONTAINER_ID /bin/bash
。这将使您可以访问每个容器 bash.
对于您的 Apache 服务器,它将是 containerwrap_httpd_1 并且它将始终更改,除非您将 docker-compose.yaml 设置为每次创建服务时都使用常量名称并开始。当然,您可以 curl localhost
或打开浏览器并浏览到您的 Droplet 的 IP 地址,前提是它在默认端口(或使用转发端口)上转发 http。这将产生查看 Apache 的默认网页的效果,因为您已经为服务设置了导出 80:80 规则。
看来你对Docker的概念有些误解。你可以把每个 docker 容器想象成一个轻量级的虚拟机(当然 Docker 容器和真正的 VM 是不一样的)。所以基本上在您创建 php 和 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 的网络文档以了解如何使用 link or docker network。