Edited at

vagrant+dockerで仮想環境を使い捨てるための環境の準備


改訂履歴

更新日
内容

2019-05-29
CVE-2019-5736対応で、ubuntu上でdockerを動かすにはカーネルアップデートが必要になったしまった・・・ので、それへの対応。それとvagrant-disksizeプラグインを追加


この文書の目的


  • 対象


    • 仮想環境ナニソレ?な人



  • 対象に到達してもらう地点


    • vagrantまたはdockerで配布する仮想環境を、upコマンドで構築できる状態になること



  • 補足


    • 調べてすぐ出てくるような箇所については、手順として触れるだけで端折ります




構築する環境、用いる用語


  • 構築する環境

対象
入れるもの
どうなる

Windows
VirtualBoxとVagrant
Vagrant形式で配布される環境を受け入れられるようになります

Vagrant
Docker用のlinux環境
Docker形式で配布される環境を受け入れられるようになります


  • 用いる用語

用語
本記事における意味

ホストOS
Windows

ゲストマシン、ゲストOS
Vagrant上で構築するlinux環境マシンとそのOS。

コンテナ
ゲストOS上で構築するdocker環境


手順


BIOSの設定


  • 概要


    • Windowsでは、仮想環境を使うために必要な設定項目がBIOS上にあります。未設定であればやってください。



  • 手順


    • PCメーカーごとに異なるため、ここで全て説明するのは困難です。メーカーのwebサイトを参照ください。「BIOS 仮想環境」などでぐぐれば出ます。例:lenovo https://support.lenovo.com/jp/ja/solutions/ht500006




VirtualBoxのインストール


  • 概要


    • ゲストOSを作るためのソフトです。VirtualBoxの操作自体は後述のVagrantによって行うため、直接操作することは基本的にはありません。



  • 手順



    • https://www.virtualbox.org/ からダウンロードしてインストールしてください。最新版にしておくのが無難だと思います。




Vagrantのインストール


  • 概要


    • VirtualBoxをはじめとした仮想環境ツールを、コマンドラインや設定ファイルで動かすためのソフトです。



  • 手順



    • https://www.vagrantup.com/ からダウンロードしてインストールしてください。最新版にしておくのが無難かと思います。




Vagrantのプラグインインストール


  • 概要


    • 文書の目的にある「配布されるVagrant環境の利用」にあたって、必要になると思われるプラグインを一通りインストールします。




- 対象プラグイン

名称
なにそれ
無かったらどうなる

vagrant-vbguest
VirtualBoxのGuestAdditionというツールのバージョンを自動調整してくれる
構築する環境ごとにVirtualBoxを再設定しないとエラーが出て面倒

vagrant-proxyconf
Vagrantでプロキシを設定できるようになる
proxy必須な環境だとゲストOS内でプロキシ設定作業が必要

vagrant-docker-compose
Vagrantで作るゲストOS上でdocker-composeが使えるようになる
ゲストOSでいちいちdocker-composeをインストールしないといけない

vagrant-disksize
ゲストOSのディスクサイズをVagrantfile上で指定できるようになる
ディスクを拡張するのが面倒


  • 手順


    • コマンドラインで以下を入力します



vagrant plugin install vagrant-vbguest

vagrant plugin install vagrant-proxyconf
vagrant plugin install vagrant-docker-compose
vagrant plugin install vagrant-disksize


Vagrant環境の受け入れ準備完了

配布される環境がVagrantのものなら、ここまでで完了です。

配布されるのがDocker環境の場合はこの先も行ってください。


Docker用ゲストOSの作成


Vagrantfileの作成


  • 概要


    • 配布されるdocker環境を動かすためのゲストOSの設定を作成します。



  • 手順


    • テキストファイル(ファイル名:Vagrantfile)を新規作成します。




Vagrantfile

Vagrant.configure("2") do |config|

# --- boxの設定 ---
# vagrant/dockerが動けばなんでもいいけど、安心できそうなubuntuで。
# virtualboxの設定箇所に関連項目があるので注意。
config.vm.box = "ubuntu/xenial64"
config.disksize.size = "15GB"

# 環境の変化を避けるため、チェックを省略とする
# config.vm.box_check_update = false

# 配布する環境が同一内容になることを意識し、ゲスト接続用のsshキーも共通のものを使う
config.ssh.insert_key = false

# ゲストOSにはプライベートネットワーク接続とする
config.vm.network "private_network", ip: "192.168.33.10"

# デフォルト以外の共有フォルダが必要なときはコメントを外して設定する
# config.vm.synced_folder "../data", "/vagrant_data"

