Vagrant (Ubuntu) に Docker, Docker Compose インストール

Vagrant (Ubuntu) に Docker, Docker Compose インストール

概要

開発環境構築用に作成した、
Vagrant (Ubuntu) に Docker と Docker Compose をインストールする手順をまとめました。

Vagrantfile 作成

かなりシンプルにしてます。

  • Vagrantfile
1
2
3
4
5
6
7
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", ip: "192.168.35.101"
end

vagrant provision で docker compose をインストールすることも可能ですが
vagrant ならではの provision だと他環境で利用できない為、OS 上でインストールする方針です。

VM 起動

1
2
3
4
5
6
7
8
9
MacOS%$ vagrant up
...
しばし待つ
...

MacOS%$ vagrant ssh

// ssh ログイン成功
vagrant%$

Vagrant Ubuntu 環境情報確認

1
2
3
4
5
6
7
vagrant%$ lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty

カーネルバージョン確認

1
2
vagrant%$ uname -r
3.13.0-116-generic

カーネルバージョンが 3.10 より低いとバグを引き起こす危険性があるので NG。
別のカーネルバージョンの高い box を使用しましょう。

古いバージョンをアンインストール

1
vagrant%$ sudo apt-get remove docker docker-engine

extra パッケージインストール

Docker に aufs ストレージを使用許可する為です。

1
2
3
4
5
vagrant%$ sudo apt-get update
vagrant%$ sudo apt-get -y install \
wget \
linux-image-extra-$(uname -r) \
linux-image-extra-virtual

Docker インストール

1
2
3
4
5
6
7
8
9
// Docker インストール
vagrant%$ wget -qO- https://get.docker.com/ | sh

// Docker バージョン確認
vagrant%$ docker --version
Docker version 17.04.0-ce, build 4845c56

// vagrant ユーザを docker グループに追加 (一旦ログアウトしログインし直すと有効になることを確認できます)
vagrant%$ sudo usermod -aG docker vagrant

Docker Compose インストール

1
2
3
4
5
6
7
8
9
10
11
vagrant%$ curl -L "https://github.com/docker/compose/releases/download/1.12.0/docker-compose-$(uname -s)-$(uname -m)" >  ~/docker-compose

// 実行権限付与
vagrant%$ chmod +x ~/docker-compose

// 実行パス移動
vagrant%$ sudo mv docker-compose /usr/bin/

// Docker Compose バージョン確認
vagrant%$ docker-compose --version
docker-compose version 1.12.0, build b31ff33

一度ログアウトし再度ログイン

1
2
3
vagrant%$ exit
MacOS%$ vagrant ssh
vagrant%$

メモリとスワップ利用量の調整

Docker を使用していない時にメモリのオーバーヘッドとパフォーマンス劣化を低減させる様、
GRUB (GRand Unified Bootloader: グラブ or ジーラブ) に設定する必要があります。

  • grub 設定
1
2
3
4
vagrant%$ sudo vi /etc/default/grub

# GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  • GRUB (GRand Unified Bootloader: グラブ or ジーラブ) 更新
1
2
3
4
vagrant%$ sudo update-grub

// 念の為、再起動
vagrant%$ sudo reboot

以上で準備完了です ♪

早速試してみる

簡単なチュートリアルとして nginx コンテナを立ててみます。

1
2
3
4
5
6
7
8
9
10
vagrant%$ docker run --rm -p 80:80 nginx:mainline-alpine

Unable to find image 'nginx:mainline-alpine' locally
mainline-alpine: Pulling from library/nginx
709515475419: Already exists
4b21d71b440a: Pull complete
c92260fe6357: Pull complete
ed383a1b82df: Pull complete
Digest: sha256:5aadb68304a38a8e2719605e4e180413f390cd6647602bee9bdedd59753c3590
Status: Downloaded newer image for nginx:mainline-alpine

ブラウザアクセス

ローカルの Mac からブラウザでアクセス

http://192.168.35.101

※192.168.35.101 … Vagrant で指定した private ip

問題なく Welcome ページが表示されました。

先程のログに以下のようにアクセスログが出力されるのがわかります。

