GitLab Dockerイメージ

GitLab DockerイメージはGitLabのモノリシックなイメージで、必要なサービスを一つのコンテナで実行します。

GitLab CEとEEはどちらもDocker Hubにあります:

Note:GitLabをKubernetesにインストールするには、GitLab Helm Chartsをご覧ください。

以下の例では、GitLab CE のイメージを使用しています。GitLab CE の代わりに GitLab EE を使用するには、イメージ名をgitlab/gitlab-ee:latestに置き換えてください。

最新のRCイメージを使いたい場合は、GitLab CEにはgitlab/gitlab-ce:rc 、GitLab EEにはgitlab/gitlab-ee:rc

Dockerのインストールが必要ですので、公式のインストールドキュメントをご覧ください。

注意:Docker for Windowsは公式にはサポートされていません。 ボリューム権限に関する既知のイシューや、その他の未知の問題がある可能性があります。 Docker for Windowsで実行しようとしている場合、他のユーザに助けを求めるためのコミュニティリソース(IRC、フォーラムなど)へのリンクについては、ヘルプを取得するページを参照してください。

ボリュームの場所の設定

他のすべてを設定する前に、設定、ログ、およびデータファイルが存在するディレクトリを指す新しい環境変数$GITLAB_HOMEを設定します。 ディレクトリが存在し、適切な権限が付与されていることを確認してください。

Linuxユーザーの場合は、パスを/srv/gitlabに設定してください:

export GITLAB_HOME=/srv/gitlab

MacOSユーザーの場合は、ユーザーの$HOME/gitlab ディレクトリを使用します:

export GITLAB_HOME=$HOME/gitlab

GitLabコンテナは、永続的なデータを保存するためにホストにマウントされたボリュームを使用します:

所在地 コンテナの場所 使用方法
$GITLAB_HOME/data /var/opt/gitlab アプリケーションデータ保存用
$GITLAB_HOME/logs /var/log/gitlab ログ保存用
$GITLAB_HOME/config /etc/gitlab GitLabの設定ファイルを保存します。

インストール

GitLab Dockerイメージは複数の方法で実行できます:

Docker Engineを使ったGitLabのインストール

GITLAB_HOME 変数を設定したら、イメージを実行できます:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

GitLab CE コンテナをダウンロードして起動し、SSH、HTTP、HTTPS へのアクセスに必要なポートを公開します。 GitLab のデータはすべて$GITLAB_HOMEのサブディレクトリに格納されます。 コンテナはシステムの再起動後に自動的にrestart になります。

SELinuxを使用している場合は、代わりにこれを実行してください:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:latest

これにより、Dockerプロセスがマウントされたボリュームに設定ファイルを作成するのに十分な権限を持っていることが保証されます。

注意:Kerberosインテグレーションを使う場合は、Kerberosポート(例:--publish 8443:8443)も公開する必要があります。 これを行わないと、Kerberos経由でのGitオペレーションができなくなります。

初期化プロセスには長い時間がかかることがあります。 このプロセスを追跡するには

sudo docker logs -f gitlab

