Vagrant+DockerでInfluxDBとnginx

最近よく聞くVagrantとかDockerとか、スルーしてたけど触っといたほうがいいかなと思って、試してみた。

Vagrantのインストール

Vagrantは、なんかVirtualBoxVMとかの構成を勝手にやってくれるやつ。
ここから適当なのをダウンロードしてインストールする。
Download - Vagrant by HashiCorp


VirtualBoxも必要なので、インストールしておく
Downloads – Oracle VM VirtualBox


DockerはLinuxでしか動かないので、ふつうのパソコンの場合はVM経由で使う必要があって、それでVirtualBoxとか使うと思うけど、そんときにVagrantが便利、という話。

VagrantUbuntuを起動

なんか、こんな感じの内容でどこかにVagrantfileという名前のファイルを作る。

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "docker"
  config.vm.network "private_network", ip: "126.0.56.101"
  config.vm.provider "vertualbox" do |vb|
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end
end

IPが指定されてなかったり、DNSが効いてなかったり、いろいろハマった。
ここにDockerも仕込んでおく。


そのディレクトリにいって

> vagrant up

とするとVMが起動。


VirtualBoxマネージャで確認してみます。
おぉ!

> vagrant ssh

とすると、sshできる。お手軽。

influxdbとnginxを起動するDockerfile

なんか、Dockerは最終的にコマンドをひとつしか実行できないので、こんなshファイルを作っておきます。
場所は、Vagrantfileの下あたり。dockerとかディレクトリ作っておくのがいいと思う。

#!/bin/sh
/usr/sbin/nginx -g "daemon off;" &
influxd

改行コードがLFじゃないと怒られるので注意。ハマった。
&とかつけてるのがキモい。たぶん、docker composeとか使うのが大人。


そして、同じところにDockerfileという名前でこんなのを作ります。

FROM ubuntu:latest

EXPOSE 8086
EXPOSE 8083
EXPOSE 80

RUN apt-get install -y wget
RUN wget https://s3.amazonaws.com/influxdb/influxdb_0.10.3-1_amd64.deb
RUN dpkg -i influxdb_0.10.3-1_amd64.deb

RUN apt-get install -y nginx

ADD run.sh /run.sh
RUN chmod +x /run.sh

CMD ["/run.sh"]

Dockerビルドして実行

そしたら、ビルドして実行します。
VagrantSSHします。Vagrantfileのあるところが/vagrantにマウントされてるので、そこからdockerfileを置いたところに行きます。


んで、ビルド

$ docker build -t kishida/influx-nginx .


うまくいって、Successfully builtって出たら実行

$ docker run -p 80:80 -p 8083:8083 -p 8086:8086 --name influx-nginx kishida/influx-nginx


Vagrantで指定してた126.0.56.101にブラウザでつないでみる。

おぉ、nginx動いてる。


ポート8083でinfluxdbの管理ツールが動いてるのでつないでみる。DB自体は8086ポート。

おぉ。

終了

起動のときに--nameで指定した名前で終了

$ docker stop influx-nginx


もう一回起動するときはstart

$ docker start influx-nginx

感想

ようわからんけど、なんか楽しさがある。
しかし、VagrantもDockerも、それ自体を使うだけなら難しくないけど、使いこなそうとするとシェル力が問われる気がした。あとはhubをどう使いこなすかとか。
まあでも、ぼくはLinux力とかシェル力ないほうだけど、じんわりといろいろ知ってるんだな、という気分になれてよかった。

Docker 実践ガイド (impress top gear)

Docker 実践ガイド (impress top gear)