1
192.168.35.1 - - [13/Apr/2017:10:45:46 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-"

MacOS → Vagrant → Docker
とアクセスできるようになりました ♪

追記

今回作成した Box を Vagrant Cloud に置きました。

https://atlas.hashicorp.com/kenzo0107/boxes/ubuntu14.04.5LTS-docker-dockercompose/

こちら設定を元にこれから様々な環境構築を記載していきたいと思います ♪

参照

Ansible+Vagrant でシンプルなPrometheusモニタリング環境構築

Ansible+Vagrant でシンプルなPrometheusモニタリング環境構築

概要

Prometheus 入門 にあるチュートリアルを
Ansible で簡単に構築できるようにした、
というものです。

先日 2016 年 6 月 14 日、
LINE 株式会社でのPrometheus Casual Talks #1に参加し
ナレッジのおさらいなどしたく、
構築法をまとめました。

Prometheus とは

最近話題の Pull 型の Query Filtering 可能で Grafana 等と連携できる モニタリング/Alert ツールです。

構成

Imgur

  • Prometheus Server × 1
  • Prometheus Client × 2

環境

  • CentOS 6.5
  • Prometheus Server 0.20.0
  • Supervisor 3.3.0
  • Go 1.6.2
  • Ansibl 2.1.0.0
  • Vagrant 1.8.1
  • MacOSX 10.11.5

前提条件

以下ツールをインストールしておいてください。

  • VirtualBox
  • Vagrant
  • Ansible

使い方

1. git repository を clone

[https://github.com/kenzo0107/Vagrant-Prometheus]

1
$ git clone https://github.com/kenzo0107/Vagrant-Prometheus

2. Vagrant VM 起動

1
2
$ cd Vagrant-Prometheus
$ vagrant up

3 node running !

  • 1 node: Prometheus Server
    • 192.168.11.30
  • other 2 nodes: Prometheus Client Server
    • 192.168.33.31
    • 192.168.33.32

3. ssh.config 追加

1
$ vagrant ssh-config > ssh.config

4. ping 疎通試験

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ansible default -m ping

server | SUCCESS => {
"changed": false,
"ping": "pong"
}
client1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
client2 | SUCCESS => {
"changed": false,
"ping": "pong"
}

ok, success.

5. 2node に PrometheusClient 設定

1
$ ansible-playbook set_clients_prometheus.yml

6. PrometheusClient の起動確認

以下 PrometheusClient を起動しているサーバにアクセスし
起動されているか確認します。

以下のように表示されれば成功です。

7. PrometheusServer 設定

1
$ ansible-playbook set_server_prometheus.yml

8. PrometheusServer 確認

http://192.168.33.30:9090 にアクセス

以下のように表示されれば成功です。

是非多少なりとも一助となれば何よりです!
いじくり倒してみてください!

以上

Vagrant + Chef ⇒ LAMP環境構築

Vagrant + Chef ⇒ LAMP環境構築

目的

Vagrant と Chef を利用して LAMP 環境をローカルの仮想環境で実現する

経緯

同一サーバ上で作業している場合に
MySQL のバージョンアップしてパフォーマンステストしたりしたいなぁ
でも、他のみんなに迷惑かかっちゃうよ or サーバ買ってもらえないし、
というときなんかに
ローカル環境で試せるね

ってことで導入しました。

環境

  • MacOSX Marvericks
  • Vagrant
  • VirtualBox

前提

以下がインストールされていること

  • Vagrant
  • VirtualBox
  • Chef
  • knife-solo

↑ 最下の「あとがき」にあるドットインストールで導入手順を参考にしました。

1. knife-solo 初期化

1
$ knife configure

色々尋ねられますが、基本、[Enter]連打で問題ありません。

2. BOX 追加

BOX とは、仮想マシン起動の際にベースとなるイメージファイルです。

centos64 という名前で box を追加します。

1
$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20131103.box

※利用しているサーバ環境と合わせたい場合は、
お使いのサーバにログインして以下実行で環境情報を調べるのが良いでしょう。

1
$ uname -a

box は以下から URL を選べます。
http://www.vagrantbox.es/

3. 仮想環境 初期化

1
2
3
$ mkdir [vagrant用ディレクトリ]
$ cd [vagrant用ディレクトリ]
$ vagrant init centos64

成功するとVagrantfileができているのがわかります。

1
2
$ ls
$ Vagrantfile

4. Vagrantfile 修正

private network の設定をして
ローカル環境からアクセス出来る様にします。

MacOS → VirtualBox
へのアクセスです。

以下のようにコメントアウトを外すのみ!

1
2
#config.vm.network :private_network, ip: "192.168.33.10"
config.vm.network :private_network, ip: "192.168.33.10"

5. 仮想環境 起動

Vagrantfile のあるパスで以下実行

1
$ vagrant up

以下実行で「running(virtualbox)」を実行すると、起動中であることを確認できる。

1
$ vagrant status
1
2
3
4
5
6
7
8
Current machine states:

default running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

以下実行でログイン

1
$ vagrant ssh

ログインした後、ログアウトしたい場合に以下実行

1
$ exit

6. ssh エイリアス作成

1
$ vagrant ssh-config --host [sshエイリアス] >> ~/.ssh/config

以下実行でアクセスできる。

1
$ ssh [sshエイリアス]

また、以下実行で ssh の config に書き込まれていることを確認できる。

1
$ cat ~/.ssh/config

7. Chef リポジトリ作成

以下のような構成が管理しやすいかなと思いますので、
以下のように作ります。

1
2
3
4
|
+--- [vagrant用ディレクトリ]
|
+--- [chef-repo]

[vagrant 用ディレクトリ]の1つ上の階層に移動しておいて
以下実行

1
$ knife solo init [Chefのリポジトリ名]

8. 仮想マシンを chef 対応させる

1
2
$ cd [Chefのリポジトリ名]
$ knife solo prepare [sshエイリアス]

9. cookbook 作成

1
$ knife cookbook create [cookbook名] -o site_cookbooks/

10. cookbook に構築する環境の設定記述

1
$ vim [Chefのリポジトリ名]/[cookbook名]/recipe/default.rb

11. 実行 recipe 指定

1
$ vim [Chefのリポジトリ名]/nodes/[sshエイリアス名].json
1
2
3
{
"run_list": ["recipe[[cookbook名]]"]
}

12. テンプレートを作成

1
$ vim [Chefリポジトリ名]\[cookbookの名前]\template\default\index.html.erb

index.html.erb の中身は自由に編集してください。

例として

1
<h1>Hello, World</h1>

13. cookbook を vagrant 仮想環境へ反映

1
$ knife solo cook [sshエイリアス名]

13. 設定した仮想環境の Web サーバへアクセスする

ブラウザで http://192.168.33.10 へアクセス

ブラウザに以下が表示されることを確認!

1
Hello, World

また、仮想環境にアクセスすると以下ファイルができていることを確認できるので
試してみてください。

1
2
3
4
5
$ vagrant ssh
$ cd /var/www/html/
$ ls

index.html

あとがき

ドットインストールで以下さらっておくととっつきやすいです。