0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

vagrantで構築したubuntuにdocker-composeを設定するサンプル

Last updated at Posted at 2021-05-04

普段使いしている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接続可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?