簡體   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