転職に際し、自分の進めていた+管理していた業務自動化スクリプトを引き継ぎしようと思ったが、引き継ぎ先メンバーがGitを使用できないことが分かったので、練習してもらう環境を整えるためにDockerでGitBucketサーバーを簡単に構築してみる。
今回はゲストOSのRocky LinuxにDockerをインストールして、GitBucketサーバーを構築します。
(最近Dockerを触っていないので、ほぼ自分の勉強が目当て)
環境
ホストOS: Windows11
ゲストOS:Rocky8(Hyper-V)
構築手順
- Dockerインストール
- dockerfileの作成
- docker-compose.ymlの作成
- ホスト側でのポートフォワーディング設定(おまけ)
1. Dockerのインストール
まずゲストOSにDockerをインストールする必要がある。
デフォルトのレポジトリからdnf install dockerで適用にインストできると思ってたが、podmanというコンテナ技術を使ってDockerのCLIをエミュレートしているものしかインストできなさそうだった
pcp-pmda-docker.x86_64 : Performance Co-Pilot (PCP) metrics from the Docker daemon
podman-docker.noarch : Emulate Docker CLI using podman
これでもいいやと思って使ってたらdocker-composeでエラーをはいて詰まってしまったので、Dockerの公式リポジトリからDockerをインストールする。
#リポジトリの追加
[root@localhost ~]# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#インスト可能なパッケージが増えていることを確認
[root@localhost ~]# dnf search docker
Docker CE Stable - x86_64 441 kB/s | 66 kB 00:00
================================================= 名前 & 概要 一致: docker ==================================================
docker-buildx-plugin.x86_64 : Docker Buildx plugin for the Docker CLI
docker-ce-rootless-extras.x86_64 : Rootless support for Docker
docker-compose-plugin.x86_64 : Docker Compose (V2) plugin for the Docker CLI
docker-scan-plugin.x86_64 : Docker Scan plugin for the Docker CLI
pcp-pmda-docker.x86_64 : Performance Co-Pilot (PCP) metrics from the Docker daemon
podman-docker.noarch : Emulate Docker CLI using podman
===================================================== 名前 一致: docker =====================================================
docker-ce.x86_64 : The open-source application container engine
docker-ce-cli.x86_64 : The open-source application container engine
#dockerのインスト
[root@localhost ~]# sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2. dockerfileの作成
基本GitBucketのコンテナイメージをそのままrunするだけでいいのだが、勉強+拡張性のためにdockerfileを使う。
下記のファイルを適時コメントアウトを無効化して使用すればOK。
#コンテナのイメージ指定
FROM gitbucket/gitbucket:latest
#コンテナの公開ポート指定
EXPOSE 8080
#何かコピーしたいものがあれば
#COPY /host/target/path /container/target/path
#コンテナイメージのビルド時に設定する環境変数(コンテナのOSには引き継がれない)
#ARG APP_ENV=production
#コンテナ起動時に設定する環境変数
#ENV APP_ENV=production
#Dockerイメージを作成する際に実行するコマンド
#RUN apt install hogehoge
#Dockerコンテナを起動した際に実行するコマンド(上書き可)
#CMD python /app/app.py
#Dockerコンテナを起動した際に実行する必須で実行するコマンド(上書き不可)
#ENTRYPOINT python /app/app.py
3. docker-compose.ymlの作成
同じく勉強+拡張性のためにdocker-composeを使用する。
通常gitbucketイメージだけのコンテナで十分だが、場合によってはDBサーバを別で構築したい場合もあると思うので、例としてDBコンテナの記述も下記に追加した。(GitBucket側でのDBサーバ指定の設定は割愛)
version: '3'
services:
gitbucket:
build: .
#ローカルとコンテナでファイルを同期する場合(ホストボリューム/バインドマウント)
#volumes:
#- ./src:/app
ports:
- "80:8080"
restart: always
depends_on:
- db
#DBを別で用意する場合は、下記のサービスも追加する
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_DB=gitbucket
- POSTGRES_USER=gitbucket
- POSTGRES_PASSWORD=gitbucket
Dockerfileとdocker-compose.ymlが準備できたので、下記コマンドを実行してみる。
(カレントディレクトリにDockerfileとdocker-compose.ymlを配置してる)
[root@localhost ~]# docker compose up -d gitbucket
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
427f094ed8f0 root-gitbucket "sh -c 'java -jar /o…" 9 minutes ago Up About a minute 29418/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp root-gitbucket-1
83dfad8df75d postgres:latest "docker-entrypoint.s…" 9 minutes ago Up 9 minutes 5432/tcp root-db-1
gitbucketコンテナとDBコンテナが立ち上がっていることが確認できた。
ゲストOSあてにhttpでアクセスしてみる。
無事GitBucketにアクセスできることを確認。
4. ホスト側でのポートフォワーディング設定(おまけ)
ホストOSのHyper-Vで内部ネットワークを使用し、ホストOS側でNAT変換することで、ゲストOSが外部ネットワークと通信できるようにしている。そのため、基本的に外部からゲストOSに通信することができなくなっているので、この構成ではポートフォワーディング設定が必要になる。
netsh interface portproxy add v4tov4 listenaddress=ホストOSのIP listenport=80 connectaddress=ゲストOSのIP connectport=80
外部のクライアントからホストOSの80番ポート宛に通信が来ると、ゲストOSの80番ポートに転送されるようになる。
ゲストOSの80番ポートはDockerで作成したGitBucketコンテナの8080番ポート宛に転送されるため、外部からでもGitBucketを使えるようになる。
終わり
普段使わないと細かいDockerfileやdocker-composeの項目を忘れてしまいますね。
これで簡易的ではありますがリモートリポジトリを使っていただく環境が作れたかなーと思います。