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ポートを変更するには:
エディタで
/etc/ssh/sshd_configを開き、SSHポートを変更します。Port = 2424ファイルを保存し、SSHサービスを再起動します。
sudo systemctl restart sshSSH経由で接続できることを確認します。新しいターミナルセッションを開き、新しいポートを使用してサーバーにSSH接続します。
ボリュームのディレクトリを作成する
Gitalyデータをホスティングするボリュームには、特定の推奨設定があります。NFSベースのファイルシステムはパフォーマンスのイシューを引き起こす可能性があるため、EFSは推奨されません。
設定ファイル、ログファイル、およびデータファイルのディレクトリを作成します。ディレクトリは、ユーザーのホームディレクトリ(~/gitlab-dockerなど)または/srv/gitlabなどのディレクトリに配置できます。
ディレクトリを作成します。
sudo mkdir -p /srv/gitlabroot以外のユーザーでDockerを実行している場合は、新しいディレクトリに対する適切な権限をユーザーに付与します。作成したディレクトリへのパスを設定する新しい環境変数
$GITLAB_HOMEを設定します。export GITLAB_HOME=/srv/gitlabオプションで、今後のすべてのターミナルセッションに適用されるように、Shellのプロファイルに
GITLAB_HOME環境変数を追加できます。- Bash:
~/.bash_profile - ZSH:
~/.zshrc
- Bash:
GitLabコンテナは、ホストマウントされたボリュームを使用して永続データを保存します。
| ローカルの場所 | コンテナの場所 | 使用法 |
|---|---|---|
$GITLAB_HOME/data | /var/opt/gitlab | アプリケーションデータを保存。 |
$GITLAB_HOME/logs | /var/log/gitlab | ログを保存。 |
$GITLAB_HOME/config | /etc/gitlab | GitLab設定ファイルを保存。 |
使用する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をインストールするには、eeをceに置き換えます。
インストール
GitLab Dockerイメージは、次を使用して実行できます。
Docker Composeを使用してGitLabをインストールする
Docker Composeを使用すると、DockerベースのGitLabインストールを設定、インストール、およびアップグレードできます。
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を使用するのと同じです。docker-compose.ymlと同じディレクトリで、GitLabを起動します。docker compose up -d
Docker Engineを使用してGitLabをインストールする
Docker Engineを使用して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 \ --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プロセスに、マウントされたボリュームに設定ファイルを作成するのに十分な権限があることを保証します。
Kerberosインテグレーションを使用している場合は、Kerberosポートも公開する必要があります(例:
--publish 8443:8443)。そうしないと、Kerberosを使用したGitオペレーションを実行できません。初期化プロセスには時間がかかる場合があります。このプロセスは、次のコマンドで追跡できます。sudo docker logs -f gitlabコンテナの起動後、
gitlab.example.comにアクセスできます。Dockerコンテナがクエリへの応答を開始するまでに時間がかかる場合があります。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をデプロイする例を示します。
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ファイルリファレンスを参照してください。gitlab.rbファイルを作成します。external_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "")パスワードを含む
root_password.txtという名前のファイルを作成します。MySuperSecretAndSecurePassw0rd!docker-compose.ymlと同じディレクトリにいることを確認し、次を実行します。docker stack deploy --compose-file docker-compose.yml mystack
Dockerをインストールしたら、GitLabインスタンスを設定する必要があります。