Vagrantの上にDockerを載せて開発環境を作成する
はじめに
こんにちは
Watanabe Jin (@Sicut_study)です。
本日は、windows + VirtualBox + Vagrant + dockerの環境を構築します。
また、VScodeとpowershellを使ってコマンドなどは実行しています。
私は普段からDocker desktopを愛用しており、Vagrantはwindows 10 Homeの時にDockerが簡単に入らなかったときに利用していました。
ちなみに今はwindows10Homeでも簡単にいれることができますので、こちらを参考にしてみてください。
では、何故わざわざVagrantで仮想環境を用意して、その上にDockerを利用できるようにしようかというと、私が勤めている会社ではDocker desktopのセキュリティ要件が満たされておらず、使うことが推奨されていません。
ですので、社内でDockerを利用する場合は、Vagrantの上でDockerを使うのが普通となっています。 (最近やっとDocker desktopを使えるようになったみたいです)
また、Vagrantだけで行っているプロジェクトも多く、今後他のプロジェクトに入る際にVagrantのインストールは必須になりそうでした。
しかし、Vagrant
とDocker desktop
はhyper-v
の関係で共存することができません。するとなると、Vagrantをするたびにhyper-vを切って再起動というかなり手間のかかることを今後やらないといけない可能性があります。(私が今参加しているのはたまたまDocker desktopでした)
というわけで今回はいつVagrantのプロジェクトに参加しても大丈夫なようにVagrantの上にDockerを載せましたのでその手順をまとめたいと思います。
今回作成する環境
VirtualBox + Vagrant + Docker + docker-compose + git
準備
1. Hyper-vは切る
dockerをインストールしたらvagrant up(virtualbox)が起動しなくなった件
Dockerをすでに利用している方はこちらを参考に行ってください。
2. Vscodeインストール
省略させていただきます。
3. VirtualBoxとVagrantのダウンロード
VirtualBoxをインストールする
6.1.22をインストールしました。
Vagrantをインストールする
2.2.16をインストールしました。
環境構築手順
1. Vagrant環境を作成する
適当なフォルダ(ここではvagrant_docker)を作成して、そのフォルダに入り、
powershellに以下のコマンドを打ち込みます。
$ vagrant box add ubuntu/bionic64
ダウンロードにはしばらく時間がかかります。
完了したら
$ vagrant init ubuntu/bionic64
と打ち込むとVagrantfile
がカレントディレクトリに作成されます。
Vagrantfileを以下のように設定します。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "ubuntu/bionic64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
config.vm.network "forwarded_port", guest: 8000, host: 8080, host_ip: "127.0.0.1"
config.vm.provider :virtualbox do |vb|
vb.memory = 2048
end
config.ssh.insert_key = false
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder "../workspace", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end
ネットワークの設定とメモリの設定、仮想環境にマウントするフォルダを指定しました。
そして仮想環境を起動して、ゲストOSでSSH接続します。
$ vagrant up
$ vagrant ssh
これでVagrantでの仮想環境作成は終了です。
2. Dockerをインストールする
SSH接続をした状態で以下のコマンドを実行します。
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Do you want to continue? [Y/n] と聞かれたらYを入力
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
# Do you want to continue? [Y/n] と聞かれたらYを入力
$ sudo apt install docker-ce=18.06.1~ce~3-0~ubuntu
最後以外は公式のリファレンス通りとなります。
そして、このままではdockerコマンドの前にsudo
をつける必要があるため、権限を変更します。
$ sudo usermod -g docker vagrant
$ sudo service docker restart
その後Vagratn sshを再度行います。
$ exit
$ vagrant ssh
以下のコマンドでエラーがでなければ成功です。
$ docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. docker-composeをインストールする
SSH接続した状態で以下のコマンドを実行します。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 権限付与 (cmodはチェンジモードと読みます)
$ sudo chmod +x /usr/local/bin/docker-compose
これで、dockerの設定は終了したのでdocker-compose.ymlを作成して起動してみます。
マウントの設定をしたフォルダに以下のファイルを作成します。
(私の場合Vagrantfileには../workspaceとあるので、そこに作成しました)
version: "3"
services:
hello:
image: hello-world:latest
docker-compose.ymlのあるディレクトリに移動します。
$ cd .. # home
$ cd .. # root
$ cd vagrant_data
# $ ls でdocker-compose.ymlがあることを確認
それでは、起動してみます。
$ docker-compose up
すると、最初に
Hello form Docker!
This message shows that your installation ....
とでて、コンテナが落ちれば成功です。
4. gitをインストールする
gitを利用する場合は、vagrantにgitをインストールする必要があります。(仮想環境の上でgitコマンドを使います。)
$ sudo apt-get install git
$ git config --global user.name [ここに自分のユーザー名を入れる]
$ git config --global user.email [ここに自分のメールアドレスを入れる]
# 私の場合
# git config --global user.name jinwatanabe
そのあとインストールされているかを確かめます。
git log
エラーがでなければ成功です。
フォルダ構成
最終的には以下のようなフォルダ構成になりました。
┣ vagrant_docker
┣ Vagrantfile
┣ ubuntu-bionic-18.04-clouding-console.log
┣ .vagrant
┣ workspace
┣ docker-compose.yml
おわりに
Vagrantはエラーと格闘することが多いような気がしています。
特に権限回りなど毎度エラーに悩まされております。
環境によってはエラーがでるかもしれませんので、調べて対処してみてください。
また、この記事は2021年6月時点ですのでそれ以降には動かない可能性もございます。
これでいつ社内のVagrantのプロジェクトに参加することになっても大丈夫ですが、やはりDocker deskopが私は好きです。
Discussion
がライブラリが古くなり動かなくなっています。
ここを参考にしてDockerをインストールしましょう。