# --- VirtualBoxの設定 ---
config.vm.provider "virtualbox" do |vb|
# ホストが32bitOSのときに64bitOSを動かすために必要。
vb.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
# メモリを拡張しておかないと、コンテナによっては起動すらできない
vb.memory = "1024"
end

# --- proxyプラグインの設定 ---
# proxyが必要ならコメントを外して設定する。これによりゲストOSにProxy設定が為される
# if Vagrant.has_plugin?("vagrant-proxyconf")
# config.proxy.http = "http://hogeproxy:8080/"
# config.proxy.https = "https://hogeproxy:8080/"
# config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
# end

# --- シェルでのプロビジョン ---
# シェルでゲストOSの初期設定
config.vm.provision "shell", privileged: false, inline: <<-SHELL
# タイムゾーン設定。やっておかないとUTCになる。
sudo timedatectl set-timezone Asia/Tokyo

# kernel update required by https://docs.docker.com/engine/release-notes/#18092
sudo apt-get update
sudo apt-get -y install --no-install-recommends linux-generic-lts-xenial

# ゲストOSにssh接続した際の初期ディレクトリは/home/vagrantだが、
# ssh接続時に用があるのは大概/Vagrant以下なので、
# .profile内の処理でディレクトリを移動しておく
echo 'cd /vagrant' >> /home/vagrant/.profile
SHELL

# --- dockerの設定。これでゲストOSでdockerコマンドが使える ---
config.vm.provision :docker

# --- docker-composeの設定。これでゲストOSでdocker-composeコマンドが使える ---
# ・バージョンを指定しないと古いバージョンになってしまうよう(1.11.2)なので、バージョン番号明示
# ・1.24.0は2019/03/29時点の最新
# ・vagrant up時にdocker-compose up まで行いたいときは、
#  行途中の#を外してymlオプションを有効にしてdocker-compose.ymlまでのパスを記載
config.vm.provision :docker_compose, compose_version: "1.24.0" #, yml: "docker-compose.yml"
end



ゲストOS用のディレクトリを確保

任意のディレクトリ内に、前項で作成したVagrantfileを置きます。

他にもワークファイルが作られたりするので、専用のディレクトリであることが望ましいです。

あとで移動したくなったら移動できます。


ゲストOSを起動

以下、コマンドラインで。

OSイメージのダウンロードも一緒に行うため、回線によっては数分~数十分かかります。


cmd.exe

cd [Vagrantfileを置いたディレクトリ]

vagrant up


接続テスト


  1. vagrantのsshコマンドで接続


cmd.exe

cd [Vagrantfileを置いたディレクトリ]

vagrant ssh

Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-155-generic x86_64)

(略)
Last login: Sat Aug 18 14:50:31 2018 from XXX.XXX.XXX.XXX(伏)
vagrant@vagrant-ubuntu-trusty-64:/vagrant$


  1. sshクライアント接続
    sshクライアントがあればですが、プライベートネットワークのアドレスへも接続してみます。ユーザーとパスはvagrant/vagrantです。
    タイムゾーンが正しいこともついでに確認します。
    (Last Loginが、さっきのvagrant ssh の日時になるはずです)

login as: vagrant

vagrant@192.168.33.10's password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-155-generic x86_64)
(略)
Last login: Tue Aug 21 20:35:41 2018 from XXX.XXX.XXX.XXX(伏)


  1. dockerコマンド
    dockerコマンド、docker-composeコマンドが使えるかどうかも確認しておきます。

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ docker --version

Docker version 18.06.0-ce, build 0ffa825
vagrant@vagrant-ubuntu-trusty-64:/vagrant$ docker-compose --version
docker-compose version 1.22.0, build f46880fe
vagrant@vagrant-ubuntu-trusty-64:/vagrant$

OK。


Docker環境の受け入れ準備完了

以上で準備は完了です。

環境が配布される場合、この先の説明は配布元がしてくれるでしょう。


運用上必要になるコマンド


vagrantコマンド

以下はゲストOSを操作するコマンドです。vagrantでゲストOSを操作するコマンドを実行する際は、Vagrantfileのあるディレクトリをカレントディレクトリとしてください。

やること
コマンド
備考

起動
vagrant up
ゲストマシンがあれば起動します。なければ作成したうえで起動します。

一時停止
vagrant suspend
resumeで復帰します。

一時停止からの復帰
vagrant resume

停止(電源断に相当)
vagrant halt
upで再度起動します。

破棄
vagrant destroy
ゲストマシンが削除されます。Vagrantfileは残るので、upで再度作成できます。トラブルがあった時などはdestroy・upで一からやり直します。


参考にさせていただいたページ