正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

DockerコンテナにGitLabをインストールする

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

DockerコンテナにGitLabをインストールするには、Docker Compose、Docker Engine、またはDocker Swarmモードを使用します。

前提要件:

  • Docker for Windowsではない、動作するDockerインストールが必要です。Docker for Windowsは、イメージにボリューム権限に関する既知の互換性の問題やその他の不明な問題があるため、公式にはサポートされていません。Docker for Windowsで実行しようとしている場合は、ヘルプページを参照してください。このページには、他のユーザーに助けを求めることができるコミュニティリソース(IRCやフォーラムなど)へのリンクが含まれています。
  • PostfixやSendmailなどのメール転送エージェント(MTA)が必要です。GitLabイメージにはMTAは含まれていません。MTAは別のコンテナにインストールできます。GitLabと同じコンテナにMTAをインストールすることもできますが、アップグレードまたは再起動のたびにMTAを再インストールする必要がでてきます。
  • GitLab DockerイメージをKubernetesにデプロイしないでください。単一障害点が発生してしまいます。GitLabをKubernetesにデプロイする場合は、代わりにGitLab HelmチャートまたはGitLab Operatorを使用してください。
  • Dockerインストール用に、有効で外部からアクセス可能なホスト名が必要です。localhostは使用しないでください。

SSHポートを設定する

デフォルトでは、GitLabはポート22を使用してSSH経由でGitとやり取りします。ポート22を使用するには、このセクションをスキップしてください。

別のポートを使用するには、次のいずれかを実行します。

  • 今すぐサーバーのSSHポートを変更します(推奨)。すると、SSHクローンURLに新しいポート番号は不要になります。

    ssh://git@gitlab.example.com/user/project.git
  • インストール後にGitLab Shell SSHポートを変更します。すると、SSHクローンURLには設定されたポート番号が含まれます。

    ssh://git@gitlab.example.com:<portNumber>/user/project.git

サーバーのSSHポートを変更するには:

  1. エディタで/etc/ssh/sshd_configを開き、SSHポートを変更します。

    Port = 2424
  2. ファイルを保存し、SSHサービスを再起動します。

    sudo systemctl restart ssh
  3. SSH経由で接続できることを確認します。新しいターミナルセッションを開き、新しいポートを使用してサーバーにSSH接続します。

ボリュームのディレクトリを作成する

Gitalyデータをホスティングするボリュームには、特定の推奨設定があります。NFSベースのファイルシステムはパフォーマンスのイシューを引き起こす可能性があるため、EFSは推奨されません

設定ファイル、ログファイル、およびデータファイルのディレクトリを作成します。ディレクトリは、ユーザーのホームディレクトリ(~/gitlab-dockerなど)または/srv/gitlabなどのディレクトリに配置できます。

  1. ディレクトリを作成します。

    sudo mkdir -p /srv/gitlab
  2. root以外のユーザーでDockerを実行している場合は、新しいディレクトリに対する適切な権限をユーザーに付与します。

  3. 作成したディレクトリへのパスを設定する新しい環境変数$GITLAB_HOMEを設定します。

    export GITLAB_HOME=/srv/gitlab
  4. オプションで、今後のすべてのターミナルセッションに適用されるように、ShellのプロファイルにGITLAB_HOME環境変数を追加できます。

    • Bash: ~/.bash_profile
    • ZSH: ~/.zshrc

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

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

使用するGitLabのバージョンとエディションを見つける

本番環境では、デプロイを特定のGitLabバージョンに固定する必要があります。利用可能なバージョンを確認し、Dockerタグページで使用するバージョンを選択します。

タグ名は次の要素で構成されています。

gitlab/gitlab-ee:<version>-ee.0

<version>にはGitLabのバージョンを指定します(例: 16.5.3)。バージョン名には常に<major>.<minor>.<patch>が含まれています。

テスト目的では、最新の安定版リリースを指すlatestタグ(例: gitlab/gitlab-ee:latest)を使用できます。

次の例では、安定版のEnterprise Editionバージョンを使用します。Release Candidate (RC)またはnightlyイメージを使用する場合は、代わりにgitlab/gitlab-ee:rcまたはgitlab/gitlab-ee:nightlyを使用してください。

Community Editionをインストールするには、eeceに置き換えます。

インストール

GitLab Dockerイメージは、次を使用して実行できます。

Docker Composeを使用してGitLabをインストールする

