普段使いしているmacでちょっとした検証しようと思った時によく使うサンプルです。
※virtualboxとvagrantがインストールされていることが前提、この二つのインストールに関しては公式からパッケージダウンロードしてインストールするだけでいいと思います。
なお、私が初回にインストールした時にvagrant upが失敗して下記エラーが出ましたが
下記記事を参考にして動くようになりました。
https://qiita.com/nemui_/items/e6eb45210c173651b6ff
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.
#概要
ubuntuを3台構築し、その中にdockerとdocker-composeをインストールします。
ネットワークは3台ともブリッジとホストオンリーアダプタ接続となっています。
ブリッジ接続:192.168.1.0/24(自宅のPCが192.168.1.0/24のため適当にIP降ってます)
ホストオンリーアダプタ接続:192.168.33.0/24
なお、vagrantfileにはブリッジ接続に使用するNICの名前を入力する必要があります。
具体的には「en0: Wi-Fi (Wireless)」この部分を「nmcli d s」とか「ifoncifg」で出力されたNIC名に書き換えてあげれば動作します。
※1 仮にvagrantfileに入力したNIC名が間違っていたとしても、vagrantからどのNICを使うか?というメッセージが出力されます。
そこで出力されたNIC名の番号を入力すれば正常に動作します。
※2 ブリッジで接続していれば基本的に何も考えずにインターネットも含めすべて接続できますが、
会社だと適当なIPを割り振りできないため、ホストオンリーアダプタの記載も書いています。
参考:https://qiita.com/feifo/items/0fde474005589afcff68
#使い方
ホームディレクトリ作成
ホームディレクトリ配下に「vagrant」ディレクトリを作成します。
$ mkdir -p ~/vagrant/provision
Vagrantfile作成
下記コマンドでVagrantfileを配置します。
cat <<EOF > ~/vagrant/Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "bento/ubuntu-20.04"
config
config.vm.provider "virtualbox" do |vb|
vb.cpus = 1
vb.memory = 1028
end
config.vm.define :ubuntu1 do | ubuntu1 |
ubuntu1.vm.hostname = "ubuntu1"
ubuntu1.vm.network :private_network, ip: "192.168.33.10", virtualbox__intnet: "intnet"
ubuntu1.vm.network "public_network", ip: "192.168.1.151", bridge: "en0: Wi-Fi (Wireless)"
end
config.vm.define :ubuntu2 do | ubuntu2 |
ubuntu2.vm.hostname = "ubuntu2"
ubuntu2.vm.network :private_network, ip: "192.168.33.20", virtualbox__intnet: "intnet"
ubuntu2.vm.network "public_network", ip: "192.168.1.152", bridge: "en0: Wi-Fi (Wireless)"
end
config.vm.define :ubuntu3 do | ubuntu3 |
ubuntu3.vm.hostname = "ubuntu3"
ubuntu3.vm.network :private_network, ip: "192.168.33.30", virtualbox__intnet: "intnet"
ubuntu3.vm.network "public_network", ip: "192.168.1.153", bridge: "en0: Wi-Fi (Wireless)"
end
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "provision/vagrant.yml"
end
end
EOF
ansibleファイル作成
docker設定用のansibleファイルを配置します。
cat <<EOF > ~/vagrant/provision/vagrant.yml
- name: provisioning
hosts: all
become: yes
gather_facts: True
max_fail_percentage: 0
vars:
app_path: /vagrant
home: /home/vagrant
ruby_version: 2.5.1
tasks:
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
- name: set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
- name: Add docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
become: yes
- name: Install basic list of packages
apt:
name: "{{ packages }}"
state: present
update_cache: yes
vars:
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
become: yes
- name: Add apt repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
become: yes
- name: Install Docker packages
apt:
name: "{{ packages }}"
state: present
vars:
packages:
- docker-ce
- docker-ce-cli
- containerd.io
become: yes
- name: Add user to docker group
user:
name: "{{ ansible_env.USER }}"
groups: docker
append: yes
become: yes
- name: Ensure docker service is enabled
systemd:
name: docker
state: started
enabled: yes
become: yes
- name: Install docker-compose
get_url:
url: "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-{{ ansible_system }}-{{ ansible_architecture }}"
dest: /usr/local/bin/docker-compose
mode: +x
become: yes
EOF
vagrant起動
下記コマンドでvagrantを起動させます。
$ cd ~/vagrant
$ vagrant up
起動が完了したら vagrant ssh ubuntu1 でSSH接続可能です。