ホストと異なる専用 IP アドレスで Docker コンテナを起動する
以前に Ubuntu で NIC に復数の固定アドレスを割り当てる というメモを書きました。 このメモも参考に「ホスト OS が使う IP アドレスとコンテナが利用する IP アドレスを分ける」という方針での設定例をメモしておきます。 ホスト OS は「ひとつしか NIC が無い」前提とし、サンプルとして GitLab を Docker コンテナとして起動します。
検証環境¶
| 対象 | バージョン |
|---|---|
| Ubuntu | 24.04.4LTS |
ホスト OS の NIC にはふたつの IP アドレスを割り当て、以下の方針で利用します。
| IP アドレス | 用途 |
|---|---|
10.0.0.1/24 |
ホスト OS で利用する |
10.0.0.99/24 |
Docker コンテナで利用する |
sshd で Listen するアドレスを指定する¶
sshd はデフォルトで全てのアドレス (0.0.0.0) を Listen します。 これでは NIC に追加 IP アドレスを割り当てても sshd が Listen し、他のコンテナと衝突する可能性がある為、sshd が Listen する IP アドレスを限定します。 /etc/ssh/sshd_config を以下のように修正します。 修正が完了したら systemctl restart sshd を実行して反映します。 設定反映が完了したら以下のコマンドなどで「sshd が 0.0.0.0 を Listen していないこと」を確認します。
systemctl status sshdsshd -T | grep -e addressfamily -e listenaddresslsof -i:22ss -nt
修正前¶
修正前¶
ホスト OS の NIC に復数 IP アドレスを割り当てる¶
Ubuntu で NIC に復数の固定アドレスを割り当てる を参考に、ホスト OS に復数 IP アドレスを割り当てます。 /etc/netplan ディレクトリ配下にある netplan の設定ファイルを以下のように設定します。
ホスト OS とは別アドレスで GitLab コンテナを起動する¶
概ね、以前に書いた Docker Compose で GitLab を起動する というメモの手順で GitLab を Docker コンテナとして起動します。 作業用のディレクトリを作成します。
以下の内容で docker-compose.yml ファイルを新規作成します。 ports の定義には変換する「Docker コンテナで利用する IP アドレス」も合わせて指定します。 また、通常では TCP/22 や TCP/80 がホスト OS と衝突しがちである為、「2022 ←→ 22」や「8080 ←→ 80」といったポート変換をしますが、今回は「Docker コンテナ専用 IP アドレス」を用意する為、「22 ←→ 22」「80 ←→ 80」のようにポート変換せずに利用します。
version: '3.7'
services:
app:
container_name: 'gitlab'
image: gitlab/gitlab-ce
restart: unless-stopped
hostname: 'gitlab.example.com'
ports:
- '10.0.0.99:22:22'
- '10.0.0.99:80:80'
volumes:
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
- ./config-app:/etc/gitlab
shm_size: '256m'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.0.0.99'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'mail.example.com'
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = 'USER'
gitlab_rails['smtp_password'] = 'PASSWORD'
gitlab_rails['smtp_domain'] = 'example.com'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
nginx['listen_port'] = 80
nginx['listen_https'] = false
letsencrypt['enable'] = false
volumes:
data:
logs:
config-app:
ブラウザで http://10.0.0.99 (8080 などのポート指定はしない) へアクセスし、GitLab のログイン画面が表示されれば成功です。