1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

podmanとpodman-composeを用いてgitlab/gitlabコンテナの構築

Last updated at Posted at 2024-08-05

概要

podman・podman-composeを利用して、Gitlab/GitlabRunnerを構築した

podmanとは

podmanは、docker同様コンテナ型仮想化を提供するパッケージ。
dockerはコンテナ型仮想化による恩恵を持ちつつ、docker imageの持つ可搬性の有用性を見出され、コンテナ型仮想化ツールの代表的なツールとなった。
その一方で、rootユーザーを前提にしていたり、デーモンが常駐しているといった要因がセキュリティの観点で問題視されるようになった。
podmanは、dockerの持つセキュリティ的な課題に対応しつつ、dockerとの互換性を非常に強く意識されたパッケージである。

以下に簡単に違いをまとめる。

特徴 Podman Docker
デーモンの有無 デーモンレス デーモンが常駐
ユーザーモードのサポート 非特権ユーザーでも管理可能 非特権ユーザーは直接管理不可
ストレージ管理 ユーザーごとに独立したストレージを持つ グローバルにストレージを管理
ポッドサポート Kubernetes のポッド概念をサポート ポッドの概念なし
互換性 podman-docker で Docker CLI と互換性あり Docker CLI に特化
セキュリティ デーモンレスでセキュリティリスクが低い デーモンを標的とした攻撃リスクあり
Kubernetes との統合 Kubernetes に近い運用が可能 追加ツールが必要(現在は CRI-O や containerd 推奨)
イメージのビルド buildah を使用してデーモンレスでビルド デーモンを使用してビルド
エコシステムとツールチェーン Kubernetes と密接に連携 広範なエコシステムと豊富なツールチェーン

構築環境図

image.png

podmanとpodman-composeのインストール

podmanのデーモンレス機能を有効活用するために、docker-composeではなくpodman-composeを使用する方針で環境構築を行う。

podmanのインストール

  • リポジトリ更新
sudo dnf update
  • podman のインストール
sudo dnf install -y podman
  • インストール確認
podman --version

以下のように出れば良い

podman version 4.9.4-rhel

podman-composeのインストール

前座として、pythonの更新とpip3.8のインストール

python3.6ベースでpip3をインストールしてpodman-composeを起動したところ失敗し、エラーを調べた結果python3.7のライブラリが必要なことが発覚。
現時点で最新バージョンであるpython3.8とpip3.8を使うことにする。

  • python3.8のインストール
sudo dnf install python38
  • python3.6→python3.8へシンボリックリンクを切り替える

以下のコマンドを実行する

sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2;sudo alternatives --config python3

以下の表示にて"2"を選択する

[ec2-user@ip-192-168-2-150 alternatives]$ sudo alternatives --config python3

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/bin/python3.6
*  2           /usr/bin/python3.8

  • 以下のコマンド実行で確認する
[ec2-user@ip-192-168-2-150 alternatives]$ ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Aug  5 06:56 /etc/alternatives/python3 -> /usr/bin/python3.8
  • pip38のインストール
sudo dnf install python38-pip
  • シンボリックリンク設定
 sudo rm /usr/bin/pip3;sudo ln -s /usr/bin/pip3.8 /usr/bin/pip3
  • pip3インストール確認
pip3 --version

以下のように出れば良い

pip 19.3.1 from /usr/lib/python3.8/site-packages/pip (python 3.8)

podman-composeのインストール

  • インストールコマンド
pip3 install --user podman-compose
  • 確認コマンド
 podman-compose --version
  • 以下のように出れば良い
podman-compose version 1.2.0
podman version 4.9.4-rhel

gitlabコンテナとgitlab-runnerコンテナのインストール

gitlabコンテナのインストール

  • 以下のコマンドを実行する
podman pull docker.io/gitlab/gitlab-ee:17.2.1-ee.0
  • 以下のような結果になればOK
[ec2-user@ip-192-168-2-150 gitlab-gitlabrunner]$ podman image ls docker.io/gitlab/gitlab-ee
REPOSITORY                  TAG          IMAGE ID      CREATED      SIZE
docker.io/gitlab/gitlab-ee  17.2.1-ee.0  a8aa14dc8a9b  12 days ago  3.36 GB

gitlab-runnerコンテナのインストール

2024/08/05時点におけるUbuntu安定板を利用する。

  • 以下のコマンドを実行する
podman pull docker.io/gitlab/gitlab-runner:ubuntu-v17.2.1

以下のコマンドでも同様のコンテナを取得できるが、実施タイミングによってubuntuタグの指すコンテナバージョンが異なる。
取得時期における最新の安定バージョンを取得したいという場合は以下のコマンドを実行すること

podman pull docker.io/gitlab/gitlab-runner:ubuntu
  • 以下のような結果になればOK
