ansible(앤서블)은 자동화 툴입니다.

앤서블 공부하려고 vm 세팅을 해보려고 했는데, 어째서인지 m1에선 버추얼박스에 리눅스 설치하는게 자꾸 안돼서.. 로컬에서 docker compose 이용해서 리눅스 인스턴스(컨트롤러1 + 타겟머신2) 세팅을 해봤습니다

vm보단 할 수 있는게 좀 제한적이겠지만 공부/테스트용으로 적당합니다.

앤서블 컨트롤러 -> 타겟 호스트로 ssh 붙게 했고, 유저명과 패스워드는 vince / 1234로 설정했으니 혹시 쓰실 분들은 참고해주십쇼

 

FROM ubuntu:22.04

WORKDIR /usr/app

RUN apt-get update && \
    apt-get install -y netcat iputils-ping openssh-client openssh-server software-properties-common && \
    add-apt-repository -y --update ppa:ansible/ansible && \
    apt-get install -y ansible && \
    mkdir /var/run/sshd && \
    chmod 0755 /var/run/sshd

COPY . .
COPY ansible.cfg /etc/ansible/

EXPOSE 22

ENTRYPOINT service ssh restart && tail -f /dev/null

1) Dockerfile.controller

우분투에 앤서블을 깔고 ssh 서비스를 실행합니다

 

[defaults]
host_key_checking = false

ansible.cfg 파일엔 위처럼 host key checking 을 꺼놨습니다.

 

FROM ubuntu:22.04

WORKDIR /usr/app

RUN apt-get update && \
    apt-get install -y netcat iputils-ping openssh-client openssh-server && \
    mkdir /var/run/sshd && \
    chmod 0755 /var/run/sshd && \
    useradd -p $(openssl passwd -1 1234) --create-home --shell /bin/bash --groups sudo vince && \
    usermod -aG sudo vince

EXPOSE 22

ENTRYPOINT service ssh restart && tail -f /dev/null

2) Dockerfile.target

타겟 호스트입니다. root 패스워드 바꾸는게 안돼서 그냥 유저 하나 추가하고 sudo 그룹에 넣었습니다

 

services:
  controller:
    container_name: ansible-controller
    build:
      context: .
      dockerfile: Dockerfile.controller
    ports:
      - "15510:22"
    networks:
      - ssh

  target1:
    container_name: ansible-target1
    build:
      context: .
      dockerfile: Dockerfile.target
    ports:
      - "15511:22"
    networks:
      - ssh

  target2:
    container_name: ansible-target2
    build:
      context: .
      dockerfile: Dockerfile.target
    ports:
      - "15512:22"
    networks:
      - ssh

networks:
  ssh:
    driver: bridge

3) docker-compose.yml

compose 파일입니다. 도커파일은 그냥 귀찮아서 매번 로컬에서 빌드하게 했습니다 ㅎㅎ;

exec로 붙을 거라서 컨테이너명은 지정해줬습니다.

 

# 키고 끄기
docker compose up -d
docker compose start
docker compose stop
docker compose down

# 인스턴스에 접속
docker exec -it ansible-controller /bin/bash
docker exec -it ansible-target1 /bin/bash
docker exec -it ansible-target2 /bin/bash

# 이미지 정리
docker images | grep ansible- | awk '{print $1}' | xargs docker image rm

사용법은 간단합니다

docker compose로 인스턴스 띄운 후, exec로 컨트롤러에 들어가서 ansible, ansible-playbook 등을 써보면 됩니다

ansible-playbook playbooks/copy-file.yml -i inventory.ini

controller에서 이런식으로 쓰면 playbook을 실행할 수 있습니다

 

 

GitHub - sh-cho/ansible-study: 앤서블 공부용

앤서블 공부용. Contribute to sh-cho/ansible-study development by creating an account on GitHub.

github.com

로컬 환경 만들면서 리파지토리로 정리해봤습니다ㅎㅎ

반응형