Docker + Ansible: 인프라 자동화를 위한 체계적인 설정 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- 개발자 및 DevOps 엔지니어: 복잡한 서버 관리와 배포 프로세스를 체계적으로 자동화하고 싶은 사람들
- 난이도: 중간(Ansible 기본 지식 필요)
핵심 요약
- 모듈화된 Ansible 구조로 인프라 자동화를 간결하게 구현
ansible_facts
로 OS별 패키지 설치,tags
로 특정 작업 실행,handlers
로 서비스 재시작 관리roles/
디렉터리 내defaults/main.yml
,tasks/
,handlers/main.yml
등 핵심 구성 요소 포함
섹션별 세부 요약
1. 구조 설계
ansible/
디렉터리에README.md
,ansible.cfg
,hosts.ini
,requirements.yml
등 기본 파일 구성roles/
디렉터리 내server-tools/
역할을 통해defaults/main.yml
,tasks/
,handlers/main.yml
등 모듈화tests/
디렉터리 내inventory
및test.yml
을 통해 테스트 자동화 지원
2. OS별 패키지 설치
ansible_facts
사용으로 RedHat/Debian 기반 Linux 배포판에 맞는 패키지 설치
name: Install web server based on OS family
package:
name: "{{'httpd' if ansible_facts['os_family'] == 'RedHat' else 'apache2'}}"
state: present
os_family
변수를 통해 호환성 확보3. 반복 작업 최적화
loop
사용으로 사용자 생성 작업 간결화
- name: Create users
user:
name: "{{item.name}}"
groups: "{{item.groups}}"
loop: "{{user_list}}"
user_list
예시:user_list:
- { name: "alice", groups: "docker" }
- { name: "bob", groups: "sudo" }
4. 핸들러 활용
notify
로 서비스 재시작 트리거
- name: Update NGINX config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart NGINX
handlers/main.yml
에서 실제 서비스 재시작 명령- name: Restart NGINX
service:
name: nginx
state: restarted
5. 태그 기반 작업 실행
tags
로 특정 작업만 실행 가능
- name: Sync NGINX config
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
tags:
- nginx
- config
ansible-playbook install-server-tools.yml --tags config
6. 도구 설치 역할
roles/server-tools/tasks/install_docker.yml
과wander.yml
을 통해 Docker, Wander 설치get_url
모듈로 외부 이진 파일 다운로드
- name: Install Wander binary
get_url:
url:
dest: /usr/local/bin/wander
mode: '0755'
결론
- 모듈화된 Ansible 구조를 통해 인프라 자동화의 유지보수성과 확장성을 극대화
ansible_facts
,tags
,handlers
등 핵심 기능을 활용해 복잡한 배포 프로세스를 간결하게 처리- 실행 명령 예시:
ansible-playbook -i hosts.ini install-server-tools.yml -v