📦

docker-composeでコンテナに指定したIPを付与する備忘録

2021/11/30に公開

おはこんばんにちは

今回は私がよく使うdocker-composeの使い方の備忘録です

一回構築したらあんまり触らないからよく忘れるのでここに残そうと思いますが断片的な情報の為私以外にはあまり役には立たないと思います

おじさんの担当しているシステムは20年位思い付きのような機能改修や機能追加を繰り返され
予算的な問題という頭の悪い理由で関係のないシステムのための機能まで載せたりされた結果とっても沢山のサーバにFTPしたりRSHしたりTelnetしないといけないという悪夢のようなシステムになっています

そしてその開発環境をローカルに構築しようにも検証用の対抗サーバは開発環境からは繋がらない場所にしか作れないという意味不明な社内ネットワーク事情のせいでローカルでは開発環境がまともに動かないという悲惨な状態でした

そこで私は耐えられなくなったので対抗サーバはdocker上に構築してしまい検証サーバは使わないという判断に至ったのです

自分しか使えないから並行開発時には外注が死にそうな顔してるけど知ったこっちゃない

で構築するにあたってコンテナには商用と同じIPを振ったほうが設定ファイル等の変更が不要になるため便利なので今回のような事をしていますというお話です

では、本題

docker-composeでコンテナに指定したIPを付与する

たとえば10.10.10.10のコンテナを作る場合以下のようなyamlを作って

version: '2'

networks:
  test_network:
    driver: bridge
    driver_opts:
      com.docker.networks.enable_ipv6: "false"
    ipam:
      driver: default
      config:
        - subnet: 10.10.0.0/16
          gateway: 10.10.0.1

services:
  test_container:
    image: redis:alpine
    networks:
      test_network:
        ipv4_address: 10.10.10.10

起動すればIPが振られることを確認できます

redis:alpine使ってるのは常駐起動できる適当なイメージだったからで特に意味はない

$ docker-compose up -d
Creating network "test_test_network" with driver "bridge"
Creating test_test_container_1 ... done
$ docker-compose exec test_container ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:0a:0a:0a:0a brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.10/16 brd 10.10.255.255 scope global eth0
       valid_lft forever preferred_lft forever

ホストOSからの疎通も確認

$ ping -c 1 10.10.10.10
PING 10.10.10.10 (10.10.10.10) 56(84) バイトのデータ
64 バイト応答 送信元 10.10.10.10: icmp_seq=1 ttl=64 時間=0.066ミリ秒

--- 10.10.10.10 ping 統計 ---
送信パケット数 1, 受信パケット数 1, パケット損失 0%, 時間 0ミリ秒
rtt 最小/平均/最大/mdev = 0.066/0.066/0.066/0.000ミリ秒

これだけです

簡単に設定を説明すると

test_networkというブリッジを作って10.10.0.0/16のサブネットを割り当ててtest_containerというコンテナにそれを繋げて10.10.10.10のIPを割り当てるだけです

ちなみにこのブリッジは複数作成してコンテナ側のnetworks配下に複数設定することで複数IPの割当も可能です(私は同じ機能を持った二台のサーバが必要になったりする時に面倒なのでIP変えて同じコンテナ流用したりして使ってます)

というわけで今日もあまり自分以外の役には立たない備忘録でした

とっぴんぱらりのぷう

P.S.

なんかここにきて急に案件たてこんできて面倒くさい。。。

Discussion