🐾Server🪟/🪟DOCKER

240705 Ansible, Jenkins 통합 시작 [DockerHub, 자동 빌드 플레이북]

김쏘니 2024. 7. 5. 13:19

🖥️ 앤서블, 도커, 젠킨스 호스트 켜기

🪟젠킨스:8080

 

젠킨스 Publish over ssh 이전에 docker 사용자 추가 + 앤서블 사용자 별도 추가

젠킨스 관리 - 시스템
최하단에 계정 추가

추가 - Name부터 입력
ansible
Hostname에는 내부 IP
Username ansuser
고급 - Use password 체크
패스워드 ansuser!
하단 Test Configuration

 

 

 

 

 

//opt/docker > 현재 해당 디렉터리는 앤서블 서버에 없으므로 생성

 

 

 

 

 

 

 

 

 

 


 

새 작업 ansibletest
Maven project

 

 



 

 

종전의 세팅대로
최하단 Send build artifacts over SSH

 

 

 

Source files
target/*.war
Remove prefix
target
Remote directory
//opt/docker -> 현재 해당 디렉터리는 앤서블 서버에 없으므로 생성

 

 

 

.war 파일을 기반으로 도커 이미지 빌드하여 도커 허브에 업로드

 

도커가 없으므로 설치

dnf -y install docker

 

 

docker -v

 

 

ansuser를 docker 그룹에 추가하여 사용 권한 부여

 

usermod -aG docker ansuser

 

 

 

 



엉뚱한 곳에서 설치 안하기 위해서 cd /opt/docker

 

 

 

 

구문 넣어주기
FROM tomcat:latest
RUN cp -R /usr/local/tomcat/webapps/dist/* /usr/local/tomcat/webappss
COPY ./*.war /usr/local/tomcat/webapps

 

확인하기

 

 

빌드 시작

docker build -t 0705:v1 .

 

 

이름 잘못 썼을 경우 mv로 바꿔주기

mv Dockfile Dockerfile

 

 

 


해당 과정을 완전 자동화 하기 위해 플레이북 사용

이미지 빌드 후 아티팩트 전달(젠킨스, 자동화) -> 아티팩트 기반의 tomcat 이미지를 도커 허브에 업로드하여 사용 준비(자동화) -> 해당 이미지를 통해 컨테이너 생성(자동화) -> 사용자가 접속하여 사용

 

Docker Hub 가서 회원가입 하기 / 로그인하기

🌟도커 허브 가입해야 도커 레지스트리에 업로드 가능

 

 

 

docker, ansible 호스트가 앤서블 인벤토리에 들어가 있는지 확인

vi /etc/ansible/hosts

들어가서 [docker], [ansible] 추가

ansible 추가 시 자기 내부 IP(프라이빗 IP)

 

 

su - ansuser로 로그인

docker 및 ansible 호스트 모두에 키 교환

(ansible에는 자기 자신에게 키 교환)

 

 


😎Sublime Text에서 문법 체크

vi 4glapp.yml
ansible-playbook 4glapp.yml --check
ansible-playbook 4glapp.yml

 

1. yml 파일 만들기
2. 문법 체크
3. 실행

 

 

 


만들어진 이미지를 도커 허브에 업로드

현대 CLI에서 도커 로그인

 

docker login

 

😎dockerhub에서 만든 계정과 비번 입력(이메일 아님)

 

이미지 업로드

docker push 4glapp:latest

업로드시 

 

 

 

docker pull nginx:latest

docker pull tomcat:latest

도커 공인 레지스트리에 업로드를 시도한 것과 같아서 실패

 

이름 즉, 태그를 자신의 ID에 맞추어 변경

docker tag 4glapp:latest 자기 ID/4glapp:latest

docker tag 4glapp:latest dittomom/4glapp:latest

 

이후 docker images로 복사본 확인

 

 

docker push.mp4
7.70MB

 

 

 


 

작업 : 자동 빌드 플레이북에 추가하여 자동으로 푸쉬용 태그 붙이기 및 자동으로 푸쉬하는 플레이북을 작성한 후 동작을 확인하시오.

 

vi 4glapp.yml
ansible-playbook 4glapp.yml --check
docker push dittomom/4glapp:latest

 

   - name: docker tag
     command: docker tag -t 4glapp:latest dittomom:4glapp:latest

   - name: docker push
     command: docker push dittomom/4glapp:latest

 

 

 

 

 


 

앤서블 플레이북 실행 코드 추가

Exec command에 ansible-playbook /opt/docker/4glapp.yml

 

 

 

 

 

👾오류 발생
-t 없애기
:을 /로 바꿔주기

 

오류 확인 해보고 싶으면 Exec command에 입력했던 명령어를 컴퓨터에 입력해보기

 

 

지금 빌드 테스트에 성공했으면 젠킨스 터미널에서 git 커밋

cd
cd 4glapp
ls

 

ls로 pom.xml src 확인

 

 

일부 수정

vi /src/maimn/webapp/index.html

 

 

 

그대로 젠킨스에서 입력

git add .
git command -m "0705"
git push origin master

 

 

 

 


앤서블 호스트에서 도커 호스트로 컨테이너 배포를 위한 플레이북 작성

 

힌트 1 : /etc/ansible/hosts에 호스트 이름 추가 해놓음

 

🌟yml 파일을 따로 해도  상관 없음

 

 

 

ansible-playbook /opt/docker/4glapp.yml
ansible-palybook /opt/docker/docker.yml

 

 

 

자꾸 안돼서 그냥 4glapp.yml에 추가 했음 ㅋ

 

 

  - name: docker container
    command: docker run -d --restart always -p 8082:8080 --name 4glapp_container dittomom/4glapp:latest

 

 

 

 

 

 

힌트 2 : docker run 시 이미지 이름 자기 ID/4glapp:latest 

docker run dittomom/4glapp:latest

작동 확인 및 접속 확인

 

 

 

 


 

지금 빌드를 반복하고 수행하여 성공 여부 확인

이름, 포트 중복으로 인해 동일한 코드로 컨테이너가 생성되지 못하므로 이전 컨테이너 삭제 코드를 추가적으로 구성

 

계속된 오류 시 입력하기

chmod 777 /var/run/docker.sock

 

 

작동 확인 및 접속 확인

*permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock 오류 발생 시 해당 유저가 도커 권한을 가지고 있지 않는 상태이므로 권한 추가
다음과 같이 수정

usermod -aG docker ansuser

 

 

지금 빌드를 반복하여 수행하여 성공 여부 확인

이름, 포트 중복으로 인해 동일한 코드로 컨테이너가 생성되지 못하므로 이전 컨테이너 삭제 코드를 추가적으로 구성

 

docker.yml  or 4glapp_dep.yml

 

 

 

 

 

※따라 하지 마셈. 안됨.

'🐾Server🪟 > 🪟DOCKER' 카테고리의 다른 글

240709 새아이템 만들기  (0) 2024.07.09
240709 Deployment  (0) 2024.07.09
240704 dockertest  (0) 2024.07.04
Jenkins 설치 방법  (1) 2024.07.01
DOCKER / CONTAINER  (0) 2024.05.27