コンテナを起動したら、gitlab.example.com (macOSでboot2dockerを使った場合はhttp://192.168.59.103 )にアクセスします。Dockerコンテナがクエリに応答し始めるまで、しばらく時間がかかるかもしれません。 GitLabに初めてアクセスすると、管理者パスワードを設定するよう求められます。変更したら、ユーザー名root 、設定したパスワードでログインできます。

Docker Composerを使ったGitLabのインストール

Docker Composerを使えば、DockerベースのGitLabインストールを簡単に設定、インストール、アップグレードできます:

  1. Docker Composerをインストールします。
  2. docker-compose.yml ファイルを作成します(または例をダウンロードします):

    web:
      image: 'gitlab/gitlab-ce:latest'
      restart: always
      hostname: 'gitlab.example.com'
      environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'https://gitlab.example.com'
          # Add any other gitlab.rb configuration here, each on its own line
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
      volumes:
        - '$GITLAB_HOME/config:/etc/gitlab'
        - '$GITLAB_HOME/logs:/var/log/gitlab'
        - '$GITLAB_HOME/data:/var/opt/gitlab'
    
  3. docker-compose.yml と同じディレクトリにいることを確認し、GitLab を起動します:

    docker-compose up -d
    
ヒント:GITLAB_OMNIBUS_CONFIG 変数がどのように機能するかについては、「Docker コンテナの事前設定」のセクションをお読みください。

以下は、GitLabをカスタムHTTPポートとカスタムSSHポートで動作させた、docker-compose.yml の例です。GITLAB_OMNIBUS_CONFIG の変数がports のセクションと一致していることに注目してください:

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.example.com:8929'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
  ports:
    - '8929:8929'
    - '2224:22'
  volumes:
    - '$GITLAB_HOME/config:/etc/gitlab'
    - '$GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'

これは--publish 8929:8929 --publish 2224:22を使うのと同じです。

GitLab を Docker swarm モードでインストールします。

Docker swarmモードを使えば、DockerベースのGitLabインストールを簡単に設定し、swarmクラスターにデプロイすることができます。

swarmモードでは、DockerシークレットとDockerコンフィグを活用して、効率的かつ安全にGitLabインスタンスをデプロイすることができます。 シークレットを使えば、初期rootパスワードを環境変数として公開することなく安全に渡すことができます。 コンフィグを使えば、GitLabイメージを可能な限り汎用的なものに保つことができます。

ここでは、GitLab を 4 つのランナーでスタックとしてデプロイし、シークレットとコンフィグを使う例を示します:

  1. Docker swarmをセットアップします。
  2. docker-compose.yml ファイルを作成します:

    version: "3.6"
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        ports:
          - "22:22"
          - "80:80"
          - "443:443"
        volumes:
          - $GITLAB_HOME/data:/var/opt/gitlab
          - $GITLAB_HOME/logs:/var/log/gitlab
          - $GITLAB_HOME/config:/etc/gitlab
        environment:
          GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')"
        configs:
          - source: gitlab
            target: /omnibus_config.rb
        secrets:
          - gitlab_root_password
      gitlab-runner:
        image: gitlab/gitlab-runner:alpine
        deploy:
          mode: replicated
          replicas: 4
    configs:
      gitlab:
        file: ./gitlab.rb
    secrets:
      gitlab_root_password:
        file: ./root_password.txt
    

    簡略化のため、network の設定は省略されています。詳細については、Composerファイルの公式リファレンスを参照してください。

  3. gitlab.rb ファイルを作成します:

    external_url 'https://my.domain.com/'
    gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password')
    
  4. root_password.txt ファイルを作成します:

    MySuperSecretAndSecurePass0rd!
    
  5. docker-compose.yml と同じディレクトリにいることを確認して実行してください:

    docker stack deploy --compose-file docker-compose.yml mystack
    

設定

このコンテナは公式の Omnibus GitLab パッケージを使用しているので、すべての設定は独自の設定ファイル/etc/gitlab/gitlab.rbで行います。

GitLab の設定ファイルにアクセスするには、実行中のコンテナのコンテキストでシェルセッションを開始します。 これにより、すべてのディレクトリをブラウズしたりお気に入りのテキストエディタを使ったりできるようになります:

sudo docker exec -it gitlab /bin/bash

/etc/gitlab/gitlab.rbを編集することもできます:

sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb

/etc/gitlab/gitlab.rb を開いたら、external_url が有効な URL を指すように設定してください。

GitLab DockerイメージにはSMTPサーバーがインストールされていないため、GitLabからのメールを受信するにはSMTPの設定を行う必要があります。HTTPSを有効にすることにも興味があるかもしれません。

必要な変更をすべて行ったら、GitLab を再設定するためにコンテナを再起動する必要があります:

sudo docker restart gitlab
注意:GitLabはコンテナが起動するたびに自分自身を再構成します。

GitLabの設定に関するオプションについては、設定ドキュメントを確認してください。

Dockerコンテナの事前設定

Dockerの実行コマンドに環境変数GITLAB_OMNIBUS_CONFIG を追加することで、GitLab Dockerイメージを事前に設定することができます。この変数には任意の設定を含めることがgitlab.rb でき、 gitlab.rbコンテナのファイルをgitlab.rb ロードする前に評価 gitlab.rbされます。これにより、GitLabの内部URLの設定や、データベースの設定、その他のオプションをOmnibus GitLabテンプレートから簡単に設定することができます。

注:GITLAB_OMNIBUS_CONFIG に含まれる設定は、GITLAB_OMNIBUS_CONFIG コンフィギュレーション・ファイルには書き込まれず、ロード時に評価されます。

コンテナの起動時に外部URLを設定し、LFSを有効にする例を示します:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

docker run コマンドを実行するたびに、このGITLAB_OMNIBUS_CONFIG オプションを GITLAB_OMNIBUS_CONFIG指定する必要があることに注意してくださいGITLAB_OMNIBUS_CONFIGGITLAB_OMNIBUS_CONFIG

GitLab のタグ付きバージョンを使用します。

GitLab Dockerイメージのタグ付きバージョンも提供されています。 利用可能なすべてのタグを見るには、こちらをご覧ください:

特定のタグ付きバージョンを使うには、gitlab/gitlab-ce:latest を実行したい GitLab バージョンに置き換えてください。例えば、gitlab/gitlab-ce:12.1.3-ce.0.

GitLabを公開IPアドレスで実行します。

--publish フラグを変更することで、Docker があなたの IP アドレスを使用し、すべてのトラフィックを GitLab コンテナに転送するようにすることができます。

IP198.51.100.1で GitLab CE を公開するには:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 198.51.100.1:443:443 \
  --publish 198.51.100.1:80:80 \
  --publish 198.51.100.1:22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

その後、GitLabインスタンスにhttp://198.51.100.1/https://198.51.100.1/

異なるポートでGitLabを公開

GitLabはコンテナ内のいくつかのポートを占有します。

80 (HTTP) や443 (HTTPS)と異なるホスト・ポートを使用したい場合は、docker run コマンドに--publish ディレクティブを別途追加する必要があります。

例えば、ウェブインターフェースをホストのポート8929に、SSHサービスをポート2289に公開します:

  1. 次のdocker run

    sudo docker run --detach \
      --hostname gitlab.example.com \
      --publish 8929:8929 --publish 2289:22 \
      --name gitlab \
      --restart always \
      --volume $GITLAB_HOME/config:/etc/gitlab \
      --volume $GITLAB_HOME/logs:/var/log/gitlab \
      --volume $GITLAB_HOME/data:/var/opt/gitlab \
      gitlab/gitlab-ce:latest
    
    注意:ポートを公開するフォーマットはhostPort:containerPortです。 Dockerのドキュメントで、受信ポートの公開について詳しく説明しています。
  2. 実行中のコンテナを入力します:

    sudo docker exec -it gitlab /bin/bash
    
  3. エディタで/etc/gitlab/gitlab.rb を開き、external_urlを設定します:

    # For HTTP
    external_url "http://gitlab.example.com:8929"
    
    or
    
    # For HTTPS (notice the https)
    external_url "https://gitlab.example.com:8929"
    
    注意:このURLで指定されるポートは、Dockerによってホストに公開されるポートと一致する必要があります。 さらに、NGINXのリッスンポートがnginx['listen_port']で明示的に設定されていない場合は、external_urlから取得されます。 詳細については、NGINXのドキュメントを参照してください。
  4. gitlab_shell_ssh_portを設定します:

    gitlab_rails['gitlab_shell_ssh_port'] = 2289
    
  5. 最後に GitLab を再設定します:

    gitlab-ctl reconfigure
    

上記の例に従うと、GitLab にウェブブラウザから<hostIP>:8929 でアクセスし、SSH を使って2289というポートでプッシュできるようになります。

異なるポートを使用するdocker-compose.yml の例は、DockerComposerセクションにあります。

アップデート

ほとんどの場合、GitLabのアップデートは最新のDockerイメージタグをダウンロードするのと同じくらい簡単です。

Docker Engineを使ったGitLabのアップデート

Docker Engineを使ってインストールしたGitLabをアップデートするには:

  1. バックアップを取ってください。
  2. 実行中のコンテナを停止します:

    sudo docker stop gitlab
    
  3. 既存のコンテナを取り外します:

    sudo docker rm gitlab
    
  4. 新しいイメージをプルします。 例えば、最新のGitLab CEイメージです:

    sudo docker pull gitlab/gitlab-ce:latest
    
  5. 前回指定したオプションでコンテナをもう一度作成します:

    sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume $GITLAB_HOME/config:/etc/gitlab \
    --volume $GITLAB_HOME/logs:/var/log/gitlab \
    --volume $GITLAB_HOME/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
    

最初の実行で、GitLabは自分自身を再設定し、更新します。

Note:メジャーバージョン間のアップグレードの際は、GitLabのアップグレードに関する推奨事項を参照してください。

Docker composer を使った GitLab のアップデート

Docker Composerを使ってインストールしたGitLabをアップデートするには:

  1. バックアップを取ってください。
  2. 最新のリリースをダウンロードし、GitLabインスタンスをアップデートしてください:

    docker-compose pull
    docker-compose up -d
    
    注:代わりにタグを使っている場合は、まず](#use-tagged-versions-of-gitlab)を編集する必要があります。

GitLabのバックアップ

でGitLabバックアップを作成できます:

docker exec -t <container name> gitlab-backup create

GitLabのバックアップと復元方法についてはこちらをご覧ください。

トラブルシューティング

以下の情報は、Omnibus GitLabとDockerを使用して問題が発生した場合に役立ちます。

潜在的な問題の診断

コンテナのログを読みます:

sudo docker logs gitlab

実行中のコンテナに入ります:

sudo docker exec -it gitlab /bin/bash

コンテナ内では、通常のOmnibusインストールと同じように GitLab コンテナを管理できます。

500 内部エラー

Dockerイメージを更新する際に、すべてのPagesが500 のページを表示するイシューが発生する場合があります。この問題が発生した場合は、コンテナを再起動して問題の修正を試みてください:

sudo docker restart gitlab

権限の問題

古いGitLab Dockerイメージからアップデートする際、権限の問題が発生することがあります。 これは、以前のイメージのユーザーが正しく保存されていない場合に起こります。 全てのファイルの権限を修正するスクリプトがあります。

コンテナを修正するには、update-permissions を実行し、その後コンテナを再起動します:

sudo docker exec gitlab update-permissions
sudo docker restart gitlab

Windows/MacError executing action run on resource ruby_block[directory resource: /data/GitLab]

このエラーは、WindowsまたはMac上のVirtualBoxでDocker Toolboxを使用し、Dockerボリュームを使用している場合に発生します。/c/Users ボリュームはVirtualBoxの共有フォルダとしてマウントされており、すべてのPOSIXファイルシステム機能をサポートしていません。ディレクトリの所有権と権限は再マウントしないと変更できず、GitLabは失敗します。

私たちの推奨は、Docker Toolboxを使用する代わりに、お使いのプラットフォームのネイティブDockerインストールを使用するように切り替えることです。

ネイティブのDockerインストール(Windows 10 Home EditionまたはWindows 7/8)を使用できない場合は、Docker Toolboxのboot2docker用に、VirtualBox共有の代わりにNFSマウントをセットアップすることもできます。

Linux ACLのイシュー

DockerホストでファイルACLを使用している場合、GitLabが動作するためにはdocker グループがボリュームにフルアクセスする必要があります:

getfacl $GITLAB_HOME

# file: $GITLAB_HOME
# owner: XXXX
# group: XXXX
user::rwx
group::rwx
group:docker:rwx
mask::rwx
default:user::rwx
default:group::rwx
default:group:docker:rwx
default:mask::rwx
default:other::r-x

これらが正しくない場合は、次のように設定してください:

sudo setfacl -mR default:group:docker:rwx $GITLAB_HOME
注:** がデフォルトのグループです。これを変更した場合は、それに応じてコマンドを更新してください。