WSL(Ubuntu)にDockerをインストールしてVSCodeで開発する環境を構築する

オープンソースのウェブ型GitリポジトリマネージャーであるGitLabを、今回はDockerを使って構築してみたいと思います。本格的にGitLabを使う場合には専用のLinuxサーバを構築して、そこにGitLabをインストールするのが一般的ですが、今回はローカル環境でDockerを使ってGitLabを構築してCI/CDの動作確認を行っていきます。

環境

今回は次の環境でGitLabを構築しています。

今回のGitLab環境の全体像

環境 バージョン 備考
Ubuntu 22.04 LTS WSL2で構築
Docker 24.0.6 https://get.docker.com/でインストール
Docker Compose 2.21.0 標準にインストールされている
GitLab 16.4.1 Docker Composeで構築
GitLab Runner 16.4.0 Docker Composeで構築

GitLabの構築

今回はGitLabをDocker Composeで構築します。次の手順で構築します。

  1. hostsの設定
  2. Dockerデーモンの設定変更
  3. Docker Composeファイルの作成
  4. GitLabの起動

hostsの設定

  1. IPアドレスの確認

まずは、DockerホストのIPアドレスを確認します。このIPアドレスは、GitLabの設定に使用します。

コマンド実行

hostname -I

次のように一番最初に表示されるIPアドレスをコピーしておいてください。

IPアドレスを確認するコマンド実行

  1. hostsファイルの編集(ホストOS)

ホストOSのhostsファイルを編集します。(Macの場合は/etc/hosts、Windowsの場合はC:\Windows\System32\drivers\etc\hostsファイルを編集します。)次の行を追加してください。<IPアドレス>の部分は先に確認したIPアドレスを入れてください。

/etc/hosts

<IPアドレス> gitlab.local

確認したIPアドレスをhostsファイルに追加

Gitクライアントの設定

GitLabのリモートリポジトリをGitクライアントで操作するために、Gitクライアントの設定を行います。

  1. Gitの設定

Gitの設定を行います。次のコマンドを実行してください。

コマンド実行

git config --global user.name "<ユーザ名>"
git config --global user.email "<メールアドレス>"

<ユーザ名><メールアドレス>はGitLabにログインするときに使うものです。GitLabにログインするときに使うユーザ名とメールアドレスを入力してください。

Dockerデーモンの設定変更

今回GitLabはContainer RegistryをTLSで保護していないため、Dockerコマンドを使ったGitLab CI/CDジョブを実行するには次の設定を行う必要があります。

  • Dockerデーモンの設定変更
  1. Dockerデーモンの設定変更

Dockerデーモンの設定を変更します。/etc/docker/daemon.jsonを作成します。

コマンド実行

echo '{ "insecure-registries":["gitlab.local:5000"] }' | sudo tee /etc/docker/daemon.json

insecure-registriesgitlab.local:5000を設定しています。これはGitLabのContainer RegistryのURLで、TLSで保護されていないためinsecure-registriesに設定する必要があります。

  1. Dockerデーモンの設定変更

/etc/default/dockerを編集します。sedコマンドで書き換えます。

コマンド実行

sudo sed -i 's/^#DOCKER_OPTS=.*/DOCKER_OPTS="--insecure-registry gitlab.local:5000"/' /etc/default/docker

DOCKER_OPTS--insecure-registry gitlab.local:5000を設定しています。これはGitLabのContainer RegistryのURLで、TLSで保護されていないためDOCKER_OPTSに設定する必要があります。

  1. Dockerデーモンの再起動

Dockerデーモンを再起動して設定を反映します。

コマンド実行

sudo systemctl restart docker

これでDockerデーモンの設定変更は完了です。

Docker Composeファイルの作成

次にdocker-compose.ymlを作成します。

  1. ディレクトリの作成

~/gitlabディレクトリを作成します。

  1. Docker Composeファイルの作成

Ubuntuのホームディレクトリの中にgitlabディレクトリを作成して、docker-compose.ymlファイルを作成し、次の内容を記述します。

gitlab/docker-compose.yml

