1. Ansible이 설치되어 있는 VM 작성
1. Vagrantfile
- 내 환경에서는 IP 주소 설정이 불가능하다고 함
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-20.04-arm64"
config.vm.hostname = "ansible.local"
config.vm.provider "vmware_fusion" do |vw|
vw.memory=4096
end
if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = false
end
config.vm.network "private_network"#, ip: "192.168.33.46", gateway: "192.168.33.1", dns: "8.8.8.8"
config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/"]
config.vm.provision "shell", inline: <<-SHELL
#다음은 ansible을 설치하기 위한 쉘스크립트 시작
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
2. Docker 설치하는 Playbook 작성
ansible-playbook/ roles/docker-install/tasks/main.yml
- 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
3. Docker CE 설치
1. Docker Registry Pull Through Cache 구성
2. Ansible 플러그인 확장
sudo ansible-galaxy collection install community.docker
sudo ansible-galaxy collection list
4. Ansible Docker 규칙 활용
1. 이미지 Pull 규칙(Docker Pull
- name: [이미지 이름]
- source: pull
2. 이미지 컨테이너 생성 규칙(Docker run)
- name: [컨테이너 이름]
- image: [이미지 이름]
- commnad: [컨테이너 실행시 명령어]
- mounts: [컨테이너 실행 시 Bind 할 정보]
- state: present
5. 새로운 Role 생성
1. Docker Registry Role 디렉토리 생성
ansible-playbook/roles/docker-registry/
2. Task 정의하기
ansible-playbook/roles/docker-registry/tasks/main.yml
- name: Pull Docker Registry image
community.docker.docker_image:
name: registry:2
source: pull
- name: Create directory for registry config.yml
file:
path: /etc/docker/registry
state: directory
- name: Configure registry config.yml
copy:
dest: /etc/docker/registry/config.yml
content: |
proxy:
remoteurl: https://registry-1.docker.io
- name: Create docker registry container
community.docker.docker_container:
name: registry
image: registry:2
detach: true
recreate: true
restart_policy: unless-stopped
mounts:
- type: bind
source: /etc/docker/registry/
target: /etc/registry
ports:
- 5000:5000
state: started
- name: Update daemon.json
copy:
dest: /etc/docker/daemon.json
content: |
{
"registry-mirrors": ["http://localhost:5000"]
}
- name: Restart docker daemon
systemd:
name: docker
state: restarted
6. site.yml 구성
1. ansible-playbook/site.yml
---
- hosts: localhost
become: yes
connection: local
roles:
- docker-install
- docker-registry
7. 실행
ansible-playbook site.yml

글이 잘 정리되어 있네요. 감사합니다.