[ec2-user@ip-192-168-2-150 gitlab-gitlabrunner]$ podman image ls docker.io/gitlab/gitlab-runner
REPOSITORY                      TAG             IMAGE ID      CREATED      SIZE
docker.io/gitlab/gitlab-runner  ubuntu-v17.2.1  cdfa8cbb0731  10 days ago  778 MB

gitlab/gitlab-runnerコンテナの起動

podman-compose.ymlの用意

  • マウントの設定などがあるため/home/ec2-user/gitlab-gitlabディレクトリ内に以下のファイルを作成する。

ファイル名:podman-compose.yml

ファイルの中身:

version: '3.6'
services:
  gitlab:
    image: docker.io/gitlab/gitlab-ee:17.2.1-ee.0
    container_name: gitlab
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://XXX.XXX.XXX.XXX'
      HOME_DIR: /home/ec2-user
    ports:
      - '8080:80'
      - '8443:443'
      - '10022:22'
    volumes:
      - /home/ec2-user/gitlab-gitlabrunner/gitlab/config:/etc/gitlab
      - /home/ec2-user/gitlab-gitlabrunner/gitlab/logs:/var/log/gitlab
      - /home/ec2-user/gitlab-gitlabrunner/gitlab/data:/var/opt/gitlab
    shm_size: '256m'

  gitlab-runner:
    image: docker.io/gitlab/gitlab-runner:ubuntu-v17.2.1
    container_name: gitlab-runner
    restart: always
    environment:
      HOME_DIR: /home/ec2-user
    volumes:
      - /home/ec2-user/gitlab-gitlabrunner/gitlab-runner/config:/etc/gitlab-runner
      - /home/ec2-user/.ssh:/root/.ssh

  • /home/ec2-user/gitlab-gitlabrunnerディレクトリ内で以下のコマンドを実行する
podman-compose -f podman-compose.yml up -d
  • 以下のコマンドで起動確認を行う。ただし、gitlabコンテナのSTATUSは3分くらいたたないとstartingのままで、3分くらいたつとhealthyになる
 podman-compose ps
CONTAINER ID  IMAGE                                          COMMAND               CREATED             STATUS                        PORTS                                                               NAMES
5e583803f95c  docker.io/gitlab/gitlab-ee:17.2.1-ee.0         /assets/wrapper       About a minute ago  Up About a minute (starting)  0.0.0.0:8081->80/tcp, 0.0.0.0:8443->443/tcp, 0.0.0.0:10022->22/tcp  gitlab
318c356b873a  docker.io/gitlab/gitlab-runner:ubuntu-v17.2.1  run --user=gitlab...  About a minute ago  Up About a minute                                                                                 gitlab-runner

gitlabのログイン方法

  • 以下のURLにウェブブラウザでアクセスを試みると、初回ログイン時は以下のような画面になる。
http://192.168.2.150:8081

image.png

  • 以下のコマンドを実行して初期パスワードを取得する
cat /home/ec2-user/gitlab-gitlabrunner/gitlab/config/initial_root_password
  • 取得した情報を用いてログインを試みる

ユーザー名:root
パスワード:取得したパスワード

  • 無事にログインが出来れば完了

image.png

【参考】podman環境でも、docker-composeコマンドを続投したい場合

podman-dockerはdockerコマンド対応のpodmanなので、docker-composeも問題なく使えるだろうと思ったがそこは大きな間違い。
podmanはデーモンレスなこともあり、docker-composeコマンドを使うとAPI叩けねぇみたいなエラーが出る。
エラーの例は以下の通り

[ec2-user@ip-192-168-2-126 gitlab-gitlabrunner]$ sudo docker-compose up -d
Traceback (most recent call last):
  File "urllib3/connectionpool.py", line 677, in urlopen
  File "urllib3/connectionpool.py", line 392, in _make_request
  File "http/client.py", line 1277, in request
  File "http/client.py", line 1323, in _send_request
  File "http/client.py", line 1272, in endheaders
  File "http/client.py", line 1032, in _send_output
  File "http/client.py", line 972, in send
  File "docker/transport/unixconn.py", line 43, in connect
FileNotFoundError: [Errno 2] No such file or directory

そのため、以下のコマンドでデーモン起動をする必要がある。せっかくデーモンレスなことがウリなのにそんなことしていいのかは少々疑問。

sudo systemctl start podman.socket

【参考】SE LINUXの解除

gitlab-runnerのコンテナ起動時にマウントをする関係上、SE LINUXを停止しておかないとコンテナ起動後にエラーが発生する。
正しいお作法があるはずだが、調べるのも大変なので解除方法だけ記載しておく

# vi /etc/selinux/config
SELINUX=disabled

参考URL

GitlabRunnerのリリース

Gitlab-EEコンテナ

Gitlab-Runnerコンテナ

PodmanCompose

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?