GitLab Dockerイメージ
GitLab DockerイメージはGitLabのモノリシックなイメージで、必要なサービスを一つのコンテナで実行します。
GitLab CEとEEはどちらもDocker Hubにあります:
以下の例では、GitLab CE のイメージを使用しています。GitLab CE の代わりに GitLab EE を使用するには、イメージ名をgitlab/gitlab-ee:latest
に置き換えてください。
最新のRCイメージを使いたい場合は、GitLab CEにはgitlab/gitlab-ce:rc
、GitLab EEにはgitlab/gitlab-ee:rc
。
Dockerのインストールが必要ですので、公式のインストールドキュメントをご覧ください。
ボリュームの場所の設定
他のすべてを設定する前に、設定、ログ、およびデータファイルが存在するディレクトリを指す新しい環境変数$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プロセスがマウントされたボリュームに設定ファイルを作成するのに十分な権限を持っていることが保証されます。
--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インストールを簡単に設定、インストール、アップグレードできます:
- Docker Composerをインストールします。
-
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'
-
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 つのランナーでスタックとしてデプロイし、シークレットとコンフィグを使う例を示します:
- Docker swarmをセットアップします。
-
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ファイルの公式リファレンスを参照してください。 -
gitlab.rb
ファイルを作成します:external_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password')
-
root_password.txt
ファイルを作成します:MySuperSecretAndSecurePass0rd!
-
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の設定に関するオプションについては、設定ドキュメントを確認してください。
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_CONFIG
。 GITLAB_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
に公開します:
-
次の
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のドキュメントで、受信ポートの公開について詳しく説明しています。 -
実行中のコンテナを入力します:
sudo docker exec -it gitlab /bin/bash
-
エディタで
/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のドキュメントを参照してください。 -
gitlab_shell_ssh_port
を設定します:gitlab_rails['gitlab_shell_ssh_port'] = 2289
-
最後に GitLab を再設定します:
gitlab-ctl reconfigure
上記の例に従うと、GitLab にウェブブラウザから<hostIP>:8929
でアクセスし、SSH を使って2289
というポートでプッシュできるようになります。
異なるポートを使用するdocker-compose.yml
の例は、DockerComposerセクションにあります。
アップデート
ほとんどの場合、GitLabのアップデートは最新のDockerイメージタグをダウンロードするのと同じくらい簡単です。
Docker Engineを使ったGitLabのアップデート
Docker Engineを使ってインストールしたGitLabをアップデートするには:
- バックアップを取ってください。
-
実行中のコンテナを停止します:
sudo docker stop gitlab
-
既存のコンテナを取り外します:
sudo docker rm gitlab
-
新しいイメージをプルします。 例えば、最新のGitLab CEイメージです:
sudo docker pull gitlab/gitlab-ce:latest
-
前回指定したオプションでコンテナをもう一度作成します:
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は自分自身を再設定し、更新します。
Docker composer を使った GitLab のアップデート
Docker Composerを使ってインストールしたGitLabをアップデートするには:
- バックアップを取ってください。
-
最新のリリースをダウンロードし、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