人生就是不斷學習,調整與更新持續前進。

Rails Kama 開發部署工作流 v1

[Rails開發部署工作流]

合適性:使用 Kamal + Rails 7.x or 8.x 版本, Docker, Linux, Ruby, DockerHub

Docker Current Version 28.5.1, build e180ab8

 

Step1 ex. ubuntu24.04 install Docker tool 


sudo apt update

sudo apt upgrade -y



Add user (如果要的話可以建立User, 避免使用 Root)



sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release



sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl start docker

sudo systemctl enable docker



sudo usermod -aG docker $USER



newgrp docker



驗證

docker --version

docker compose version



Test Docker

docker run hello-world

 

Step2 撰寫設計 Dockerfile 

Docker version 28.1.1, build 4eba377

Rails需要安裝以下 gemfile:

gem "kamal"

gem 'dotenv-rails'

 

Dockerfile 基礎定義:


ARG

定義「build-time」變數。

只能在 build 時期 使用,不能在 container runtime 使用。

FROM

指定 Docker image 的 基底映像。

一個 Dockerfile 可有多個 FROM(多階段構建)。

WORKDIR

設定工作目錄(後續指令的預設執行目錄)。

若該目錄不存在,Docker 會自動建立。

RUN

在 build 過程中執行指令(安裝套件、編譯、下載…)。

產生的變化會寫入 image layer。

ENV

設定環境變數(runtime 可使用)。

可在 container 執行時透過環境變數讀取。

COPY

將本機檔案/資料夾複製到 image 裡。

常用於加入程式碼、設定檔。

USER

設定後續指令與 container 執行時使用的 預設使用者。

用來避免以 root 執行(安全性較佳)。

ENTRYPOINT

設定 container 啟動時要執行的「主要命令」。

通常用來固定 container 的核心行為。

常與 CMD 搭配使用。

EXPOSE

聲明 container 會使用的 port(文件用途)。

不會真的開 port,需要 -p 或 compose 才會對外開放。

CMD

設定 container 的預設命令(可被 docker run 指令覆蓋)。

若有 ENTRYPOINT,通常 CMD 作為其預設參數。

 

 

本篇到這裡,下一篇v2 將會講解 Step3 Kamal 的設定文件.