centos上带有php、mysql和apache的docker映像

bvjxkvbb  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(378)

现在我们有一个网站在azure的基于centos 7的操作系统上运行PHP5.6。每次如果我们想做一个新的代码部署,我们必须做它使用ftp到我们的服务器和手动传输文件和文件夹。这是非常容易出错的,每次部署和调试之后都要花费我们几个小时的时间。我们使用php和wamp在本地主机windows机器上开发。因此,我们的本地主机环境和生产环境之间已经存在差异。
我最近开始读很多关于docker的文章,以及它是如何与bitbucket管道集成的。所以我想通过bitbucket管道使我们的部署流程更加精简和自动化。在我开始学习我已经尝试过的技术知识之前,我想确保我已经掌握了需要正确完成的步骤的大致情况。
我想实现的是一种方法,让我和我的同事编写代码并将其推送到我们的bitbucket存储库,从那里开始在管道上提取代码,创建一个docker容器并将其(自动)部署到我们的网站上(这是个好主意,在部署新容器的过程中如何处理活动用户?)。
以下是我认为需要完成的步骤,请纠正我的错误:
1) 我使用virtualbox创建了一个centos虚拟机
在这个虚拟机上我安装了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虚拟机,我试图做一个 curl localhost:8080 and 我得到以下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容器中开发我们的代码吗?这是怎么回事?

mnemlml8

mnemlml81#

过程应该是:
开发:你和你的同事开发代码,他们将代码推送到版本控制系统(bitbucket/github上的git)->代码在一个可信的存储库中
构建:你用这段代码创建一个(或多个)docker映像:在apache服务器上,你需要html,javascript代码。从apache映像开始构建docker映像,然后有一个步骤从容器内的git存储库中提取代码。那是你的前端服务器。
对于db部分,您可能需要另一个容器,或者甚至使用一个托管服务来为您处理迁移/更新,因此您只需要担心数据库中的数据。如果您想拥有自己的容器,请确保数据位于装载在容器中的卷中,但以其他方式存储在本地或网络驱动器上(即,不在容器中,否则会在任何更新时被销毁)
部署:从所选的注册表中提取映像,并确保容器按需连接(即,在同一主机上并链接,或者在通过专用网络相互访问的不同节点上)
笔记:
使用docker for windows而不是虚拟机,并在其中安装docker。
主机不重要,重要的是容器中的基本映像,无论您是部署在ubuntu、centos还是coreos主机上,docker基本映像对您安装依赖项并运行代码都很重要。
在构建阶段,如果您的项目是一个私有存储库,您可能不希望从映像内部的git中提取代码,因为您需要在映像内部拥有凭据才能这样做:相反,您要么从映像外部的git中提取代码,然后将其添加到映像中,或者使用另一个具有git pull凭据的(私有)容器来提取代码、执行生成并转储生成文件,然后可以将其添加到可交付容器中。

相关问题