dockerのネットワークはそのままでは固定IPを使う事が出来ない。
それじゃ我慢ならないからコンテナに固定IPを割り振って
外部からアクセスするまでをまとめている。
ホストがCentOS7のお話。
###現在のイメージ
当たっているか自信ないけどdockerをインストールした後の
ネットワークをイメージ化するとこんな感じになっているんじゃないかと思う。
###完成予想図
仮想ブリッジを立てて、その配下にコンテナがぶら下がるイメージ。
元々あった物理NICのeno1は自分以外のフレームも全て取り込む、
とにかく届いたフレームを全て仮想ブリッジであるbr0に送り届けるだけの人になってもらう。
(完成イメージ)
###仮想ブリッジ作成
仮想ブリッジbr0を作成します。
nmcli con add type bridge ifname br0 # 仮想ブリッジbr0を作成する
nmcli con modify bridge-br0 bridge.stp no # STPはじゃべるな
nmcli con modify bridge-br0 ipv4.method manual ipv4.address "192.168.1.0/24 192.168.1.1" ipv4.dns 192.168.1.254 # IPの設定
###物理NICの接続
仮想ブリッジbr0に物理NICのeno1を接続する。
以下をやれば接続されるらしい。俺の環境では接続されなかったぽいけど。
nmcli con add type bridge-slave ifname eno1 master bridge-br0
eno1の設定は消させてもらう。
何しろ受信したフレームを何も考えずにbr0に届けさえすれば良いんだから。
nmcli con modify eno1 ipv4.dns "" ipv4.addresses "" ipv4.method disable
NetworkManagerを再起動して設定反映する。
本当なら以下で反映されるっぽい。俺の環境では反映されなかったけど。
マシン自体を再起動したら仮想ブリッジの設定は反映された。
systemctl restart NetworkManager
仮想ブリッジbr0に物理NICのeno1を接続する。
マシンを再起動してもeno1とbr0は接続されなかったみたいだからbrctlで接続を試みる。
yum install bridge-utils
brctl addif br0 eno1
brctl show
###コンテナのNICと仮想ブリッジを接続
pipeworkってのがあるらしいよ。何やってるかはココが解かりやすかったです。
pipeworkの導入
cd /usr/local/src
git clone https://github.com/jpetazzo/pipework.git
ln -sv /usr/local/src/pipework/pipework /usr/local/bin/
コンテナにeth1を追加してbr0に接続させる。
pipework br0 コンテナID 192.168.1.2/24
###コンテナ側の設定
固定IPは割り振られた。だけどもまだ外から接続出来ないと思う。
コンテナに入ってちょいちょいと設定を行う。
nsenter -t $(sudo docker inspect --format '{{.State.Pid}}' コンテナ名) -m -u -i -n -p /bin/sh # 起動しているコンテナに入る
ifdown eth0 # docker0との関係は断ち切ってしまおう。
route add default gw 192.168.1.254 # デフォルトゲートウェイの設定。ホストと同じで。
あとはコンテナでsshdとか起動すれば外部から192.168.1.2にsshでアクセスできるはず。