새로운 인스턴스 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
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/webappsdocker 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:
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에 이미지 업로드 자동화