iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Software Development

Laravel專案練習-寶可夢管理系統系列 第 26

Day26:寶可夢專案-Docker練習-基本概念

  • 分享至 

  • xImage
  •  

使用Docker目的

所以今天針對這個專案使用docker,主要我有個目的在於:

  • 我希望我專案在一個建好的docker環境可以運行,然後我可以把這個環境打包,之後部署或是其他人要使用這個專案的時候可以直接套用這個打包。
  • 當會使用docker後, 在後續開發專案你突然需要在某個版本的應用程式環境下測試(比如不同的php版本),就可以使用docker來達成。

Docker學習目標

我有三個主要的目標:

目標一:在本機端使用docker環境(建立容器),可以運行。

目標二:將該環境打包上傳。

目標三:在雲端主機上,可以使用打包好的環境,直接運行專案,讓專案順利運行

基本概念

首先我想先針對docker中一些重要的概念做說明:

  • 其實我對於docker一個最基本的理解就是,他提供一個我們預設好的環境讓我們專案可以在裡面執行,有點環境包的概念。
  • 我們通常會運行在我們用docker創建好的一個叫容器的地方。
  • 至於這個容器要如何創建呢?也就是透過DockerFile和image。

以下是他的一些重要的名詞:

  • Dockerfile 有點像是定義image的藍圖或模板,它定義了應用程式運行所需的所有設定和依賴關係。

  • Image(映像) 我自己是把image看成是根據Dockerfile「藍圖」建立的一個類(class),它包含了運行應用程序所需的一切。

  • Container(容器)

    則可以看作是映像(或類)的一個實例(instance),您可以根據同一個映像運行多個容器(或創建多個實例)。

    一般來說會用使用一個image可以創建多個(相同應用程式的)容器,而每個容器都代表一個獨立的應用程式運行環境(比如laravel的container)。

    • 為何不把多個應用程式包含在一個container就好?
      • 一個容器一個應用程式vs 多個應用程式
        • 較有彈性

          • 主要就是你今天可以對每一個應用程式每一個版本都建立容器。 然後讓你去根據需求組合 或是如果今天你在不同的環境。你可以能有需要某一個版本的應用。 你就可以給相對應的容器
          • 如果你今天都寫在同一個容器, 代表你沒辦法切換其中一個部分。

          網路上還有一些其他的原因,但這是我目前自己的理解。

  • volume

    卷的概念就是有點類似共享資料夾, 今天我在我的容器可以設定volume, 從本地的某個目錄對應到容器的某個目錄。

    • 例子

      所以今天可以把你專案的目錄對應到laravel的容器, 這樣他就可以去讀取執行你專案的內容。

    • 目的:

      資料持久化

      比如說你今天在mysql容器進行了一些資料庫的儲存,需要把容器重建,那你剛剛的所有資料都會消失。

基本流程:

  • 根據目標一:首先先在本地創建docker環境,然後將本地專案在上面運行成功
    • 實際流程步驟:

      • 編寫dockerFile
      • 創建鏡像檔(image)
      • 創建容器(container)
    • 編寫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
      
      1. docker build:

        這是 Docker 的命令來構建一個新的 Docker 鏡像。

      2. t docker-laravel:test:

        t 是指定新鏡像的名字(也叫做 tag)。在這裡,你給新鏡像命名為 docker-laravel 並且使用 test 作為它的標籤。在 Docker 術語中,完整的鏡像名稱是 repository:tag,所以在這裡是 docker-laravel:test

      3. Dockerfile:

        • f 參數指定 Dockerfile 的路徑。如果你不指定 f 參數,Docker 預設會在當前目錄查找名為 Dockerfile 的文件。所以在這裡我指定的路徑就是當前目錄。
      4. -no-cache:

        這個參數告訴 Docker 在構建鏡像時不使用任何快取。預設情況下,Docker 會快取每一層,以加速後續的構建過程。使用 --no-cache 會使得每次構建都重新執行所有的步驟,這確保了你得到的是最新和最乾淨的構建,但可能會花費更多的時間。

小結語

關於容器的創建因為我想要跟資料持久化的一些方式分享,所以我分到下一章節。


上一篇
Day25:寶可夢專案-學習寫測試-UnitTest實作
下一篇
Day27 寶可夢專案-Docker練習- 容器創建、數據持久化、docker內部網路初探
系列文
Laravel專案練習-寶可夢管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言