Adventカレンダー 社内Docker環境の話

会社でやっているAdventカレンダー 3日目の記事です。

ここ1年で蓄積したDockerのナレッジを書きます。

弊社では、ローカルの開発環境でDockerを利用しています。

決して安定している開発環境とは言えず、日々ブラッシュアップしている状況ですが、培ったナレッジを書き残します。

dockerネットワークの話

コンテナは起動する事に、排他的な独自のネットワークを作ります。
単純にコンテナを起動するだけであればあまり気にする事はありませんが、IPアドレスによる制限を行っている場合は起動の度にコンテナのIPアドレスが変わる為、ネットワーク設計を考える必要があります。

弊社の環境ではL7のPATHルーティングを必要としますので、以下のような構成になります。

127.0.0.1:80
 ↓
Nginxロードバランサコンテナ
 ↓     ↓
コンテナA  コンテナB

上記の構成の場合、
① NginxロードバランサーコンテナのIPアドレスを固定する。
② X-Forwardedに127.0.0.1を含む場合アクセスを許可する。

の2つの許可方法が考えられますが、①で行うように設定しようと考えました。

docker-composeでコンテナを起動する場合、単一のコンテナだけではなく全てのコンテナにIPアドレスを固定指定する必要がありますが、
上記のようにコンテナが3つだけであれば良いのですが、実際は20ぐらいのコンテナが動いています。

同一ネットワークでNginxロードバランサコンテナだけIPアドレスを固定してみましたが、DHCPレンジとぶつかるケースがコンテナ側の起動が出来ない事がありました。
その為、ネットワークの設定、DHCPプールの設定を行う必要があります。

docker network create --subnet=172.19.0.0/16 --gateway=172.19.0.1 --ip-range=172.19.1.0/24 ネットワーク名

・Dockerネットワーク全体のネットワークは172.19.0.0/16
・ゲートウェイは172.19.0.1
・DHCPレンジは172.19.1.0/24の範囲で設定する。

Dockerネットワーク作成後、172.19.1.0/24 以外を固定IPアドレス設定可能ネットワークとして、通常通りコンテナにIPアドレスを固定しても、
DHCPレンジとのバッティングも発生しなくなりました。

    networks: 
      ネットワーク名:
        ipv4_address: 172.19.0.5

node ビルドの話

nodeのbuild(npm run dev等)がとにかく遅い。
ソースコードをそのままvolumesとしてマウントを行いビルドを行うと、node_modules配下が作られるが、
node_modules配下を”別物として”マウントする事で、ビルドの速度改善が見られた。

services:
  app:
    build:
      context: ./app
    volumes:
      - app/src:/var/www/DocmentRoot
      - node_modules_volume:/var/www/DocmentRoot/node_modules

volumes:
  node_modules_volume:

快適に開発が行える環境までもう一歩。
現在は社内からクレームが多い 「自分の業務とは関係ないコンテナを立ち上げたくない(重い)」の対応を進めているので、
動き始めたらその事も記事に書く予定です。