# 在 ARM64 架構下編寫 Dockerfile 構建 GitLab 鏡像
# 簡介
Oracle Cloud 提供了 ARM 架構的 Always Free 雲端伺服器,性能不錯,最高可以配到 4 個 vCPU 和 24GB 記憶體。這對於架設像 GitLab 這種需要大記憶體的服務非常適合。在 GitLab 的官網也有提到,GitLab 在 Ubuntu 20.04 和 22.04 環境已經支援 ARM64 架構了,並且在安裝 GitLab 時自動使用 ARM64 版本。但是在 Docker Hub 上並沒有提供 ARM 版本的 GitLab 鏡像,所以這個文章的目的就是自己來建置 ARM 版本的 GitLab 鏡像。
# 步驟
# 1. 創建 Dockerfile
首先,創建一個名為 Dockerfile 的文件並將以下內容複製到其中:
FROM ubuntu:22.04 | |
# 設置時區 | |
ENV TZ=Asia/Taipei | |
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ | |
echo $TZ > /etc/timezone | |
# 安裝基本組件 | |
RUN apt-get update && \ | |
apt-get install -y wget curl tar git openssh-server ca-certificates perl gnupg && \ | |
DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata postfix && \ | |
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash && \ | |
apt-get install -y gitlab-ee || echo true && \ | |
apt-get clean && \ | |
rm -rf /var/lib/apt/lists/* | |
# 複製 entry.sh 文件並設置可執行權限 | |
WORKDIR /app | |
COPY entry.sh . | |
RUN chmod +x entry.sh | |
# 開放 SSH 和 HTTP/HTTPS 服務 | |
EXPOSE 22 80 443 | |
# 定義 volume | |
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"] | |
# 設置默認命令 | |
CMD ["/bin/bash","-c","/app/entry.sh"] |
這個 Dockerfile 文件使用 Ubuntu 22.04 作為基礎鏡像,並安裝了 GitLab 所需的套件。它還設置了時區、開放了 SSH 和 HTTP/HTTPS 連接埠等,並定義了 volume 和默認命令。
# 2. 創建 entry.sh 腳本
接下來,創建一個名為 entry.sh 的文件並將以下內容複製到其中:
#!/bin/bash | |
# 啟動 GitLab | |
nohup bash -c "/opt/gitlab/embedded/bin/runsvdir-start &" | |
# 重新配置 GitLab | |
gitlab-ctl reconfigure | |
# 輸出初始管理員密碼 | |
cat /etc/gitlab/initial_root_password | |
# 輸出 GitLab 日誌 | |
gitlab-ctl tail |
這個腳本將啟動 GitLab、重新配置 GitLab、輸出初始管理員密碼和輸出 GitLab 日誌。您可以將這個腳本放在 Dockerfile 中,然後在構建 Docker 鏡像時複製它到容器中。
請注意,初始管理員密碼只在第一次執行 GitLab 時顯示。如果您需要重設管理員密碼,請參考 GitLab 官方文件中的說明。
# 3. 構建 Docker 鏡像
現在,使用以下命令從 Dockerfile 構建 Docker 鏡像:
docker build -t gitlab .
這個命令將從當前目錄中的 Dockerfile 構建一個名為 gitlab 的 Docker 鏡像。請注意,構建過程可能需要一些時間,具體取決於您的設備性能和網路連接速度。
# 4. 運行 GitLab 容器
最後,使用以下命令在 Docker 容器中運行 GitLab:
docker run -itd \ | |
--name gitlab \ | |
--privileged \ | |
--user root \ | |
-p 80:80 \ | |
-p 443:443 \ | |
-p 22:22 \ | |
-v /path/to/config:/etc/gitlab \ | |
-v /path/to/logs:/var/log/gitlab \ | |
-v /path/to/data:/var/opt/gitlab \ | |
--restart always \ | |
-e TZ=Asia/Taipei \ | |
gitlab |
# 5. 自訂域名(可選)
如果您想要將 GitLab 部署到自訂域名下,可以按照以下步驟進行配置:
在 DNS 服務商處添加一個 A 記錄,將您的域名指向 GitLab 伺服器的 IP 位址。
在 GitLab 配置文件
/path/to/config/gitlab.rb
中修改配置:external_url 'https://yourdomain.com'
將
yourdomain.com
替換成您的自訂域名。重啟 GitLab:
docker restart gitlab
完成以上步驟後,您應該能夠通過您的自訂域名訪問 GitLab。
請注意,如果您的伺服器位於防火牆後面或使用了其他網路安全措施,請確保在防火牆中打開了 GitLab 所使用的埠,以便外部用戶可以訪問您的 GitLab 伺服器。
# 結論
通過編寫自己的 Dockerfile 並構建 Docker 鏡像,您可以輕鬆地在 ARM64 架構下運行 GitLab。此外,您還可以根據自己的需求自訂 Dockerfile,並使用類似的步驟構建自己的鏡像。