Docker Composeを使用すると、DockerベースのGitLabインストールを設定、インストール、およびアップグレードできます。

  1. Docker Composeをインストールします。

  2. docker-compose.ymlファイルを作成します。次に例を示します。

    services:
      gitlab:
        image: gitlab/gitlab-ee:<version>-ee.0
        container_name: gitlab
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            # Add any other gitlab.rb configuration here, each on its own line
            external_url 'https://gitlab.example.com'
        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'
        shm_size: '256m'

    GITLAB_OMNIBUS_CONFIG変数の仕組みについては、Dockerコンテナの事前設定セクションを参照してください。

    これは、カスタムHTTPおよびSSHポートで実行されているGitLabを使用した別のdocker-compose.ymlの例です。GITLAB_OMNIBUS_CONFIG変数がportsセクションと一致することに注意してください。

    services:
      gitlab:
        image: gitlab/gitlab-ee:<version>-ee.0
        container_name: gitlab
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://gitlab.example.com:8929'
            gitlab_rails['gitlab_shell_ssh_port'] = 2424
        ports:
          - '8929:8929'
          - '443:443'
          - '2424:22'
        volumes:
          - '$GITLAB_HOME/config:/etc/gitlab'
          - '$GITLAB_HOME/logs:/var/log/gitlab'
          - '$GITLAB_HOME/data:/var/opt/gitlab'
        shm_size: '256m'

    この設定は、--publish 8929:8929 --publish 2424:22を使用するのと同じです。

  3. docker-compose.ymlと同じディレクトリで、GitLabを起動します。

    docker compose up -d

Docker Engineを使用してGitLabをインストールする

Docker Engineを使用してGitLabをインストールすることもできます。

  1. GITLAB_HOME変数を設定している場合は、要件を満たすようにディレクトリを調整し、イメージを実行します。

    • SELinuxを使用していない場合は、次のコマンドを実行します。

      sudo docker run --detach \
        --hostname gitlab.example.com \
        --env GITLAB_OMNIBUS_CONFIG="external_url 'http://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 \
        --shm-size 256m \
        gitlab/gitlab-ee:<version>-ee.0

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

    • SELinuxを使用している場合は、代わりにこれを実行します。

      sudo docker run --detach \
        --hostname gitlab.example.com \
        --env GITLAB_OMNIBUS_CONFIG="external_url 'http://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 \
        --shm-size 256m \
        gitlab/gitlab-ee:<version>-ee.0

      このコマンドは、Dockerプロセスに、マウントされたボリュームに設定ファイルを作成するのに十分な権限があることを保証します。

  2. Kerberosインテグレーションを使用している場合は、Kerberosポートも公開する必要があります(例: --publish 8443:8443)。そうしないと、Kerberosを使用したGitオペレーションを実行できません。初期化プロセスには時間がかかる場合があります。このプロセスは、次のコマンドで追跡できます。

    sudo docker logs -f gitlab

    コンテナの起動後、gitlab.example.comにアクセスできます。Dockerコンテナがクエリへの応答を開始するまでに時間がかかる場合があります。

  3. GitLab URLにアクセスし、ユーザー名rootと次のコマンドからのパスワードでサインインします。

    sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

パスワードファイルは、最初のコンテナ再起動後、24時間後に自動的に削除されます。

Docker Swarmモードを使用してGitLabをインストールする

Docker Swarmモードを使用すると、 Swarmクラスター内のDockerでGitLabインストールを設定およびデプロイできます。

Swarmモードでは、DockerシークレットおよびDocker設定を利用して、GitLabインスタンスを効率的かつ安全にデプロイできます。シークレットを使用すると、初期ルートパスワードを環境変数として公開せずに安全に渡すことができます。設定は、GitLabイメージを可能な限り汎用的に保つのに役立ちます。

次に、シークレットと設定を使用して、4つのRunnerをスタックとしてGitLabをデプロイする例を示します。

  1. Docker Swarmをセットアップします。

  2. docker-compose.ymlファイルを作成します。

    services:
      gitlab:
        image: gitlab/gitlab-ee:<version>-ee.0
        container_name: gitlab
        restart: always
        hostname: 'gitlab.example.com'
        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
        shm_size: '256m'
        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設定を除外しています。詳細については、公式のComposeファイルリファレンスを参照してください。

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

    external_url 'https://my.domain.com/'
    gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "")
  4. パスワードを含むroot_password.txtという名前のファイルを作成します。

    MySuperSecretAndSecurePassw0rd!
  5. docker-compose.ymlと同じディレクトリにいることを確認し、次を実行します。

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

Dockerをインストールしたら、GitLabインスタンスを設定する必要があります。