DRYな備忘録

Don't Repeat Yourself.

Elasticsearchの2.0にキャッチアップしたいんですが、Dockerで分離したい。Macで

背景

  • みんなだいすきElasticsearchがいつのまにか2.0になってた
  • これを叩いていろいろためしたい
  • だけど生ローカルで動いているElasticsearchがあり、これはカジュアルにAPI変えたくない
  • Dockerイメージあるし、docker-machineでホストごと分離するのがよさそう

f:id:otiai10:20151123222029p:plain

ログ

% docker-machine create es2.0 --driver virtualbox
% docker-machine env es2.0
% eval $(docker-machine env es2.0)
% docker-machine ssh es2.0
# 以下、machine内での作業
docker@es2:~$
docker@es2:~$ docker run -d elasticsearch
23109478735ac87439c07df34a47bca40e3f4c14d688791a552489b8921778ee
docker@es2:~$ curl "http://localhost:9200"
curl: (7) Failed connect to localhost:9200; Connection refused

あらん?

Connection refused

docker@es2:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
23109478735a        elasticsearch       "/docker-entrypoint.s"   About a minute ago   Up About a minute   9200/tcp, 9300/tcp   modest_archimedes

PORTは空いてる気がするけれど、EXPOSEかな?

# さっきのはいったん殺す
docker@es2:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
23109478735a        elasticsearch       "/docker-entrypoint.s"   About a minute ago   Up About a minute   9200/tcp, 9300/tcp   modest_archimedes
docker@es2:~$ docker kill 23109478735a
23109478735a
docker@es2:~$ docker rm 23109478735a
23109478735a
docker@es2:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
docker@es2:~$

PORTをホストマシンのPORTにバインドしてrunする

docker@es2:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
docker@es2:~$ docker run -d -p 9200:9200 elasticsearch
2b03d2ded545008de52b6c18c3a79e9dc475b9b895a101564eb65723b67e4838
docker@es2:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
2b03d2ded545        elasticsearch       "/docker-entrypoint.s"   7 seconds ago       Up 7 seconds        0.0.0.0:9200->9200/tcp, 9300/tcp   tender_fermat
docker@es2:~$ curl "http://localhost:9200?pretty"
{
  "name" : "Spider-Girl",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.0.0",
    "build_hash" : "de54438d6af8f9340d50c5c786151783ce7d6be5",
    "build_timestamp" : "2015-10-22T08:09:48Z",
    "build_snapshot" : false,
    "lucene_version" : "5.2.1"
  },
  "tagline" : "You Know, for Search"
}
docker@es2:~$

無事、docker-machineでホストVMのうえでElasticsearch2.0のdockerコンテナが動いててAPIも叩けるようになった。

念の為、Macの生ローカルのElasticsearchの1.5を同時に起動してみる。

22:07:13 (๑˃̵ᴗ˂̵)و ./elasticsearch-1.5.1/bin/elasticsearch
21:56:08 (๑˃̵ᴗ˂̵)و curl ":9200"
{
  "status" : 200,
  "name" : "Frank Simpson",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.1",
    "build_hash" : "5e38401bc4e4388537a615569ac60925788e1cf4",
    "build_timestamp" : "2015-04-09T13:41:35Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "

これで、生ローカルのElasticsearchと分離して、docker-machine ssh es2.0でいつでもElasticsearch2.0のAPIを叩いて試せる環境が整ったでござるな。

DRYな備忘録