Docker用VMの構築

準備

以下をインストール

  • Virtual Box (本稿では5.0.16)
  • vagrant (本稿では1.8.1)

※ MacTypeを利用している場合は、MacTypeプロセスマネージャーからVirtual Boxを除外する

必要なファイルを作成

Vagrantfile

provisoningでbootstrap.shを呼び出すため、単体では動作しない。

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"
ACCEPT_PORTS = [
  80,
  3306,
  5432,
  8000,
  8080,
  8088,
  8888,
  10080
]

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos71"
  config.vm.provider :virtualbox do |vbox|
      vbox.name = "centos-7.1-docker-git"
      # GUIモードにしないと起動しない...
      vbox.gui = true
  end

  # IntelliJのDockerプラグイン用
  config.vm.network "forwarded_port", guest: 5555, host: 5555

  # ホストのportに+10000したものをVMで使用する
  ACCEPT_PORTS.each do |port|
    config.vm.network "forwarded_port", guest: port, host: 10000 + port
  end

  config.vm.provision :shell, :path => "bootstrap.sh"
end

bootstrap.sh

インストールや設定は全てこのファイルで行う。

#!/usr/bin/env bash

yum install -y epel-release
yum install -y vim \
               wget \
               tree \
               lsof \
               jq

# Dockerインストール
tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum install -y docker-engine

# Docker Composeインストール
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

# FireWall
firewall-cmd --zone=public --add-port=5555/tcp --permanent
firewall-cmd --reload

# 起動オプション
systemctl enable docker
systemctl start docker

# Localeを日本にする
cp /usr/share/zoneinfo/Japan /etc/localtime

最新版のGitが必要なら下記を追加。
必要なことはあまり無いので。

readonly GIT_VERSION=2.6.2
yum install -y curl-devel \
               expat-devel \
               gettext-devel \
               openssl-devel \
               zlib-devel \
               perl-ExtUtils-MakeMaker \
wget "https://github.com/git/git/archive/v$GIT_VERSION.tar.gz"
tar -zxf v$GIT_VERSION.tar.gz
cd git-$GIT_VERSION/
make prefix=/usr/local all
make prefix=/usr/local install

コマンド実行

$ vagrant box add centos-7.1 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
$ vagrant up

Dockerコンテナの前にProxyが必要なとき

jwilder/nginx-proxyを使う。

pullせずにrunするとDNSが迷子になるので初めにpullしておく。

docker pull jwilder/nginx-proxy
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

noneのDockerイメージを一掃する

docker images | awk '/<none/{print $3}' | xargs docker rmi

停止しているDockerコンテナを一掃する

docker ps -a | awk '/Exited/{print $1}' | xargs docker rm -f 

※ Image名などに Exited が含まれる場合は稼働中のコンテナでも削除されてしまうので注意

参考

Dockerでなイメージを一括で削除するワンライナー – Qiita

無駄なVOLUMEを一掃する

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/docker:/var/lib/docker \
    martin/docker-cleanup-volumes

コンテナのタイムゾーンをホストにあわせる

-v /etc/localtime:/etc/localtime:roでlocaltimeをVOLUMEする。

参考

Dockerでホストと同じタイムゾーンをコンテナ起動時に設定する – Qiita

Dockerfileのハマリポイント

参考

トラブルシューティング

docker logsでgrepできない

標準エラー出力なので、以下のようにする必要有り。

docker logs XXX 2>&1 | grep hogehoge

docker logs | grep doesn’t work · Issue #9508 · docker/docker