version: '3.7' services: web: image: 'gitlab/gitlab-ce:16.4.1-ce.0' restart: always hostname: 'gitlab.local' container_name: gitlab-ce environment: GITLAB_OMNIBUS_CONFIG: | # GitLabのURLを設定 external_url 'http://gitlab.local:8090' gitlab_rails['gitlab_host'] = 'gitlab.local:8090' nginx['listen_port'] = 8090 # GitLab Container Registryを有効化 registry_external_url 'http://gitlab.local:5000' gitlab_rails['registry_enabled'] = true gitlab_rails['registry_api_url'] = "http://gitlab.local:5000" registry['enable'] = true registry_nginx['enable'] = false registry['registry_http_addr'] = "gitlab.local:5000" # リソース軽減するために不要な機能を停止 sidekiq['max_concurrency'] = 10 puma['worker_processes'] = 0 postgresql['shared_buffers'] = "512MB" gitlab_rails['gitlab_kas_enabled'] = false grafana['enable'] = false prometheus_monitoring['enable'] = false prometheus['enable'] = false alertmanager['enable'] = false ports: - '8090:8090' - '5000:5000' volumes: - ./gitlab/config:/etc/gitlab - ./gitlab/logs:/var/log/gitlab - ./gitlab/data:/var/opt/gitlab networks: - gitlab extra_hosts: - gitlab.local:host-gateway gitlab-runner: image: gitlab/gitlab-runner:alpine3.18-v16.4.0 container_name: gitlab-runner restart: always depends_on: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./gitlab-runner:/etc/gitlab-runner networks: - gitlab extra_hosts: - gitlab.local:host-gateway networks: gitlab: name: gitlab-network

services.web.environment.GITLAB_OMNIBUS_CONFIGは次の設定を行っています。

今回はGitLabのアクセスするURLをhttp://gitlab.local:8090に設定したいため次の項目を設定しています。

  • external_url:GitLabのURL
  • gitlab_rails['gitlab_host']:GitLabのホスト名
  • nginx['listen_port']:GitLabのポート番号

また、GitLabのメモリ使用量を調整するために次の項目を設定しています。

  • sidekiq['max_concurrency']:Sidekiqの最大並列数
  • puma['worker_processes']:Pumaのワーカープロセス数
  • prometheus_monitoring['enable']:Prometheusの有効化
  • postgresql['shared_buffers']:PostgreSQLの共有バッファ

これでGitLabのDocker Composeファイルが作成できました。

GitLabの起動

それでは作成したdocker-compose.yamlを使ってGitLabを起動します。

  1. コンテナの起動

docker-compose.ymlがあるディレクトリで次のコマンドを実行します。

コマンド実行

cd ~/gitlab
docker compose up -d
  1. コンテナの起動確認

次のようにコンテナが作成され起動します。

コンテナの生成・起動

次のコマンドでコンテナの状態を確認します。

コマンド実行

docker compose ps

次のようにコンテナの状態が表示されます。STATUSUpになっていることを確認します。

コンテナのステータス確認

これでGitLabのコンテナが起動しました。

CAUTION

GitLabの起動が完了するまでには数分かかります。しばらくお待ちください。

GitLabの動作確認

次にGitLabの動作確認を行います。

  1. ブラウザでGitLabにアクセス

ブラウザで次のURLにアクセスします。

http://gitlab.local:8090

  1. GitLabのログイン画面の確認

次のようにGitLabのログイン画面が表示されることを確認します。

GitLabにログイン

GitLabへのログイン

GitLabにログインします。

  1. 初期パスワードの確認

GitLabの初期状態で作成されているユーザはrootです。初期設定のパスワードは次のコマンドで確認できます。

rootの初期パスワード確認コマンド

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

次のように初期パスワードが表示されます。

rootの初期パスワードを確認するコマンド

  1. GitLabにログイン

このパスワードを使ってGitLabにログインします。

初期パスワードを使ってログイン

ログインが成功すると次のような画面が表示されます。

ログイン成功時の画面

GitLabアカウントのパスワード変更

GitLabのアカウントのパスワードを変更します。

  1. パスワード変更画面の表示

GitLabのトップ画面の左上のアイコンをクリックして「Edit profile」をクリックします。

  1. パスワード変更画面の表示

