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을 실행할 수 있습니다
로컬 환경 만들면서 리파지토리로 정리해봤습니다ㅎㅎ
반응형