LoginSignup
1
0

DockerでGitBucketの環境を構築してDocker上の他のサービスからSSLで接続する

Last updated at Posted at 2024-05-31

動機

とあるdocker-compose.ymlで立ち上げたサービスから、新たに別のdocker-compose.ymlで立ち上げたGitBucketのリポジトリへ接続する際に少し手間取ったので、備忘録として
コンテナ間通信については本記事で紹介する方法の他にhost.docker.internalを利用するものもあるようですが、ここでは触れません

環境

WSL2 Ubuntu24.04 LTS
Docker 及び Docker compose plugin

本題

GitBucketの立ち上げ準備

殆どは以下の記事の通りです

DockerでGitBucketのコンテナを作成し永続化させる

DockerhubにあるGitBucketのイメージは更新されていないので、最新版を使用するためにはDockerfileからイメージをビルドする必要があります

GitBucketのDockerfile

FROM tomcat:10-jre11

ADD https://github.com/gitbucket/gitbucket/releases/download/4.41.0/gitbucket.war /opt/gitbucket.war

EXPOSE 8080 29418

CMD ["java", "-jar", "/opt/gitbucket.war"]

  • 使用するGitBucketのバージョンに合わせて以下の記述を適宜変更してください。
    FROM tomcat:10-jre11
    ADD https://github.com/gitbucket/gitbucket/releases/download/4.41.0/gitbucket.war

  • Dockerfileの準備が終わったらdocker buildでイメージをビルドします
    例:docker build -t gitbucket:4.41.0 ./

GitBucketのdocker-compose.yml

services:
  gitbucket:
    image: gitbucket:4.41.0
    container_name: gitbucket
    ports:
      - "127.0.0.1:88:8080"
      - "127.0.0.1:29418:29418"
    volumes:
      - "./gitbucket:/root/.gitbucket"
    restart: no
    networks:
      - git_network
networks:
    git_network:
        external: true
  • imageには先ほどビルドしたイメージを指定します
  • volumesの記述はdocker-compose.ymlのある./以下にgitbucketディレクトリを作成し、コンテナ内の/root/.gitbucketへのバインドマウントを行うことを意味しています
  • networksでは、あらかじめ作成するdocker networkを指定します。ネットワークの名前はどのようなものでも構いませんが、今回はgit_networkとしています
    ネットワーク作成のコマンド例:docker network create git_network

    これは異なるdocker-compose.ymlを跨いで通信を行うために必要な設定となります。今回gitbucketのリポジトリへ接続するサービスの例として、同一のgit_networkを設定したappsmithのdocker-compose.ymlを示します

appsmithのdocker-compose.yml

services:
   appsmith:
    image: index.docker.io/appsmith/appsmith-ce:v1.26
    container_name: appsmith
    ports:
         - "127.0.0.1:80:80"
         - "127.0.0.1:443:443"
    volumes:
         - ./stacks:/appsmith-stacks
    restart: unless-stopped
    networks:
      - git_network
networks:
    git_network:
        external: true

gitbucketの立ち上げ・設定

docker-compose.ymlの準備が整ったら、docker compose up -dでコンテナを立ち上げます
上記の設定のままであれば、ブラウザでlocalhost:88へと接続すると、GitBucketの管理画面が表示されると思いますのでrootでログインしてください。以降はGitBucket管理画面上の操作になります
各記述のポートやホスト名(サービス名)は、適宜docker-compose.ymlの設定に合わせて変更してください

  1. 右上のSystem administrationから、System settingsへと遷移する
  2. Base URLhttp://localhost:88を設定する
  3. Integrationsタブで、Enable SSH access to git repositoryにチェックを入れ、SSH bind hostgitbucketを、SSH bind portには29418を設定する
  4. リポジトリを作成し、デプロイキーの登録等を行う

以上の設定を行うことで、docker上の同一ネットワークが設定されたサービスからssh://git@gitbucket:29418/~でリポジトリへの接続ができるようになります

docker-compose.ymlのネットワークの設定と、サービス名による名前解決が肝で、他は特に気にかけるべきことはありませんね

付記

GitBucketの標準のデータベースはH2ですが、その実PostgreSQL等の利用が推奨されています

GitBucketをPostgreSQLやMySQLで動かす

以下にPostgreSQLを用いる場合の各種設定の例を示します

GitBucketのdocker-compose.yml

services:
  gitbucket:
    image: gitbucket:4.41.0
    container_name: gitbucket
    ports:
      - "127.0.0.1:88:8080"
      - "127.0.0.1:29418:29418"
    restart: no
    volumes:
      - "./gitbucket:/root/.gitbucket"
    depends_on: 
      git_db: 
        condition: service_healthy
    networks:
      - default
      - git_network

  git_db: 
    image: postgres:16.2
    environment: 
      POSTGRES_DB: gitbucket
      POSTGRES_PASSWORD: gitbucket
      POSTGRES_USER: gitbucket
    healthcheck: 
      interval: 10s
      retries: 10
      test: "pg_isready -U \"$$POSTGRES_USER\" -d \"$$POSTGRES_DB\""
      timeout: 2s
    restart: no
    volumes: 
      - "./postgres:/var/lib/postgresql/data"

networks:
   git_network:
        external: true

GitBucketのdatabase.conf

db {
  url = "jdbc:postgresql://git_db/gitbucket"
  user = "gitbucket"
  password = "gitbucket"
}

gitbucketサービスのnetworksにdefaultgit_networkの両方を設定するのがミソですね

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0