User Settings画面が表示されますので、左の「Password」をクリックします。そして「Current password」に先に確認したパスワードを入力し、「New password」と「Password comfirmation」には新しいパスワードを入力して「Save password」ボタンをクリックします。

  • パスワードが弱いとエラーになります。パスワードは8文字以上で、英字と数字を含めてください。(例:fullness123

  1. 再ログイン

パスワード変更が完了すると再ログインが必要になります。再ログインしてください。

これでパスワード変更は完了です。

GitLab Runnerの登録

次にGitLab Runnerを登録します。GitLab RunnerはGitLabのCI/CDのジョブを実行するためのサービスです。GitLab RunnerはGitLabの管理画面から登録できます。

Resistration Tokenの確認

GitLab Runnerの登録にはResistration Tokenが必要です。Admin AreaのCI/CDのRunnersの画面から確認できます。

  1. Admin AreaのCI/CDのRunnersの画面にアクセス

GitLabのトップ画面にて/を押して検索欄にadminと入力して「Admin Area / Dashboard」をクリックします。

Admin Area / Dashboardへ移動

  1. Resistration Tokenの確認

GitLabの管理画面で次の項目を確認します。

「CI/CD」->「Runners」の画面から「New instance runner」の左の「:」をクリックして「Resistration Token」を確認します。

Resistration Tokenの確認

GitLab Runnerの登録

確認したRegistration Tokenを使ってGitLab Runnerを登録します。

  1. 環境変数の設定

GitLab Runner登録時に必要な情報を環境変数に設定します。次のコマンドを実行してください。
まず、<Registration Token>の部分には先に確認したRegistration Tokenを入れてください。

コマンド実行

export RUNNER_TOKEN=<Registration Token>

次にホストのIPアドレスを環境変数に設定します。次のコマンドを実行してください。

コマンド実行

export HOST_IP=$(hostname -I | cut -d' ' -f1)
  1. GitLab Runnerの登録

次のコマンドを実行してGitLab Runnerを登録します。<Registration Token>の部分には先に確認したRegistration Tokenを入れてください。

コマンド実行

docker exec -it gitlab-runner gitlab-runner register \
  --non-interactive \
  --url http://gitlab.local:8090 \
  --registration-token "$RUNNER_TOKEN" \
  --executor docker \
  --docker-image docker:latest \
  --description "docker-runner" \
  --tag-list "docker" \
  --run-untagged \
  --locked="false" \
  --access-level="not_protected" \
  --docker-extra-hosts "gitlab.local:$HOST_IP" \
  --docker-privileged \
  --docker-volumes "/cache" \
  --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
  --docker-volumes "/etc/default/docker:/etc/default/docker" \
  --docker-volumes "/etc/docker/daemon.json:/etc/docker/daemon.json"

次のようにRegister runner succeededと表示されれば登録完了です。

GitLab Runnerを登録のコマンド実行

ちなみに上記のコマンドは次のような設定を行っています。

  • --url:GitLabのURL
  • --registration-token:Registration Token
  • --executor:実行環境(今回はDocker)
  • --docker-image:Job実行時のデフォルトのDockerイメージ
  • --description:GitLab Runnerの説明
  • --tag-list:GitLab Runnerに設定するタグ
  • --run-untagged:タグのないジョブを実行するかどうか
  • --locked:GitLab Runnerをロックするかどうか
  • --access-level:GitLab Runnerのアクセスレベル(not_protectedは誰でも使える)
  • --docker-extra-hosts:Dockerコンテナ内からGitLabにアクセスするための設定
  • --docker-privileged:Dockerコンテナを特権モードで実行するかどうか
  • --docker-volumes:Dockerコンテナのボリュームの設定
  1. GitLab Runnerの確認

GitLabのRunner画面にて登録したRunnerが表示されていることを確認します。

GitLabのRunner一覧画面でRunnerが登録されている事を確認

これでGitLab Runnerの登録が完了しました。

GitLabプロジェクトの作成

GitLabプロジェクトを作成します。

  1. GitLabプロジェクトの作成

GitLab画面の左上にある「+」をクリックして「New project/repository」をクリックします。

新しいプロジェクトの作成画面へ移動

「Create blank project」ボタンをクリックします。

Create blank projectを選択

  1. プロジェクト設定の入力

次のように入力して「Create project」ボタンをクリックします。

  • Project name:test
  • Project URL:http://gitlab.local:8090/root
  • Project Slug:test
  • Visibility Level:Private

新規プロジェクト作成画面

プロジェクトが作成されます。

新規プロジェクト作成完了画面

「Clone」ボタンをクリックして表示されるURLをコピーします。

新規プロジェクトのクローンURLを確認・コピー

GitLabリポジトリをローカルにクローン

GitLabのリポジトリをローカルにクローンします。

  1. リモートリポジトリをクローン

ホームディレクトリ/home/ubuntuで次のコマンドを実行します。

コマンド実行

cd /home/ubuntu
git clone <GitLabのリポジトリURL>
  1. ログイン

GitLabのログイン画面が表示されますので、先ほど変更したパスワードでログインします。

VSCodeでリモートリポジトリをクローンするためのパスワード入力

次のようにtestディレクトリが作成され、GitLabのリポジトリがローカルにクローンされます。

VSCodeでリモートリポジトリをクローンした画面

GitLab CI/CDパイプラインの作成

GitLab CI/CDパイプラインを作成します。

  1. GitLab CI/CIファイルの作成

それではGitLab CI/CDのジョブを作成してみましょう。GitLab CI/CDのジョブは.gitlab-ci.ymlというファイルに記述します。.gitlab-ci.ymlはGitLabプロジェクトのルートディレクトリに作成します。作成したら次の内容を記述します

test/.gitlab-ci.yml

build: tags: - docker stage: test image: openjdk:17 script: - java -version

上記はopenjdk:17のDockerイメージを使ってjava -versionを実行するジョブを定義しています。tagsdockerを設定しています。これはGitLab Runnerの設定でdockerというタグを設定しているためです。tagsに設定したタグのRunnerがジョブを実行します。

  1. GitLab CI/CDジョブの実行

GitLab CI/CDジョブを実行します。ローカルリポジトリをコミットしてプッシュします。

コマンド実行

cd test
git add .
git commit -m "first commit"
git push origin main

ローカルリポジトリをプッシュ

  1. GitLab CI/CDジョブの実行確認

プッシュが完了するとGitLabのプロジェクト画面にてジョブが実行されます。矢印の箇所をクリックするとジョブの詳細を確認できます。

GitLab CI/CDジョブの確認画面に移動

ジョブの詳細が表示されます。ジョブに成功していると次のように表示されます。矢印の箇所をクリックするとジョブのログが表示されます。

成功しているGitLab CI/CDジョブ画面

  1. ジョブのログの確認

ジョブのログが表示されます。ジョブのログにはjava -versionの実行結果が表示されています。

成功しているGitLab CI/CDジョブ詳細画面

このようにGitLab CI/CDのジョブを作成して実行することができました。

Dockerコマンドを使ったGitLab CI/CDジョブの作成

それではDockerコマンドを使ったCI/CDジョブを作成します。

  1. GitLab CI/CDファイルの修正

.gitlab-ci.ymlを次のように編集します。

test/.gitlab-ci.yml

build:
  tags:
    - docker
  stage: test
image: openjdk:17
script:
- java -version
- docker run hello-world

上記はdockerのDockerイメージを使ってdocker run hello-worldを実行するジョブを定義しています。

  1. GitLab CI/CDジョブの実行

GitLab CI/CDジョブを実行します。次のコマンドを実行します。

コマンド実行

cd /home/ubuntu/test
git add .
git commit -m "update .gitlab-ci.yml"
git push origin main
  1. GitLab CI/CDジョブの実行確認

プッシュが完了するとGitLabのプロジェクト画面にてジョブが実行されます。次のようにdocker run hello-worldが実行されていることが確認できます。

GitLab CI/CDジョブでdockerコマンドが成功している画面

これでGitLab CI/CDのジョブでDockerコマンドを使うことができました。

まとめ

今回はGitLabをDocker Composeで構築してCI/CDの動作確認を行いました。GitLabをDocker Composeで構築することでローカル環境でGitLabを構築してCI/CDの動作確認を行うことができます。

GitLabを使ってCI/CDを実行することで、開発者はコードをリポジトリにプッシュするだけで自動的にテストやビルド、デプロイを行うことができます。GitLabを使ってCI/CDを実行することで開発者は開発に集中することができます。

コメントを残す

マークダウン形式でコメントを入力できます。

アップロードファイルの最大サイズ: 512 MB。 画像, 音声, 動画, 文書, スプレッドシート, 対話型, テキスト, アーカイブ, コード, その他 をアップロードできます。 Youtube、Facebook、Twitter および他サービスへのリンクは自動的にコメント内に埋め込まれます。 ここにファイルをドロップ

プロフィール背景
Ryosuke
Ryosuke

ITエンジニア & 講師

クラウドネイティブやアーキテクチャ設計の講師として活動しながら、ITエンジニアのDXを推進するために新しい技術やベストプラクティスを常に学び、エンジニアの生産性と開発品質の向上に貢献することを目指しています。猫5匹飼っています。山奥のポツンと一軒家に住んでいて、事務所は海の近くです。