运行 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

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

我已经安装了 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 -vservice 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