VagrantとVirtualBoxで作るデスクトップdocker環境

March 25, 2021

dockerlinuxwebサーバー

目次

はじめに

本サイトもそうですが、docker, docker composeを使ったサーバーアプリケーションのインストール方法が数多く公開されています。dockerは、Linuxサーバを動かせる環境にある場合は、容易に試せますが、WindowsやmacOSのデスクトップ環境では、dockerを扱う敷居は未だ高く、容易ではありません。

Docker for Mac/WindowsやDocker Desktopを使えば、WindowsやmacOSで直接dockerを使えるようにはなります。しかし、コンテナからホストのファイルをアクセスする場合などで遅くなるケースもあり、使いこなすノウハウが必要となります。

本記事では、あまり難しいことを考えずに、WindowsやmacOSでサクッとdockerを動かす方法を紹介します。タネを明かせば、WindowsやmacOS上で、Linuxの仮想マシンを動かし、その上でdockerを使う訳ですが、これをVagrantというツールを利用し、少しの設定だけで自動的に仮想マシン上のdockerを使えるようにするのです。

ホストのリソースを浪費させないように、仮想マシン上では、軽量のAlpine Linuxを動作させるようにします。

VirtualBoxのインストール

既に、VirtualBoxを利用中の場合は、何もしなくても大丈夫。でも、この際、最新のVirtualBoxにしておきましょう。

ここからVirtualBoxをダウンロードし、ふつうにインストーラーでインストールします。

virtualbox.png

Vagrantのインストール

Vagrantは「ベイグラント」と読みます。

ここからVagrantをダウンロードします。

vagrant1.png

インストーラーをダウンロードしたら、ふつうにインストーラーでインストールします。インストール後、再起動します。

macOSの場合:

ダウンロードしたvagrant_xxxx.dmgをダブルクリックし、開いたヴォリューム上にあるvagrant.pkgをダブルクリックしてインストーラーを起動。あとはインストーラーの指示に従いデフォルトインストールする。

vagrant_mac.png

Windowsの場合:

ダウンロードしたvagrant_n.n.n_x86_64.msigをダブルクリックしてインストーラーを起動。あとは、Vagrant Setupウィザードの指示に従いデフォルトインストールする。

vagrant_win.png

docker環境構築

以下、Windowsでの実行例ですが、macOSでも同じようにできます。

(1) 適当な名前で作業ディレクトリを用意します。

例えば、
C:\Vagrant\DockerEnv

(2) テキストエディタでVagrantfile, provision.shという名前の2つのファイルを作業ディレクトリ内に作成します。

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "generic/alpine312"
  config.vm.network "private_network", type: "dhcp"
  config.vm.provision :shell, :path => "./provision.sh"
end
provision.sh
sudo apk add docker docker-cli-compose git
sudo service docker start
sudo rc-update add docker boot
sudo addgroup vagrant docker

(3) Vagrantでdockerを稼働させる仮想マシンを起動します。

C:\Vagrant\DockerEnv> vagrant up

コマンドはたった1行なのですが、Linux仮想マシンをリポジトリから持ってきて、必要なソフトをインストールするので、数分~数10分かかります。

以上でdockerを使用できるLinux環境が起動します。

(6) サーバにログイン

C:\Vagrant\DockerEnv> vagrant ssh
alpine312:~$ 

Linuxのコマンドプロンプト「$」に変わります。ここからは、Linuxの世界です。dockerやdocker composeを使ったアプリケーションを試す環境が整いました。

(7) 動作確認

早速試してみましょう。

alpine312:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
alpine312:~$ 

出来ましたけど、つまらないですね。だからどうなのよ、ってとこでしょうか。 次節で、もう少し気が利いたアプリのインストールを試みます。

Ctrl-Dで仮想マシンから抜けてDOSプロンプトに戻ります。

(8) 後始末

動作確認を終えたら、

C:\Vagrant\DockerEnv> vagrant halt

これで仮想マシンは終了します。再度立ち上げるのは、

C:\Vagrant\DockerEnv> vagrant up
C:\Vagrant\DockerEnv> vagrant ssh
alpine312:~$ 

この仮想マシンはdockerアプリを試すためだけの一時的なものと考えてください。試用を終えたら、仮想マシンを消し去って大丈夫です。

試用を終えて、仮想マシンを完全に削除するには、

C:\Vagrant\DockerEnv> vagrant destroy

仮想マシンを消し去っても、

C:\Vagrant\DockerEnv> vagrant up
C:\Vagrant\DockerEnv> vagrant ssh
alpine312:~$ 

で、再度仮想マシンを構築し、使用可能になります。もう一度リポジトリからイメージを取得する時間はかかりますが。

試用例

前節のhello-worldはつまらなかったので、試しにWikiサーバの、PukiWikiを試用してみます。PukiWikiを例に選んだのは、単にdocker composeが短く単純だったからで、他意はありません。

その前に、仮想マシンのipアドレスを調べておきます。webアプリをインストールする場合、ここで調べたipアドレスでアクセスすることになります。

alpine312:~$ ip a|grep eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 172.28.128.6/24 scope global eth1

ipアドレスが「172.28.128.6」であることが判りました。

では、PukiWik用のdocker-compose.ymlを作成します。

alpine312:~$ mkdir PikiWiki
alpine312:~$ cd PikiWiki
alpine312:~/PikiWiki$ vi docker-compose.yml

docker-compose.ymlの内容は以下のとおりです。この例ではhttpのポートを80番ではなく3400番に変更しています。

docker-compose.yml
version: '3'
services:
  pukiwiki:
    image: pengo/pukiwiki
    restart: unless-stopped
    ports:
      - 3400:80
    volumes:
     - ./pukiwiki:/ext

docker-compose.ymlが出来たら、PikiWikiを起動します。

alpine312:~/PikiWiki$ docker compose up -d

動作確認は、先ほど調べたipアドレスに3400番ポートで、webブラウザからアクセス。

http://172.28.128.6:3400/

pikiwiki.png

webブラウザにPikiWikiトップページが表示されたら成功です。

まとめ

VagrantとVirtualBoxを使用して、WindowsやmacOSのデスクトップで動作するdocker, docker composeの環境を構築する方法を紹介しました。


Written by questions6768 who lives in Uji, Kyoto.