GitLab CE を Docker Compose で手軽に構築・運用する方法を、具体的な設定例や運用のコツとともに徹底解説します。この記事では、環境の再現性を保ちつつ、設定ファイル・データ・ログの永続化や初回ログインの手順、さらにバックアップや SSL 設定によるセキュアな運用方法まで、幅広い内容を網羅。Docker のシンプルな管理手法を活用し、エンタープライズレベルの GitLab 環境をすぐにでも試せる魅力的なガイドです。
1. docker-compose.yml の概要
GitLab CE(Community Edition)は、リポジトリ管理や CI/CD 機能を備えたオープンソースの Git サーバーです。Docker Compose を利用することで、GitLab CE を簡単にデプロイし、管理することが可能になります。
Docker Compose を使用するメリット:
- 簡単なセットアップ:YAML ファイルに設定を記述するだけで、複雑な環境構築が不要。
- 環境の再現性:同じ
docker-compose.yml
を使えば、どの環境でも同じ設定で GitLab をデプロイできる。 - 永続化とスケーラビリティ:ボリューム設定により、データを保持しつつコンテナを再起動可能。
このガイドでは、Docker Compose を使って GitLab CE をセットアップする方法を詳しく解説します。
2. docker-compose.yml の全体構成
GitLab CE を Docker コンテナで動作させるために、以下の docker-compose.yml
を使用します。この設定では、GitLab CE の最新バージョンをデプロイし、データを永続化しながら運用できるようになっています。
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
hostname: 'gitlab.local'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '<http://localhost>'
ports:
- "80:80"
- "443:443"
- "22:22"
volumes:
- "./config:/etc/gitlab"
- "./logs:/var/log/gitlab"
- "./data:/var/opt/gitlab"
shm_size: '256m'
この構成のポイント:
- GitLab CE の公式 Docker イメージ (
gitlab/gitlab-ce:latest
) を使用 - コンテナが停止しても自動再起動 するように設定 (
restart: always
) - ホスト名を
gitlab.local
に設定 - ポートマッピング (
80:80
,443:443
,22:22
) により、ホストマシンのポートとコンテナ内のポートを接続 - ボリューム設定 により、GitLab の設定・ログ・データを永続化
- 共有メモリサイズを 256MB に拡張 (
shm_size: '256m'
) し、安定動作を確保
3. 各設定項目の詳細解説
このセクションでは、docker-compose.yml
の各設定項目の意味を詳しく解説します。
version: '3'
– Docker Compose のバージョン指定
Docker Compose の構文バージョンを指定します。
version: '3'
は 比較的新しいバージョン で、広く使用されています。- バージョンによって利用できる機能が異なりますが、GitLab CE のデプロイには
3
で十分です。
services:
– コンテナサービスの定義
複数のコンテナを一括で管理するための設定です。
gitlab:
は、GitLab CE 用のコンテナのサービス名です。- 必要に応じて
redis:
やpostgresql:
などを追加し、マルチコンテナ構成にすることも可能です。
image: gitlab/gitlab-ce:latest
– 使用する Docker イメージ
GitLab CE の公式 Docker イメージを指定します。
latest
タグを使用すると、最新バージョンが取得されます。- バージョンを固定したい場合は、例えば
gitlab/gitlab-ce:16.6.0
のように指定可能です。
restart: always
– 自動再起動の設定
コンテナが停止した場合の動作を定義します。
always
にすると、コンテナが異常終了しても 自動的に再起動 されます。- サーバーを再起動した場合でも、GitLab のコンテナが自動で立ち上がります。
hostname: 'gitlab.local'
– コンテナのホスト名
コンテナ内でのホスト名を gitlab.local
に設定します。
external_url
の設定と組み合わせることで、独自ドメインを利用できます。docker-compose.yml
内でホスト名を設定することで、DNS や証明書の管理が容易になります。
environment:
– 環境変数の設定
GitLab CE の環境設定を行います。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '<http://localhost>'
external_url '<http://localhost>'
- GitLab にアクセスするための URL を指定します。
http://localhost
の場合、ローカル環境からhttp://localhost
でアクセスできます。https://gitlab.example.com
のように変更すれば、独自ドメインでも利用可能。
ports:
– ポートマッピングの設定
ホスト(ローカルマシン)とコンテナのポートを関連付けます。
ports:
- "80:80"
- "443:443"
- "22:22"
ホストのポート | コンテナのポート | 用途 |
---|---|---|
80:80 |
80 | HTTP 接続 |
443:443 |
443 | HTTPS 接続 |
22:22 |
22 | SSH 接続(Git リポジトリのクローン用) |
ポートを変更したい場合は、以下のように設定を変えることも可能です。
ports:
- "8080:80"
- "8443:443"
- "10022:22"
この場合、http://localhost:8080
でアクセスできます。
volumes:
– データの永続化設定
GitLab のデータをコンテナ外に保存するための設定です。
volumes:
- "./config:/etc/gitlab"
- "./logs:/var/log/gitlab"
- "./data:/var/opt/gitlab"
ホスト側のディレクトリ | コンテナ内のディレクトリ | 保存されるデータ |
---|---|---|
./config |
/etc/gitlab |
GitLab の設定ファイル |
./logs |
/var/log/gitlab |
ログファイル |
./data |
/var/opt/gitlab |
リポジトリやデータ |
この設定により、コンテナを削除してもデータが失われません。
shm_size: '256m'
– 共有メモリサイズの設定
GitLab は一部の処理で共有メモリ(/dev/shm
)を使用するため、デフォルト(64MB)よりも増やします。
shm_size: '256m'
にすることで、より安定した動作を確保できます。- メモリが十分ある場合は、512MB (
shm_size: '512m'
) 以上に増やすことも可能です。
4. GitLab の初回ログイン情報
GitLab を初めて起動すると、管理者ユーザー (root
) のパスワードを設定する必要があります。
デフォルトでは、GitLab の初回パスワードは コンテナ内のファイルに自動生成 されます。
初回ログイン時の root パスワード確認方法
- GitLab コンテナの ID を取得
docker ps
CONTAINER ID
のカラムに表示される GitLab のコンテナ ID を確認します。 - コンテナ内の初回パスワードを確認
docker exec -it <コンテナID> cat /etc/gitlab/initial_root_password
例:
docker exec -it 123abc456 cat /etc/gitlab/initial_root_password
出力例:
# WARNING: This value will be removed after the first reconfigure! Password: Xyz123SecurePassword!
- ブラウザで GitLab にアクセスし、ログイン
http://localhost
または設定したexternal_url
にアクセス- ユーザー名:
root
- パスワード:取得したパスワード (
Xyz123SecurePassword!
) を入力
- 初回ログイン後、パスワードを変更
- セキュリティのため、
Settings
→Password
からパスワードを変更してください。
- セキュリティのため、
パスワードを忘れた場合のリセット方法
もし initial_root_password
の値が削除された後にパスワードを忘れてしまった場合、以下のコマンドでリセットできます。
docker exec -it <コンテナID> gitlab-rails console -e production
次に、以下のコマンドを実行し、新しいパスワードを設定します。
user = User.find_by(username: 'root')
user.password = 'NewSecurePassword123'
user.password_confirmation = 'NewSecurePassword123'
user.save!
5. GitLab データのバックアップと復元
GitLab CE を運用するうえで、データのバックアップは重要 です。誤操作や障害に備えて、定期的にバックアップを取得し、必要に応じて復元できるようにしておきましょう。
バックアップの作成方法
- GitLab コンテナの ID を確認
docker ps
CONTAINER ID
をメモしておきます。 - バックアップを作成以下のコマンドを実行すると、GitLab の設定、リポジトリ、データベースなどをバックアップできます。
docker exec -t <コンテナID> gitlab-backup create
例:
docker exec -t 123abc456 gitlab-backup create
実行すると、
/var/opt/gitlab/backups/
に.tar
ファイルが作成されます。 - ホスト側にバックアップファイルをコピー
docker cp <コンテナID>:/var/opt/gitlab/backups ./
これでホストマシンにバックアップデータが保存されます。
バックアップデータの保存場所
GitLab のバックアップファイルは、デフォルトで次のディレクトリに保存されます。
データの種類 | コンテナ内の保存場所 | ホスト側の保存場所 (volumes 設定) |
---|---|---|
リポジトリやデータ | /var/opt/gitlab |
./data |
設定ファイル | /etc/gitlab |
./config |
ログファイル | /var/log/gitlab |
./logs |
バックアップデータ | /var/opt/gitlab/backups/ |
./data/backups/ |
バックアップの復元方法
- GitLab のコンテナを停止
docker-compose down
- バックアップファイルを
/var/opt/gitlab/backups/
にコピーもしホスト側にバックアップファイルがある場合、以下のようにコンテナ内へコピーできます。docker cp ./data/backups/xxxxx_gitlab_backup.tar <コンテナID>:/var/opt/gitlab/backups/
xxxxx_gitlab_backup.tar
はバックアップファイルの名前に置き換えてください。 - GitLab を復元モードで起動
docker-compose up -d
- バックアップを復元
docker exec -it <コンテナID> gitlab-backup restore BACKUP=xxxxx
xxxxx
はバックアップファイル名の前方部分です(例:1703010123_2025_02_28_10.0.0
)。 - 権限の修正
docker exec -it <コンテナID> chown -R git:git /var/opt/gitlab/backups
- GitLab を再起動
docker restart <コンテナID>
バックアップの自動化(推奨)
定期的なバックアップを自動化するには、cron
を利用します。
- **cron ジョブを作成(ホストマシン上)**例:毎日深夜 3 時にバックアップを取得する場合これで、毎日自動でバックアップが作成されます。
crontab -e
0 3 * * * docker exec -t <コンテナID> gitlab-backup create
6. Let’s Encrypt を使った SSL 設定
GitLab を安全に運用するために、Let’s Encrypt を利用した無料の SSL 証明書を設定 する方法を解説します。
1. external_url
を HTTPS に設定
docker-compose.yml
の GITLAB_OMNIBUS_CONFIG
で、external_url
を https://
で始まる URL に変更します。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '<https://gitlab.example.com>'
gitlab.example.com
の部分は、実際に使用するドメインに変更してください。- このドメインは インターネットからアクセス可能 である必要があります。
2. Let’s Encrypt の自動証明書発行を有効化
GitLab には Let’s Encrypt を使って自動で SSL 証明書を取得・更新する機能 があります。
これを有効化するには、gitlab.rb
の設定を変更する必要があります。
まず、GitLab コンテナ内に入ります。
docker exec -it <コンテナID> /bin/bash
次に、設定ファイルを編集します。
nano /etc/gitlab/gitlab.rb
以下の行を探して、有効化(true
に設定)します。
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['your-email@example.com']
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = 3
letsencrypt['auto_renew_day_of_month'] = "*/7"
設定の意味:
letsencrypt['enable'] = true
→ Let’s Encrypt を有効化letsencrypt['contact_emails'] = ['your-email@example.com']
→ 証明書の更新に関する通知を受け取るメールアドレスletsencrypt['auto_renew'] = true
→ 証明書の自動更新を有効化letsencrypt['auto_renew_hour'] = 3
→ 毎日 午前3時 に更新を試みるletsencrypt['auto_renew_day_of_month'] = "*/7"
→ 7日ごと に更新を試みる
3. 設定を適用して SSL 証明書を取得
- 設定を適用(GitLab の再構成)
gitlab-ctl reconfigure
- これにより、Let’s Encrypt の証明書が取得され、GitLab の設定が更新されます。
- GitLab を再起動
gitlab-ctl restart
4. ファイアウォール設定の確認
Let’s Encrypt で SSL 証明書を取得するには、以下の ポートが開放 されている必要があります。
プロトコル | ポート | 説明 |
---|---|---|
HTTP | 80 | 証明書発行時に必要 |
HTTPS | 443 | GitLab へのアクセス用 |
もしサーバーで ufw
を使っている場合、以下のコマンドでポートを開放できます。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
5. 証明書の更新を手動で実行する場合
Let’s Encrypt の証明書は 90日ごとに有効期限が切れる ため、自動更新がうまく動作しない場合は、手動で更新できます。
gitlab-ctl renew-le-certs
更新後、GitLab を再起動してください。
gitlab-ctl restart
6. 証明書のトラブルシューティング
証明書が取得できない場合
Let’s Encrypt の証明書が取得できない場合、まずログを確認します。
cat /var/log/gitlab/letsencrypt/letsencrypt.log
よくあるエラーと対策:
- ポート 80 が開放されていない →
sudo ufw allow 80/tcp
で開放 external_url
のドメインが正しくない →gitlab.example.com
の設定を確認- DNS 設定が正しくない →
ping gitlab.example.com
でドメインが正しく解決されるか確認
7. docker-compose.yml の適用方法
ここでは、GitLab CE を Docker Compose を使って実際に起動し、動作を確認する方法を説明します。
1. docker-compose.yml
の作成
まず、適当なディレクトリを作成し、そこで docker-compose.yml
を作成します。
mkdir gitlab-docker
cd gitlab-docker
nano docker-compose.yml
そして、前章で説明した docker-compose.yml
の内容を貼り付けて保存 (Ctrl + X → Y → Enter
) してください。
2. GitLab コンテナの起動
作成した docker-compose.yml
を適用し、GitLab コンテナを起動します。
docker-compose up -d
オプションの意味:
d
(デタッチドモード) → バックグラウンドで実行
このコマンドを実行すると、GitLab の Docker イメージがダウンロードされ、コンテナが起動します。
3. GitLab コンテナの状態を確認
コンテナが正しく起動しているか確認します。
docker ps
以下のような出力が表示されれば、コンテナが正常に動作しています。
CONTAINER ID IMAGE STATUS PORTS
abc123456789 gitlab/gitlab-ce:latest Up 2 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22->22/tcp
もし STATUS
に Restarting
と表示されている場合は、コンテナのログを確認してください。
docker logs -f <コンテナID>
4. GitLab にアクセス
- ブラウザを開く
http://localhost
にアクセス(またはexternal_url
に設定した URL)。- Let’s Encrypt を設定した場合は
https://gitlab.example.com
でアクセス。
- 初回ログイン
- ユーザー名:
root
- パスワード:
docker exec
コマンドで確認(前章参照)
- ユーザー名:
5. GitLab の設定を変更したい場合
docker-compose.yml
を変更した後に適用するには、以下の手順を実行します。
- コンテナを停止
docker-compose down
- 設定を変更(例:
docker-compose.yml
の編集) - コンテナを再起動
docker-compose up -d
変更が反映されたかどうかを docker ps
で確認してください。
6. GitLab コンテナの停止・削除
GitLab を一時的に停止する場合は、以下のコマンドを使用します。
docker-compose stop
完全に削除したい場合は、以下のコマンドを実行します。
docker-compose down -v
v
オプションをつけると、ボリュームも削除される ため、すべてのデータが消えます(注意!)。
8. ポート変更のカスタマイズ
デフォルトでは、GitLab は以下のポートを使用します。
ホストのポート | コンテナのポート | 用途 |
---|---|---|
80:80 |
80 | HTTP(Web インターフェース) |
443:443 |
443 | HTTPS(Web インターフェース) |
22:22 |
22 | SSH(Git 操作) |
しかし、ホスト側でこれらのポートをすでに別のサービスが使用している場合 は、ポート番号を変更する必要があります。
1. docker-compose.yml
のポート設定を変更する
たとえば、以下のようにポートを変更すると、
- HTTP は
8080
- HTTPS は
8443
- SSH は
10022
でアクセスできるようになります。
ports:
- "8080:80"
- "8443:443"
- "10022:22"
2. GitLab の external_url
を更新
ポートを変更した場合、external_url
も変更が必要 です。
たとえば、HTTP ポートを 8080
に変更した場合、external_url
を以下のように指定します。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '<http://localhost:8080>'
HTTPS の場合(ポート 8443
)
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url '<https://gitlab.example.com:8443>'
3. GitLab を再起動して変更を適用
設定を変更したら、GitLab のコンテナを再起動します。
docker-compose down
docker-compose up -d
起動後、ブラウザで http://localhost:8080
(または https://gitlab.example.com:8443
) にアクセスして動作確認を行います。
4. SSH での接続設定を変更
SSH のポート (22
) を 10022
に変更した場合、Git 操作時の SSH 設定も変更する必要があります。
SSH で GitLab に接続
通常の SSH では、GitLab に git clone
するときに以下のように記述します。
git clone git@gitlab.example.com:myrepo.git
しかし、ポートを 10022
に変更した場合、明示的にポートを指定する必要があります。
git clone ssh://git@gitlab.example.com:10022/myrepo.git
SSH 設定を変更して毎回ポート指定しなくて済むようにする
ホームディレクトリの ~/.ssh/config
に以下の設定を追加します。
Host gitlab.example.com
User git
Port 10022
これにより、通常通り git clone git@gitlab.example.com:myrepo.git
の形式でアクセスできるようになります。
9. まとめ
本記事では、Docker Compose を使用して GitLab CE を構築・運用する方法 について詳しく解説しました。
📌 GitLab コンテナの構築手順
docker-compose.yml
を作成- GitLab CE の公式 Docker イメージを使用
- 設定ファイル、データ、ログを永続化
external_url
の指定でアクセス URL を設定
- コンテナの起動と管理
docker-compose up -d # GitLab を起動 docker ps # コンテナの動作確認
http://localhost
またはexternal_url
にアクセス- 初回ログイン時は
root
ユーザーのパスワードを取得
- バックアップと復元
- GitLab のデータを定期的にバックアップ
docker exec -t <コンテナID> gitlab-backup create
- 復元時は
gitlab-backup restore
を実行
- Let’s Encrypt で SSL 設定
letsencrypt['enable'] = true
で自動証明書発行gitlab-ctl reconfigure
で適用
- ポートのカスタマイズ
80:80
→8080:80
など、環境に合わせて変更- SSH ポート (
22
) を変更する場合は~/.ssh/config
を設定
🔹 GitLab 運用のポイント
✅ 永続化の設定を確認
- 設定ファイル (
./config
)、データ (./data
)、ログ (./logs
) のマウントを適切に行う
✅ バックアップを定期的に取得
cron
を設定して、定期的にバックアップを自動取得する
✅ SSL 設定でセキュアな環境を構築
Let's Encrypt
を利用し、HTTPS を有効化- ファイアウォール設定 (
80, 443
) を確認
✅ ポートの競合を避ける
docker-compose.yml
のports
を調整して、既存のサービスと衝突しないようにする
✅ SSH での接続を簡単にする
~/.ssh/config
にカスタムポート設定を追加
🎯 こんな人におすすめの設定
💡 「手軽に GitLab を試したい!」
→ デフォルト設定で docker-compose up -d
するだけ!
💡 「独自ドメイン & HTTPS で運用したい!」
→ external_url
を変更し、Let’s Encrypt で証明書を取得
💡 「サーバー上で本番運用したい!」
→ 永続化設定 + 自動バックアップ + SSH ポート変更 を導入
コメント