# 在 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 部署到自訂域名下,可以按照以下步驟進行配置:

  1. 在 DNS 服務商處添加一個 A 記錄,將您的域名指向 GitLab 伺服器的 IP 位址。

  2. 在 GitLab 配置文件 /path/to/config/gitlab.rb 中修改配置:

    external_url 'https://yourdomain.com'
    

    yourdomain.com 替換成您的自訂域名。

  3. 重啟 GitLab:

    docker restart gitlab
    

完成以上步驟後,您應該能夠通過您的自訂域名訪問 GitLab。

請注意,如果您的伺服器位於防火牆後面或使用了其他網路安全措施,請確保在防火牆中打開了 GitLab 所使用的埠,以便外部用戶可以訪問您的 GitLab 伺服器。

# 結論

通過編寫自己的 Dockerfile 並構建 Docker 鏡像,您可以輕鬆地在 ARM64 架構下運行 GitLab。此外,您還可以根據自己的需求自訂 Dockerfile,並使用類似的步驟構建自己的鏡像。