目次
Windows で Vagrant を使った dokcer 環境構築
Windows で docker を使う
Windows で docker を使う場合、まず公式の docker for Windows を使うと思いますが、Linux 系のコンテナを動かそうとすると、ボリュームがうまくマウントされないなどの問題が発生します。
最近では、WSL2 で dokcer を動かすと解決するかもしれませんが、ここでは、Virtualbox + Vagrant で docker 環境を構築する方法を紹介します。
(VMで構築すると、環境のリセットがしやすいなどの利点があります。)
VM の OS は CentOS を使う
OS は CentOS7 を使います。
docker を動かすだけなら、 CoreOS という docker を動かすためだけの軽量な OS があるのですが、今回 SVN 等のツールをインストールしたかったことと、
日頃業務で使っていて慣れているため、この OS で docker 環境を構築します。
VagantFileの作成
下記内容をコピペして Vagrantfile という名前でファイルを作成してください。
CentOSのインストール、初期構築、Dockerにインストールを行う記述をしています。
社内的に、 SVN を利用するので、SVNのインストールも行っていますが、使用しない場合は、削除してもらっても構いません。
Vagrant.configure("2") do |config|
# VM の IP(好きなIPに書き換えOK) ##############
$ip = "192.168.33.60"
##########################################
# デフォルトで guest additions によって共有フォルダをマウントしてくれるため bento を使用
config.vm.box = "bento/centos-7"
# ネットワーク設定
config.vm.network "private_network", ip: $ip
# 後で ホストPCでDockerにアクセスするためのポートを開放する設定
config.vm.network "forwarded_port", guest: 2375, host: 2375, host_ip: "127.0.0.1"
# メモリ/CPU
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
end
# 同期フォルダ(ホストPCにマウントするパス。デフォルトはVagrantfileのあるディレクトリにしているので、適宜変更してOK)
config.vm.synced_folder ".", "/vagrant", mount_options: ['dmode=777', 'fmode=777'], type: "virtualbox"
# 初回起動時に実行する処理
config.vm.provision "shell", inline: $initscript, privileged: false
end
# 初回起動時に実行するスクリプト
$initscript = <<END
# カーネル更新すると、guest additions のバージョンが合わなくなるため除外
sudo yum -y update --exclude=kernel*
# 日本語化
sudo yum reinstall -y glibc-common
sudo yum -y install ibus-kkc vlgothic-*
sudo localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf
sudo timedatectl set-timezone Asia/Tokyo
sudo yum -y install man-pages-ja
# ファイアーウォール停止
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# SELinux停止
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 一応初回起動時も無効状態にする
sudo setenforce 0
# httpd インストール(Webアプリでよく使用する、apacheユーザを作るためにインストール)
sudo yum -y install httpd
# svn インストール
sudo yum install -y svn
# ssh接続時のディレクトリを /vagrant にする
echo "" >> /home/vagrant/.bashrc
echo "cd /vagrant" >> /home/vagrant/.bashrc
# sshログイン時に何も表示しない
touch ~/.hushlogin
# docker インストール
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# latestバージョン番号を取得しつつ docker-compose をインストール
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | sed -e 's/[^0-9\.]//g')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# VSCodeで閲覧するための設定
sudo sed -i "s*ExecStart=/usr/bin/dockerd*ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375*g" /usr/lib/systemd/system/docker.service
export DOCKER_HOST="tcp://0.0.0.0:2375"
echo "export DOCKER_HOST=\"tcp://0.0.0.0:2375\"" >> /home/vagrant/.bashrc
# docker起動
sudo systemctl start docker
sudo systemctl enable docker
# docker group に vagrantを 追加
sudo usermod -aG docker vagrant
END
Vagrant up によりVM起動
Vagrantfile のあるディレクトリで$ vagrant up するだけで、docker 環境の構築は完了です。
VM が起動したら、$ vagrant ssh で ssh ログインして、 docker, docker-compose コマンドを使うことができます。
下記のように実行できれば無事Docker実行環境が構築できています。
$ docker -v
Docker version 19.03.12, build 48a66213fe
$ docker-compose -version
docker-compose version 1.26.2, build eefe0d31
Hello World コンテナの実行も確認できるはずです。
$ docker run hello-world
出来上がったDocker実行環境で、いろいろ Docker を使ってみてください。
ちなみに、VMを停止する場合は、 $ vagrant halt と実行してください。
注意点
カーネルはupdateしない
guest additions のバージョンが合わなくなり、うまく共有フォルダがマウントされなくなるなどの不具合が起きるため、カーネルは update しないように気をつけてください。
Vagrantfile の内容の補足
docker-compose のインストールについて
# latestバージョン番号を取得しつつ docker-compose をインストール
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | sed -e 's/[^0-9\.]//g')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
手動で docker-compose のバージョンを指定する方法を紹介されているサイトが多いですが、
ここでは、 github よりバージョンを取得していることで、上記の Vagrantfile をそのままコピペするだけで、docker-composeをインストールできるようにしています。
