연결된 컨테이너를 여러개 키고 싶을 때 도커 컴포즈 사용
★ 파일 구조
HTML > 웹 컨텐츠를 표시하는 데 필요한 태그를 포함하며, 데이터 구조보다는 시각적 표현을 위한 마크업 언어
XML > 태그를 사용해 데이터를 계층적으로 표현하며, 사용자 정의 태그를 만들 수 있어 확장성이 뛰어나나 읽기 쉽지않음
JSON > JavaScript 객체 표기법을 기반으로 합니다. 사람이 읽기 쉽고, 기계가 처리하기도 쉬운 형식 (변수 : 값)
YAML > JSON보다 읽기 쉽고, 들여쓰기를 통해 계층 구조를 표현
저번주에 저장한 도커 컴포즈 야밀 파일 내용 분석
ㄴ첫번째 서비스 컨테이너 내용을 mydb라는 컨테이너를 제작하는데 필요한 설정들을 정리해놓은 내용
ㄴ첫번째 서비스가 만들어져야 두번째 서비스 컨테이너가 제작된다 (의존성의 여부때문)
ㄴdepens_on == 의존성
ㄴ네트워크 2개와 볼륨 2개를 제작 (내용없음)
ㄴ들여쓰기가 중요하기에 파란 세로선을 추가하여 보기 쉽게 만듬 (캡쳐본에 추가한거라 파일엔 없음)
실행이 완료 되면 (현재 디렉토리 안에 도커 컴포즈 파일이 존재해야 함)
ㄴ 들여쓰기로 인식되는 yaml파일이기에 실패 시 포트값이 사용중인지, 들여쓰기가 제대로 이루어 졌는 지 확인이 필요
이런식으로 컨테이너가 생기는 것을 볼 수 있으며
도커 컴포즈 삭제 시 연결된 컨테이너들도 자동으로 전부 삭제된 것을 확인 할 수 있다
★현재 웹서버 관련으로 사용되는 구조
ㄴ 현재 개발자(백엔드, 프론트엔드 등) 하는일
: 소스코드를 만들고 빌드하여 실행가능한 파일을 테스트한 후 github 등 에 배포하여 올리면 종료
ㄴ 운영팀(현재의 내 미래) 에서 파일을 다운로드하여 서버에 등록
ㄴex) 파일을 도커 이미지로 만들어서 컨테이너에 배포하여 연결
ㄴ빌드부터 서버등록까지 자동화하는 애플리케이션이 존재 (젠킨스 등)
★CI/CD
ㄴ지속적으로 파일을 수정하여 빌드할 시 배포까지 업데이트
★Dev Ops
ㄴ개발팀과 운영팀과의 연계
즉, 인원을 섞어서 팀을 제작 : 용어정리 > 말이 서로 통하기에 효율이 높아진다
ㄴ개발팀측에서 쓰는 프로그램 용어를 운영팀에서 모르기에 오류 발생 시 대부분 운영팀에서 당함
여기서 우리가 해야할 일로서 Build ~ Deploy 까지 해볼 예정
ㄴ git(코드), Maven(빌드), junit(테스트), Jenkins(업로드), 도커이미지(배포), Ansible(운영), 모니터링은 기초만 배워서 직접할 예정으로 이러한 것들을 배울 예정
◆ Jenkins 가상서버 제작
클라우드 > 배포이미지 > ISO > ubuntu-20.04.2-live-server-amd64.iso 다운
로 새서버 제작 후 디스크에 다운로드 한 라이브 서버 파일 등록
English > Continue without updating >
> ens0s8 (Space) : Edit IPv4 : Manual / 92.168.56.200 등록 (gateway : 192.168.56.1 / nameserver : 8.8.8.8)
> Use an entire disk 의 Set up 체크 해제
> Done > Continue
> name : ubuntu / server's name : jenkins / username : ubuntu / password : busanit
> Install openSSH 체크([X]상태) > Done > 시스템 인스톨 완료하면 Reboot Now
> Fail 출력시 Enter 입력하기
이제 username과 password로 로그인 한 후
$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install vim git curl net-tools -y
ㄴ 만약 update가 되지 않을 경우 ping 8.8.8.8이 안되는 게 확인되면
$ sudo vim /etc/netplan/00-installer-config.yaml 에서
enp0s3,8을 dhcp4를 전부 true하고 내용은 #처리
저장하고 나온 후 $ sudo netplan apply 후 ip a 해보기
ㄴ 만약 ip가 56.대역이 아닌 경우 종료하고 host-only 네트워크 확인하기
ㄴ수업을 그대로 따라왔다면 host-only 네트워크의 dhcp서버 활성화가 꺼져있을 테니 활성화 필요
(도구 > 네트워크 > 호스트전용네트워크 / 56.1번 어댑터의 DHCP서버 > 서버활성화 체크)
◆ 젠킨스 설치
ㄴ자바설치 할 때 버전을 지정하고 싶다면 default-jre > openjdk-17-jdk (17버전) 형식으로 변경 (뒷사진의 -get는 제외)
$ sudo passwd root 로 루트 비번을 busanit로 지정하기
그후 17버전의 자바 설치하기
$ java --version 으로 설치된 자바 버전 확인
ㄴ지금은 $ echo $JAVA_HOME 을 입력해도 아무것도 나오지 않기에 환경변수를 설정해줘야 함
$ vim ~/.bashrc 의 맨 마지막에 내용 추가
ㄴ source로 적용시킨 후 echo로 확인하면 등록된 것을 확인할 수 있다.
이렇게 완료 한 후 "JAVA 17 설치" 로 스냅샷을 하나 찍어놓는다
※ 젠킨스란 : CI/CD를 자동화 해주는 것
★Maven (메이번)
- 자바를 동작하려면 jdk가 필요하다
- 웹에서 돌아가려면 프레임 워크 위에 jdk 위에 자바가 실행된다
- 메이번과 그레이들(Gradle)
- 빌드 > 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과
> WAS가 인식할 수 있도록 패키징하는 과정 및 결과물
※ Maven == 빌드 관리 도구
$ sudo apt install maven -y : 으로 메이븐 설치
ㄴ 설치 완료 후 ~/.bashrc의 내용 추가하고 적용
☆ 추가사항으로 tree 와 wget 설치
◇ 다이렉트로 젠킨스 실행하기
설치 완료 후
- $ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
하여 젠킨스 앱 다운로드 하기
이제 다운받은 jenkins.war 실행하기 (본인 ip 기억해놓기)
실행 완료 후 본인 ip:8080 입력 시 접속 가능
ㄴ비번 입력하라고 표시될 때 실행 시 표기된 비번을 입력하려고 복사하면 프로그램이 종료되기 때문에
웹페이지의 폴더를 복사하여 새 탭에 cat으로 내용확인하여 복사 + 붙여넣기로 비번 등록하여 로그인
ㄴ로그인하면 첫번째 Install 하기
- 설치 완료하면 계정명 : admin / 비번 : busanit / 이름 : admin / 이메일 : admin@a.com (형식만 맞춤)
ㄴAWS올라가면 암호와 이메일 제대로 등록 필요
이렇게 작동여부 만 확인 후 Ctrl + C 로 종료
◇ 톰캣으로 젠킨스 작동하기
※톰캣 설치
- 아무데서나 다운하면 안되기에 cd /tmp로 이동하여 다운
ㄴ .gzip 압축파일로 확인되기에 해당 파일을 갖다놓기만 해서 설치되도록 함 (.tar는 묶는 것)
ㄴ .tar로 묶어서 .gzip로 압축하는 형식 > 풀때는 tar로 품
ㄴ 톰캣다운 할 디렉토리 지정
ㄴ 보통 수동으로 다운로드 받으면 많이 이용하는 디렉토리
ㄴ tar x(압축해제) z(gzip) v(해제 과정을 출력) f(필수)
ㄴ -C : 압축을 해제할 디렉토리 지정
ㄴ --strip-components=1 : 압축파일의 =1(최상위) 디렉토리를 제외 (다시 옮기는 것을 예방)
ㄴ 입력하지 않을 경우 /apache-tomcat/안에 밑의 내용 표시될 것
컴파일 : 하나의 프로그램을 기계어로 변경
빌드 : 필요한 내용을 다 넣어서 패키지로 변경
패키지 : 여러개의 프로그램을 하나의 파일로 실행 할 수 있도록 설정해놓은 프로그램
> vim, net-tools(netstat,ifconfig 등) 등
프레임 워크 == 자바가 동작하기 위한 환경
★ JAR(Java ARchive) 파일
JAVA / Spring Boot / Spring : 이런 식으로 스프링 부트가 스프링과 자바 사이의 연결고리 역할을 하여 쉽게 인식할 수 있게 함
- 독립적인 Java 애플리케이션을 패키징할 수 있고, 실행 가능한 JAR 파일로 만들어서 개발자가 쉽게 애플리케이션을 실행할 수 있다.
- 압축된 형식으로 클래스, 리소스, 라이브러리 등을 포함하므로 배포와 전달이 용이
- main 메서드를 포함하고 있어 JVM에서 직접 실행하기 때문에 별도의 웹 컨테이너나 서버가 필요하지 않다
ㄴJAR 안에 웹 접속이 가능하도록 설정되어 있음을 알 수 있다
- 단점으로는 JSP나 서블릿 컨테이너에 대한 표준 기능을 활용하기 어렵다.
★ WAR(Web ARchive) 파일
※ WAS는 Web Server뿐만 아니라 Web Container가 있어야 한다
- Java 웹 애플리케이션을 패키징하는 데 최적화되어 있고, 웹 구성 요소인 JSP, 서블릿, 필터, 리스너 등과 웹 애플리케이션을 실행하기 위한 서블릿 컨테이너(웹 컨테이너)에서 필요한 설정 파일, 라이브러리, 리소스 등을 포함하여 한 번에 배포 및 실행할 수 있다
- 웹 컨테이너(서블릿 컨테이너)를 통해 애플리케이션을 실행하므로 다양한 웹 기능과 서버 환경을 활용할 수 있다
- 단점으로 웹 컨테이너나 서버에 종속적이기 때문에 특정한 웹 컨테이너 환경이 필요하다
※ yum, apt 등은 패키징 서비스(daemon) or 프로그램을 다운받을 수 있는 패키징 관리자 명령어
ㄴ패키징관리자가 등록하지 않은 내용은 서비스를 따로 등록해줘야 한다
$ sudo vim /etc/systemd/system/tomcat.service : 따로 등록하기 위한 파일
ㄴ서비스 전체를 재시작 하면서 톰캣도 함께 등록됨
ㄴ시작한 후 Jenkins IP:8080 접속 시 톰캣 내용 확인 가능
현재 우리는 jenkins.war이라는 애플리케이션을 내컴퓨터가 아닌 웹에서 작동시키기 위해서는 WAS가 필요
ㄴWAS를 tomcat으로 활용
지금 방화벽이 없기에 IP:8080으로 접속하면 바로 접속이 됨
ㄴ이렇게 활성화가 가능하다
해당 Text파일의 내용대로 입력
ㄴ파일의 내용을 d 를 꾹 눌러서 전부 삭제 후 esc하고 i 로 내용 입력
이렇게 완료하면 설정한 admin 계정으로 확인이 가능해진다
☆ 톰캣의 디렉토리
/bin : 톰캣이 관리하는 명령어 디렉토리
/webapps : 톰캣이 관리하는 앱이 있는 디렉토리
ㄴ여기에 jenkins.war 파일을 넣으면 tomcat을 was로 사용하여 jenkins를 작동 시킬 수 있다
복사해서 넣으니 .war 파일과 jenkins라는 디렉토리도 생성된 것을 볼 수 있다
웹에서도 새로고침하면 디렉토리가 확인된다
☆ /jenkins 디렉토리 접속 시 Not Found 확인 시 root 계정으로 접속하여 webapps/ 디렉토리 내용을 전부 삭제후 다시 설치해보기
완료 후 만들었던 스냅샷인 "JAVA 17 설치" 로 복원
(현재 상태 스냅샷 만들기는 체크 해제하여 만들지 않기)
◆ SSH 키 연결
- github 접속 (본인만의 계정 생성)
★ git
ㄴ문서가 변경된 History를 보관하여 계속 변경하다가 필요할 경우 롤백할 수 있도록 사용됨
ㄴ어떤작업을 동시에 처리 (병행처리) 할 때 사용할 수 있도록 만듬
ㄴ누가 삭제하고 추가했는지 전부 로그가 남으며 삭제하기 전이나 추가 전으로 롤백도 가능
ㄴ이러한 것을 버전관리라고 함
- 설치된 git 버전 확인
- local에 Github 계정 정보 등록
- 원격저장소에 만든 파일 업로드 하는 형식으로 이뤄진다
먼저 repository 를 만들고
ㄴ 디렉토리 이름을 레포지토리 이름과 동일하게 제작 후 해당 디렉토리에 git 부팅
ㄴ 빨간 선 부분은 github의 본인 이메일주소 입력 후 엔터 반복 입력
ㄴ 키를 rsa방식으로 암호화
ㄴ rsa 는 개인 키, pub 는 공개 키 2개를 만든 후 공개키를 서버에 제공하고 개인키와 공개키의 쌍으로 접속
★키를 만들건데 만든 후 개인키는 절대 분실하면 안됨 (분실 시 전부 바꿔야함)
ㄴcat으로 공개키를 출력하여 전부 복사하여 Github의 본인 Settings 에서 SSH-key로 등록
ㄴ 입력 후 .ssh$vim config 하여 내용 입력
ㄴ git 유저계정으로 github.com 접속 시 개인키를 입력한다
(ssh ubuntu@192.168.56.105 느낌)
ㄴ config 파일의 권한을 소유자만 읽고 쓰는 권한 부여
ㄴ 키 접속이 정상 작동 되는 것을 볼 수 있다
◇ 키 만들기 (커맨드 창)
ㄴ이렇게 만들면 .ssh폴더에 만들어 진 것을 볼 수 있다
만들어진 id_rsa.pub파일을 Jenkins 도커로 옮긴 후
도커에서 등록 설정을 하면
ㄴ 몇개 적지 못한 부분은 다음주 입력하신다 하심 (시간부족으로)
접속 시 에 id_rsa를 연결해놓으면 비번입력없이 바로 접속이 가능해진다
'AWS 교육 > Docker-AWS (월)' 카테고리의 다른 글
241125_Jenkins-Server(Target, SSH, Pipeline) (0) | 2024.11.25 |
---|---|
241118_SSH-key, Jenkins, Github-spring (0) | 2024.11.18 |
241104_도커 - 파일 최적화, 컴포즈 (0) | 2024.11.04 |
241028_Data Container, Build, Dockerfile, 이미지 경량화 (0) | 2024.10.28 |
241021_Docker Volume (0) | 2024.10.21 |