Vagrant Docker providerを使うと、Vagrant から Docker コンテナを起動できます。 VirtualBox と違いオーバーヘッドが少ないので、もりもり環境を量産できて便利です。
Docker image が元に環境が構築されるので、Vagrant Box と違いvagrant ssh
をするための設定を行う必要があります。
この記事では Vagrant Docker provider でvagrant ssh
ができるまでの、最小のDockerfile
とVagrantfile
を紹介します。
Vagrantfile/Dockerfile
まず次のようなVagrantfile
を記述します。
Vagrant.configure("2") do |config|
# SSHの認証情報
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.vm.define "hello-docker-provider" do |node|
node.vm.provider "docker" do |docker|
docker.build_dir = "." # Dockerfileを含むディレクトリ
docker.has_ssh = true # コンテナはSSHが有効か
end
end
end
provider に"docker"
を指定して、ブロック内に Docker の設定を行います。
build_dir
でDockerfile
を含むディレクトリを指定し、has_ssh
でコンテナで SSH が有効かどうかを指定します。
config.ssh
で Vagrant が鍵の埋め込みなどに使うための認証情報を指定します。
この認証情報でログインできるようなコンテナを作る必要があります。
続いてDockerfile
です。
FROM ubuntu:16.04
RUN apt update && \
apt install -y --no-install-recommends openssh-server sudo
RUN useradd --create-home --user-group vagrant && \
echo -n 'vagrant:vagrant' | chpasswd && \
echo 'vagrant ALL=NOPASSWD: ALL' >/etc/sudoers.d/vagrant
RUN mkdir -p /var/run/sshd
CMD /usr/sbin/sshd -D
openssh-server
とsudo
をインストールします。
そしてVagrantfile
で設定したユーザを追加してsudo
できるようにします。
最後に、sshd
をCMD
で起動します。
コンテナを立ち上げる
vagrant up
でコンテナを立ち上げます。
裏でdocker build
とdocker run
が走ります。
vagrant up
Dockerfile を更新した場合は、vagrant reload
で再びdocker build
が走り、新たなイメージでコンテナが起動します。
もちろんコンテナなので、データはコンテナ破棄と同時に消えます。
vagrant reload
vagrant ssh
でログインできて、sudo
が確認できれば OK です。
vagrant ssh hello-docker-provider -- whoami
vagrant ssh hello-docker-provider -- sudo whoami