가상 머신을 프로비저닝하고 구성하는 툴입니다.
구성 관리 자동화 도구입니다.
특징으로는 인벤토리가 있는데 Ansible은 관리 대상 시스템의 목록을 포함하는 인벤토리 파일을 사용합니다.
원격 시스템의 hostname 또는 IP주소를 정의하고 호스트 그룹을 구성하거나 변수를 설정하는데 사용됩니다.
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 환경을 구성하기 위한 디렉토리 구조입니다.
---
- hosts: localhost
become: yes
roles:
- docker-install
- docker-registry
~
- 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
~
# 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