2025-07-09 ansible, docker 연동

sso·2025년 7월 9일

AWS

목록 보기
22/34

1. ansible 인스턴스 생성

새로운 인스턴스 4gl-ansible
퍼블릭, 보안 그룹 default 및 bastion

sudo su -
hostnamectl set-hostname ansible
exec bash
useradd ansibleadmin
passwd ansibleadmin(1234)

vi /etc/ssh/sshd_config

  • PasswordAuthentication yes

systemctl restart sshd

visudo

  • ansibleadmin ALL=(ALL) NOPASSWD: ALL

dnf -y install docker
systemctl --now enable docker
dnf -y install ansible
vi /etc/ansible/hosts

  • [docker]
    docker1 ansible_host=10.0.28.144 ansible_user=ansibleadmin ansible_ssh_pass=1234 ansible_become=yes ansible_become_method=sudo ansible_become_password=1234

ssh-keygen -t ed25519
ssh-copy-id ansibleadmin@10.0.28.144
ansible all -m ping

2. docker 인스턴스

useradd ansibleadmin
passwd ansibleadmin(1234)
visudo

  • ansibleadmin ALL=(ALL) NOPASSWD: ALL

ansible 인스턴스

vi /etc/ansible/hosts

  • [ansible]
    10.0.0.9

ansible all -m ping

[docker]는 성공했지만 [ansible]은 실패함
이유는 해당 명령어는 ssh 접속인데 ansible 인스턴스 내에 ssh 키를 복사해놓지 않았기 때문에 실패한 것임
때문에 본인이 본인에게 ssh 작업을 수행하기 위해 키를 전송해야함

ssh-copy-id ansibleadmin@10.0.0.9
ansible all -m ping

vi /etc/ansible/hosts

  • [ansible]
    10.0.0.9 ansible_user=ansibleadmin ansible_ssh_pass=1234 ansible_become=yes ansible_become_method=sudo ansible_become_password=1234

ansible all -m ping

드디어 성공...

vi /opt/devopsjob/Dockerfile

FROM tomcat:latest
RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
COPY ./*.war /usr/local/tomcat/webapps

docker build -t tomcat0709:v1 .

나는 구글 로그인이기 때문에 docker hub에서 password > reset 으로 비밀번호를 한 번 초기화해준 후 도커 로그인

docker login

하지만 현재 도커 허브가 모종의 이유로 되지 않기에 AWS 실습 진행

IAM 역할에서 해당 권한을 추가해줘야함

ansible 인스턴스 > 보안 > IAM 역할 수정에서 4gl-role-web을 선택

ECR에서 푸시 명령어를 ansible 인스턴스에서 실행하면 업로드 완료

URI
자기ID/이미지이름

URI를 가져가서 컨테이너 생성
8082 포트로 노출

앤서블공인IP:8082/4glapp

docker run -d -p 8082:8080 --name 4glapp-8082 591416363309.dkr.ecr.ap-northeast-2.amazonaws.com/tomcat0709

앤서블공인IP:8083/4glapp

docker run -d -p 8083:8080 --name 4glapp-8082 591416363309.dkr.ecr.ap-northeast-2.amazonaws.com/tomcat0709

vi 4glapp_build.yaml

---
- hosts: ansible

  tasks:

    - name: create docker images
      shell: docker build -t tomcat0709 .
      args:
        chdir: /opt/devopsjob

vi 4glapp_build.yaml

코드를 추가한 후 해당 플레이북을 젠킨스에서 실행


  • hosts: ansible

    tasks:

    • name: create docker images
      shell: docker build -t tomcat0709 .
      args:
      chdir: /opt/devopsjob

    • name: tag docker images
      shell: docker tag tomcat0709 vehuiah/tomcat0709

    • name: push docker images
      shell: docker push vehuiah/tomcat0709

자동 빌드를 위해 Poll SCM


jenkins에서 git push 성공 후 자동 빌드 확인

jekins의 git 최상단 소스 코드 디렉터리에서 작업

vi src/main/webapp/index.html
git add .
git commit -m "0709"
git push origin master

앤서블 서버에서 docker로 이미지 빌드 이후 컨테이너 생성을 명령

ansible 서버 → docker 호스트에 컨테이너 생성

vi 4glapp_container.yaml


  • hosts: docker

    tasks:

    • name: create docker container
      shell: docker run -d --name tomcat0709-con --restart always -p 8081:8080 vehuiah/tomcat0709

ansible-playbook 4glapp_container.yaml
최종 실행하여 결과 확인

Unable to find image '자기ID/tomcat0709:latest' locally
docker: Error response from daemon: pull access denied for 자기ID/tomcat0709, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
이미지 접근 권한 문제이므로 로그인


연구과제

jenkins → 도커 허브로 이미지 업로드 자동화
추가적으로 ECR에 이미지 업로드 자동화

profile
오늘도 하나씩 해결해 나가자!

0개의 댓글