繁体   English   中英

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

[英]Docker image on CentOS with php, mysql and apache

现在,我们有一个网站在基于CentOS 7的Azure上的php 5.6上运行。 每次我们要部署新代码时,都必须使用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容器内开发代码吗? 这怎么工作?

该过程应为:

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

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

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

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

笔记:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM