现在,我们拥有一个基于Azure php 5.6的网站,该网站基于CentOS 7。 每次我们要部署新代码时,都必须使用ftp到我们的服务器并手动传输文件和文件夹。这非常容易出错,此后每次都要花费我们数小时的部署和调试时间。 我们使用PHP和WAMP在本地Windows计算机上进行开发。因此,我们的本地主机环境和生产环境之间已经存在差异。
最近,我开始阅读有关docker及其与BitBucket管道集成的更多信息。因此,我想使用BitBucket管道使我们的部署流程更加简化和自动化。 在获得已经尝试过的技术知识之前,我想确保我已经掌握了需要正确完成的步骤的一般情况。
我想要实现的是一种让我和我的同事编写代码并将其推送到我们的BitBucket存储库的方法,从那里从管道中拾取它,创建一个docker容器并(自动)部署它(这是一个好主意,那么在将新容器部署到我们的网站期间,活动用户又如何呢?
这些是我认为需要完成的步骤,请在错误的地方纠正我:
现在我遇到的问题是在为我的情况创建此“ 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容器内开发代码吗?这怎么工作?
答案 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>