CentOS上具有php,mysql和apache的Docker映像

时间:2018-12-29 21:48:25

标签: php mysql docker docker-compose

现在,我们拥有一个基于Azure php 5.6的网站,该网站基于CentOS 7。 每次我们要部署新代码时,都必须使用ftp到我们的服务器并手动传输文件和文件夹。这非常容易出错,此后每次都要花费我们数小时的部署和调试时间。 我们使用PHP和WAMP在本地Windows计算机上进行开发。因此,我们的本地主机环境和生产环境之间已经存在差异。

最近,我开始阅读有关docker及其与BitBucket管道集成的更多信息。因此,我想使用BitBucket管道使我们的部署流程更加简化和自动化。 在获得已经尝试过的技术知识之前,我想确保我已经掌握了需要正确完成的步骤的一般情况。

我想要实现的是一种让我和我的同事编写代码并将其推送到我们的BitBucket存储库的方法,从那里从管道中拾取它,创建一个docker容器并(自动)部署它(这是一个好主意,那么在将新容器部署到我们的网站期间,活动用户又如何呢?

这些是我认为需要完成的步骤,请在错误的地方纠正我:

  • 1)我使用VirtualBox创建CentOS虚拟机
  • 在此VM上我安装docker
  • 我在此处创建一个dockerfile,在其中使用php7.3-apache基本映像,我还将在其之上安装mysql。
  • ??我是否需要在此处做其他事情,例如使用代码复制文件夹还是 由bitbucket完成的??

现在我遇到的问题是在为我的情况创建此“ docker容器”时。我意识到这可能是Docker的一个非常普遍的用例,但是我已经阅读了成千上万的教程并观看了无数的视频,但是我找不到最基本的问题的答案,最终我被困在几天或几周的沮丧中。 我已经在CodeIgniter中创建了一个可以正常运行的网站,但是出于这个问题,我只想拥有一个包含PHP MySQL和Apache的docker容器的工作版本。

我已经登录到CentOS VM,并执行了以下命令:

mkdir dockertest
touch index.html (and i placed some text in here)
touch index.php (and i placed a basic echo "hello world" in here)
touch docker-compose.yml
mkdir .docker
cd .docker
touch Dockerfile
touch vhost.conf

Dockerfile看起来像这样:

FROM php:7.3.0-apache-stretch

MAINTAINER Dennis

COPY . /srv/app
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf

RUN chown -R www-data:www-data /srv/app && a2enmod rewrite

然后我可以使用

构建图像
docker build --file .docker/Dockerfile -t docker-test .

现在,我可以使用以下命令运行容器:

docker run --rm -p 8080:80 docker-test

这时,我进入CentOS VM,尝试执行curl localhost:8080,并得到以下HTML:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access on this server. <br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at localhost Port 8080</address>
</body></html>

所以我想这意味着Apache服务器正在运行,但是在任何地方都看不到我的索引文件。

我对Docker可用的大量文档和教程感到不知所措,但是对于我来说,它们似乎都太高了,或者对我而言,没有一个针对CentOS 7,PHP,MySQL和Apache。

一个困扰我的问题:Docker的优势在于它可以部署到任何地方,并且环境完全相同。这不会引起任何问题,例如“它可以在我的本地主机上运行”。但是,这到底是如何工作的,我和我的同事需要在Docker容器内开发代码吗?这怎么工作?

1 个答案:

答案 0 :(得分:2)

该过程应为:

  • 开发:您和您的同事开发代码,他们将其推送至版本控制系统(bitbucket / github上的git)->代码位于一个受信任的存储库中

  • 构建:使用此代码并用它创建一个(或多个)Docker映像:在Apache服务器上,您需要HTML,Javascript代码。从Apache映像开始构建一个Docker映像,然后执行从容器内git仓库中提取代码的步骤。那就是你的前端服务器。

对于数据库部分,您可能想要另一个容器,甚至使用托管服务来为您处理迁移/更新,因此您只需要担心数据库中的数据。如果要拥有自己的容器,请确保数据位于容器中已安装的VOLUME中,但否则存储在本地或网络驱动器中(即不在容器内部,该容器在任何更新时都不会被破坏)< / p>

  • 部署:从选择的注册表中提取图像,并确保根据需要连接容器(即,在同一主机上并已链接,或在通过专用网络相互访问的不同节点上)

注意:

在Windows而不是虚拟机上使用Docker,并在其中安装Docker。

主机无关紧要,无论您是在Ubuntu,CentOS还是CoreOS主机上进行部署,容器中的基础映像都很重要,而Docker基础映像对于安装依赖关系和使代码运行至关重要。 / p>

在构建阶段,如果您的项目是私有存储库,您可能不想从git内提取图像,因为您需要在映像内具有凭据才能这样做:相反,您可以从在映像外添加git,并将其添加到映像,或使用具有git pull凭据的另一个(专用)容器提取代码,进行构建并转储生成文件,然后将其添加到可运输的容器中。 / p>