Ubuntu
vagrant
docker
docker-compose

【Vagrant】Ubuntu16.04にDocker環境を構築する【2018年】

VagrantのUbuntu16.04にDocker環境を構築するための方法を、
Dockerの公式に従って最小限に構築する。
(執筆時期:2018年1月27日)

※ VirtualBoxとVagrantはHomebrewでインストール済み
brew cask install virtualbox
brew install vagrant

環境 バージョン
macOS High Sierra 10.13.2
VirtualBox 5.2.6
Vagrant 2.0.1

Ubuntu16.04の準備と起動

boxはVagrant Cloudの ubuntu/xenial64 を使用する。
以下を実行していくとVagrantでUbuntu16.04環境を構築できる。

# Ubuntu16.04のVagrantファイルを作成する
$ vagrant init ubuntu/xenial64

# Vagrantを起動する
$ vagrant up

# Vagrantにログイン
$ vagrant ssh

Dockerの準備

公式のインストール手順 に従ってそのままコマンドを実行していく。
※ Dockerの準備は vagrant ssh でログインした状態で行う。

# aptパッケージをアップデート
$ sudo apt-get update

# aptがHTTPS経由でリポジトリを使えるようにパッケージをインストール
$ sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

# Dockerの公式GPG keyを追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

# 安定したリポジトリを追加
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

# 再度aptパッケージをアップデート
$ sudo apt-get update

# Dockerをインストール
$ sudo apt-get install -y docker-ce

# ユーザーをDockerグループに追加
$ sudo usermod -aG docker $USER

# Ubuntuを再起動
$ sudo reboot

docker-composeの準備

公式のインストール手順 に従ってそのままコマンドを実行していく。
※ Dockerの準備は vagrant ssh でログインした状態で行う。

# docker-composeをダウンロード
$ sudo curl -sL https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# docker-composeに実行権限を付与
$ sudo chmod +x /usr/local/bin/docker-compose

補足

以上の設定をシェルスクリプトにまとめてVagrantのprovisionに設定すれば、
vagrant upvagrant provision でDocker環境を構築できる。
Vagrantfile でprovisionにシェルスクリプトのパスを設定する。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.provision :shell, :inline => "apt-get update"
  config.vm.provision :shell, :path => "provision/install_docker.sh"
  config.vm.provision :shell, :path => "provision/install_docker-compose.sh"
end

また、以下のようにinlineで直接記述する方法もある。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    sudo apt-get install -y \
      apt-transport-https \
      ca-certificates \
      curl \
      software-properties-common
    (以下略)
  SHELL
end