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 psCONTAINER 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 psCONTAINER 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=xxxxxxxxxxはバックアップファイル名の前方部分です(例: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 -e0 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 ポート変更 を導入
  
  
  
  

コメント