所以今天針對這個專案使用docker,主要我有個目的在於:
我有三個主要的目標:
目標一:在本機端使用docker環境(建立容器),可以運行。
目標二:將該環境打包上傳。
目標三:在雲端主機上,可以使用打包好的環境,直接運行專案,讓專案順利運行
首先我想先針對docker中一些重要的概念做說明:
以下是他的一些重要的名詞:
Dockerfile 有點像是定義image的藍圖或模板,它定義了應用程式運行所需的所有設定和依賴關係。
Image(映像) 我自己是把image看成是根據Dockerfile「藍圖」建立的一個類(class),它包含了運行應用程序所需的一切。
Container(容器)
則可以看作是映像(或類)的一個實例(instance),您可以根據同一個映像運行多個容器(或創建多個實例)。
一般來說會用使用一個image可以創建多個(相同應用程式的)容器,而每個容器都代表一個獨立的應用程式運行環境(比如laravel的container)。
較有彈性:
網路上還有一些其他的原因,但這是我目前自己的理解。
volume
卷的概念就是有點類似共享資料夾, 今天我在我的容器可以設定volume, 從本地的某個目錄對應到容器的某個目錄。
例子
所以今天可以把你專案的目錄對應到laravel的容器, 這樣他就可以去讀取執行你專案的內容。
目的:
資料持久化
比如說你今天在mysql容器進行了一些資料庫的儲存,需要把容器重建,那你剛剛的所有資料都會消失。
實際流程步驟:
編寫docker file
這裡就是相當於你把原本對環境做的設定寫在這裡,以下是個範例:
RUN的部分就是容器創建後他就會去執行
# 使用 PHP 8.0 + Apache 作为基础镜像
FROM bitnami/laravel:latest
# 安装必要的 PHP 扩展和依赖
RUN apt-get update && apt-get install -y \
...
# 将本地的 Laravel 项目复制到容器中的 /var/www/html 目录
COPY . /var/www/html/
# 设置启动命令
CMD ["apache2-foreground"]
這裡只是一個範例,說一下他主要的幾個指令:
FROM
這裡就是說他會去引用哪一個image模板來創建image,我這裡是直接用docker hub上面的image模板,
RUN
就是他在容器建立後會先去執行的指令
比如一些php的依賴套件,只是說這部分要去看你引用的image模板裡面是不是都幫你包好了,像我引用的laravel image模板大部分的php 相關的以及composer其實都有了。
COPY
可以讓你把目前專案的目錄複製到容器,這樣容器在一創建的時候就會有你專案的資料。
CMD
可以設置在啟動後會去執行的指令
創建image
docker build -t docker-laravel:test -f Dockerfile . --no-cache
docker build:
這是 Docker 的命令來構建一個新的 Docker 鏡像。
t docker-laravel:test:
t
是指定新鏡像的名字(也叫做 tag)。在這裡,你給新鏡像命名為 docker-laravel
並且使用 test
作為它的標籤。在 Docker 術語中,完整的鏡像名稱是 repository:tag
,所以在這裡是 docker-laravel:test
。
Dockerfile:
f
參數指定 Dockerfile
的路徑。如果你不指定 f
參數,Docker 預設會在當前目錄查找名為 Dockerfile
的文件。所以在這裡我指定的路徑就是當前目錄。-no-cache:
這個參數告訴 Docker 在構建鏡像時不使用任何快取。預設情況下,Docker 會快取每一層,以加速後續的構建過程。使用 --no-cache
會使得每次構建都重新執行所有的步驟,這確保了你得到的是最新和最乾淨的構建,但可能會花費更多的時間。
關於容器的創建因為我想要跟資料持久化的一些方式分享,所以我分到下一章節。