目次
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のインストールも行っていますが、使用しない場合は、削除してもらっても構いません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
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実行環境が構築できています。
1 2 |
$ docker -v Docker version 19.03.12, build 48a66213fe |
1 2 |
$ docker-compose -version docker-compose version 1.26.2, build eefe0d31 |
Hello World コンテナの実行も確認できるはずです。
1 |
$ docker run hello-world |
出来上がったDocker実行環境で、いろいろ Docker を使ってみてください。
ちなみに、VMを停止する場合は、 $ vagrant halt
と実行してください。
注意点
カーネルはupdateしない
guest additions のバージョンが合わなくなり、うまく共有フォルダがマウントされなくなるなどの不具合が起きるため、カーネルは update しないように気をつけてください。
Vagrantfile の内容の補足
docker-compose のインストールについて
1 2 |
# 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をインストールできるようにしています。