docker-compose.yml を分割して external_links でコンテナを接続

# はじめに

docker-composeファイルを分割させた時にしたことです。

今回はkibanaからelasticsearchに通信します。

# 環境

+ docker-compoase
+ elasticsearch
+ kibana

# 分割前のdocker-compose.yml

```yml:docker-compose.yml
version: '2'
services:
  elasticsearch:
    container_name: esc
    image: esi:1.0.0
    build: ./es
    volumes:
      - ./data/es:/usr/share/elasticsearch/data
    ports:
        - 9200:9200
    expose:
        - 9300
  kibana:
    container_name: kibanac
    image: kibanai:1.0.0
    build: ./kibana
    links:
      - elasticsearch
    ports:
      - 5601:5601
```

このdocker-compoase.ymlを分割させます。
linksを使っています。

# 分割後のdocker-compose.yml

ディレクトリ構成は以下の通りです。

```
└── elasticsearch_external_links
    └── es_d
        ├── docker-compose.yml
        ├── Dockerfile
        └── config
            └── elasticsearch.yml
    └── kibana_d
        ├── docker-compose.yml
        ├── Dockerfile
        └── config
            └── kibana.yml
```

```yml:es_d/config/elasticsearch.yml
http.host: 0.0.0.0

### x-pack functions
xpack.security.enabled: false
# 無償利用は1クラスタまで
xpack.monitoring.enabled: true
xpack.graph.enabled: false
xpack.watcher.enabled: false
```

```yml:es_d/docker-compose.yml
version: '2'
services:
  elasticsearch:
    build: .
    container_name: es_c_el
    image: es_i_el:1.0.0
    volumes:
      - ./data/es:/usr/share/elasticsearch/data
    ports:
        - 9200:9200
    expose:
        - 9300
```

```dockerfile:es_d/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.3

COPY ./config/elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml

# kuromojiをインストール
RUN elasticsearch-plugin  install analysis-kuromoji
```

```yml:kibana_d/config/kibana.yml
---
# Default Kibana configuration from kibana-docker.

server.name: kibana
server.host: "0"
elasticsearch.url: http://elasticsearch:9200
elasticsearch.username: elastic
elasticsearch.password: changeme
xpack.monitoring.ui.container.elasticsearch.enabled: true
```

```yml:kibana_d/docker-compose.yml
version: '2'
services:
  kibana:
    build: .
    container_name: kibana_c_el
    image: kibana_i_el:1.0.0
    external_links:
      - elasticsearch
    ports:
      - 5601:5601
    networks:
      - default
      - es1_default

networks:
  es1_default:
    external:
      name: es_d_default
```

ポイントは ディレクトリ名がそのままネットワーク名になっているところです
```es_d_default```

```dockerfile:kibana_d/Dockerfile
FROM docker.elastic.co/kibana/kibana:5.5.3

COPY ./config/kibana.yml /opt/kibana/config/kibana.yml
```

# 実行

## elasticsearchを起動

```sh
$ cd es_d
$ docker-compose up -d --build
```

## kibanaを起動

```sh
$ cd kibana_d
$ docker-compose up -d --build
```

## docker networkの確認

```sh
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
aaaaaaaaaaaa        es_d_default        bridge              local
bbbbbbbbbbbb        kibana_d_default    bridge              local
```

## 

elasticsearch http://localhost:9200/
kibana http://localhost:5601/

[github サンプル 分割前](https://github.com/va034600/sample-server/tree/master/docker/elasticksearch)
[github サンプル 分割後](https://github.com/va034600/sample-server/tree/master/docker/elasticksearch_external_links)

これでOK