[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 的設定文件.