Vagrant, Ansible-playbook으로 docker-registry 실행하기

김현송·2023년 7월 24일
0

Vagrant

가상 머신을 프로비저닝하고 구성하는 툴입니다.

Ansible

구성 관리 자동화 도구입니다.
특징으로는 인벤토리가 있는데 Ansible은 관리 대상 시스템의 목록을 포함하는 인벤토리 파일을 사용합니다.
원격 시스템의 hostname 또는 IP주소를 정의하고 호스트 그룹을 구성하거나 변수를 설정하는데 사용됩니다.

Vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.hostname = "ansible.local"
    config.vm.provider "virutalbox" do |vb|
        vb.memory = 1024
    end

    if Vagrant.has_plugin?("vagrant-vbguest")
        config.vbguest.auto_update = false
    end

    config.vm.network "private_network", ip: "192.168.{xx}.{xx}"
    config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/"]

    config.vm.provision "shell", inline: <<-SHELL
        export DEBIAN_FRONTEND=noninteractive
        sudo apt -y update
        sudo apt install -y ca-certificates apt-transport-https
        sudo apt install -y software-properties-common curl
        sudo apt install -y python3-pip python-is-python3
        sudo add-apt-repository --yes --update ppa:ansible/ansible
        sudo apt install -y ansible
        sudo pip3 install docker
      SHELL
    end

위 설정을 통해 가상 머신의 os를 ubuntu LTS로 받아 실행할 수 있습니다.

vagrant up

vagrant ssh

을 통해 실행 및 접속합니다.

이제 가상머신의 자동화가 완료되었습니다.

ansible을 이용하여 docker를 설치하고 실행하는 스크립트를 작성해 보겠습니다.


ansible 은 인벤토리의 구조에 해당하는 내용을 스크립트로 작성합니다.

다음은 ansible 환경을 구성하기 위한 디렉토리 구조입니다.

site.yml

---
- hosts: localhost
  become: yes
  roles:
          - docker-install
          - docker-registry
~                              

main.yml (dir : ~/playbook/roles/docker-install/tasks)

- name: Add Docker GPG apt Key
  apt_key:
         url: https://download.docker.com/linux/ubuntu/gpg
         state: present

- name: Add Docker Repository
  apt_repository:
          repo: deb https://download.docker.com/linux/ubuntu focal stable
          state: present

- name: Update apt and install docker-ce
  apt:
          name: docker-ce
          state: latest
          update_cache: true
~                             

main.yml (dir : ~/playbook/roles/docker-registry/tasks)

# 1. Pull Docker Registry Image
- name: Pull Docker Registry image
  community.docker.docker_image:
          name: registry
          source: pull
# 2. Create directory for registry config.yml
- name: Create directory for registry config.yml
  file:
          path: /etc/docker/registry/
          state: directory

# 3. Configure registry config.yml
- name: Configure registry config.yml
  copy:
          dest: /etc/docker/registry/config.yml
          content:
                  proxy:
                          remoteurl: https://registry-1.docker.io


# 4. Create docker registry container
- name: Create docker registry container
  community.docker.docker_container:
          name: registry
          image: registry
          detach: true
          recreate: true
          restart_policy: unless-stopped
          mounts:
                - type: bind
                  source: /etc/docker/registry/
                  target: /etc/registry/
          ports:
                - 5000:5000
          state: started
# 5. Update daemon.json

- name: Update daemon.json
  copy:
          dest: /etc/docker/daemon.json
          content: |
                  {
                          "registry-mirrors": ["http://localhost:5000"]
                  }

# 6. Restart docker daemon
- name: Restart docker daemon
  systemd:
          name: docker
          state: restarted

이제 마지막으로 ansible playbook으로 docker를 설치 및 docker-registry를 실행합니다.

ansible-playbook site.yml

실행 결과

profile
안녕하세요

0개의 댓글