Docker実戦のカスタムブリッジ


Dockerカスタムブリッジ
一.ブリッジ管理ツールのインストール
1.ubuntuシステム
apt-get install bridge-utils

2.Centosシステム
yum install bridge-utils

デフォルトでは、dockerが起動するとlinuxのカーネルにネットワークインタフェースが作成され、構成されます.dockerが起動して実行されている場合、デフォルトではdocker0のブリッジが作成され、構成されます.
現在のブリッジと接続ブリッジのNICを表示します.
brctl show
➜  ~ brctl show
bridge name bridge id       STP enabled interfaces
br-89dfec96b8c7     8000.0242a580a633   no
docker0     8000.02428cbcb83d   no      vetha24f64d
                            vethbb782cf

二.独自のブリッジを作成し、dockerに新しいブリッジを使用するように指定します.
まず、dockerサービスを停止し、docker 0ブリッジを削除します.
#   docker  ,   docker0  
systemctl stop docker

ip link set dev docker0 down
brctl delbr docker0
iptables -t nat -F POSTROUTING

カスタムブリッジを作成するには
brctl addbr bridge0
ip addr add 172.16.xx.1/24 dev bridge0
ip link set dev bridge0 up

カスタムブリッジが正常に動作しているかどうかを確認
ip addr show bridge0
4: bridge0:  mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:8c:bc:b8:3d brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:8cff:febc:b83d/64 scope link
       valid_lft forever preferred_lft forever

三.構成を変更し、dockerのデフォルトで新しいブリッジを使用するように設定します.
起動パラメータの変更
1.ubuntuシステム
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker

2.Centosシステム
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker
systemctl起動構成の変更
  :/lib/systemd/system/docker.service
➜  ~ vim /lib/systemd/system/docker.service
[Service]モジュールにパラメータを追加します.
EnvironmentFile=-/etc/{default or sysconfig}/docker

修正ExecStart末尾にパラメータ$DOCKER_OPTSを追加し、実行時/etc/{default or sysconfig}/dockerファイルDOCKER_OPTSパラメータ内容を$DOCKER_OPTSに置き換えます
ExecStart=/usr/bin/dockerd $DOCKER_OPTS

次のようになります.
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
EnvironmentFile=-/etc/default/docker #      
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
#ExecStart=/usr/bin/dockerd --insecure-registry 10.1.64.179:8050
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

四.Reload daemon
➜  ~ systemctl daemon-reload

五.dockerの起動
➜  ~ systemctl start docker