개발자로 후회없는 삶 살기
오픈소스 SW PART.도커 심화 본문
서론
교과목 11주차 강의 내용을 정리해 보겠습니다.
본론
- 최종 목표
쿠버네티스를 적용한 도커 기반 mlops 플랫폼을 오픈 소스 중심으로 구축하고 미니 프로젝트를 수행 > 레드마인, 젠킨스 등을 전부 도커 위에서 진행하여서 이미지로 만들 것입니다.
-> 텔레그램을 한 이유
기본적으로 mlops 시스템은 알림을 제공합니다. + 텔레그램으로 파이썬 코드에 명령을 내릴 수도 있습니다.
> 텔레그램 봇을 먼저 한 이유 : 실무에 나가면 알람이 굉장한 스트레스가 됩니다다. 어디는 메일로 어디는 슬랙으로 어디는 레드마인으로 하기도 합니다. 어쨋든 내가 필요한 알람을 나에게 오게 하는 것이 중요합니다. 텔레그램 봇을 기초하여 알림 기능 아이디어를 발전시킬 수 있습니다.
-> 텔레그램 봇의 목적
일반적으로 스크린 커맨드로 보여주고 명령을 내립니다. 혹은 이메일로 보여주고 rest api로 명령을 내립니다. 봇이 알람을 보여주고 우리는 명령을 내릴 것입니다.
-> 레드마인 + 노션의 목적
프로젝트 일정, 기능, 이슈 관리 ∴ 전부 프로젝트 깃허브에 연동할 필요가 있습니다.
-> 젠킨스의 목적
지속적인 통합입니다.
- 과제를 하는 이유
mmdetection이 cv을 간편하게 사용할 수 있도록 해줍니다. 허깅 페이스는 nlp를 사용할 수 있게 해줍니다. + tensor hub까지 이 3가지만 활용할 수 있다면 모든 cv, nlp task를 다 할 수 있습니다.
- 도커 심화 이해 1단계
=> 도커가 무엇인가요? 카카오톡 어플의 다운로드나, 내가 만든 어플리케이션 배포 기능 등 평소에 어렵게 느껴지는 다운로드, 배포를 편리하게 제공하는 어플리케이션이라고 보면 됩니다. 남이 만든 파일 다운로드 쉽게 하고 내가 만든 파일 배포 쉽게 하도록 도와주는 것입니다. 이미지로 배포되니 이미지의 손쉬운 이동, 전송을 도커가 해주는 것입니다.
=> 도커 레이어 저장 방식의 이해
nginx를 가져오면 6개의 레이어로 이루어져 있습니다. 기본은 최신 버전입니다. stable 안정화 버전을 다운 받으면 최신 버전과 다운받는 메세지의 차이가 있습니다.
이미 존재하는 레이어가 있다고 뜹니다. 히스토리로 확인해 보면 어떤 명령어로 이 레이어를 구축했는지 히스토리가 나옵니다.
> 각각 다른 명령어로 레이어를 구축한 것을 확인할 수 있는데 버전에 따라서 내용이 달라지니 레이어도 달라지는 것입니다. 따라서 공통된 레이어는 똑같고 달라진 내용은 다른 레이어로 작성하여 다른 레이어를 가져오는 것입니다. > 버전에 따라서 레이어가 조금씩 달라서 같은 레이어는 이미 다운 받은 것을 쓰고 다른 레이어만 따로 가져온 것입니다.
-> 필요한 레이어만 가져오면 되므로 굉장한 효율성을 가집니다.
※ 다운로드 메세지 내용
6개의 레이어/ digest로 checksum 확인(sha 암호화)/ 상태 (ex 다운로드)/ 가져온 곳 (ex io ngnix 회사)
=> 도커의 문제점
도커 이미지 안에 데이터를 저정하고 있다가 껐다 키면 데이터가 사라져서 다시 처음에 다운 받은 이미지가 되어버립니다.
=> 도커 이미지의 통신 방법 (컨테이너의 통신 방법)
마이크로 아키텍쳐 방식으로 합니다. > 이미지 하나들이 독립된 하나의 pc이다.(컨테이너 하나가 각각 독립된 환경 속 pc라고 생각하면 쉽습니다. chroot를 생각하면 독립된 공간을 만드는 것과 같습니다.) 얘네끼리 통신을 하는 방법이 1. rest api 혹은 2. 호스트 도커랑 공유 폴더를 가져서 파일을 주고받고 명령을 주고받는 방법이 있습니다.
ex) 레드마인, 젠킨스 등은 다 독립된 것들이다. 독립된 애들의 데이터는 독립된 공간 안에만 있습니다. > 그러면 내 호스트 OS에 공유 폴더를 만들어서 내 wsl의 특정 폴더와 레드마인의 폴더를 연결하여 데이터를 공유하는 것이 2번 방식입니다. (= 이게 파일을 주고받는 방식입니다.) 그러면 공유 폴더로 다른 이미지들과도 데이터를 주고받을 수 있는 것입니다.
+ 도커 이미지가 아닌 어플과도 데이터를 주고받을 수 있습니다. 왜냐면 공유 폴더는 호스트 OS에 생겨서 로컬 파일 시스템에 폴더가 생기는 것이니 호스트 OS에 연결된 이미지가 아닌 어플리케이션 또한 접근 가능합니다.
> 결론적으로 공유는 통신 프로토콜(rest api)과 공유 폴더로 합니다.
※ virtual box에서 할 때는 어색했는데 wsl에서 하니깐 이해가 자연스럽다!
> wsl에서 nginx 컨테이너로 띄우고 내 윈도우에서 localhost:8080 URL 검색하면 접속이 될까요? 절대 안 됩니다. 내 로컬은 윈도우고 nginx는 wsl이니 다른 곳입니다. virtual box에서 한 것과 같은 상황인 것입니다. 어떻게 해야 할까요? 명령어를 바꾸면 됩니다.
p 명령어로 로컬 호스트 8080과 컨테이너의 80을 포트포워딩을 시킵니다.
-> 된 이유 : 윈도우 위에 wsl 위에 우분투 위에 도커 위에 엔진엑스입니다. > 이걸 윈도우로 어캐 접근할까요?
> 엔진엑스 로컬 호스트는 도커 위의 이미지입니다. 나는 윈도우이고 엔진엑스를 윈도우에서 돌렸지만 아예 다른 공간입니다.
-> 방법은 2가지입니다 : 1. 별도의 네트워크를 설정해 주면 내 윈도우에서 바로 들어갈 수 있습니다. (iptables! 역시 별도의 네트워크와 별도의 드라이브가 필요합니다.)
> 2. 그게 아니라면 윈도우에서 wsl로 가고 wsl에서 우분투에게 요청을 하고 우분투가 엔진엑스를 불러줍니다. 도커는 거치지 않습니다.
- 프로젝트 진행
1. 도커로 젠킨스 설치
예전에 레드마인을 했었습니다. 이번엔 젠킨스를 설치해 보겠습니다. > 다운 받고 실행하면 끝입니다! v는 실제 내 공유 폴더로 (내 로컬의 젠킨스라는 폴어와 jenkins 이미지의 var/jenkins_home이라는 폴더랑 맞춰놓습니다. 따라서 호스트 PC에서 jenkins 폴더에 무언가를 넣으면 젠킨스 컨테이너의 jenkins_home에도 들어가고 jenkins 컨테이너에서 jenkins_home에 뭘 넣어도 호스트 PC의 jenkins 폴더에 들어갑니다. 즉, 연결됩니다.
하다 보면 unlock 젠킨스라고 뜹니다. 우리는 도커 이미지 안의 젠킨스로 들어가야 합니다. 그래서 exec -it /bin/bash를 쓰게 됩니다. > 지금이게 뭐 하는 거냐면 wsl의 도커안의 젠킨스로 들어간 겁니다. wsl의 도커안에 들어가서 패스워드를 찾고 다시 윈도우의 unlock에 패스워드를 치면 됩니다.
- 레드마인 도커로 설치하기
옛날에 했던 건데 교수님께서 일부러 경로를 다르게 알려주셨다고 했습니다. 따라서 오늘 해결합니다. > 하는 방법은 똑같습니다. > mysql 옵션의 의미는 패스워드는 secret이고 DB는 레드마인을 위해 쓰겠다는 의미입니다.
+ 공유 폴더는 여러 개 가능합니다. mysql 이미지를 끄면 다 날라가니깐 이미지 내 폴더를 로컬 외부 폴더와 연결해둡니다. > 근데 이때 -v를 여러 개 둘 수 있습니. -v a : mysql/a -v b:mysql/ 가능합니다.
+ 다른 방법은 레드마인은 이미지로 쓰는데 mysql은 내 로컬 호스트 pc에 설치하는 것입니다. db 같은 경우는 로컬에 설치하는 것을 추천한다고 하셨습니다. 즉 데이터가 날라가면 절대 안 되는 것은 + 트랜잭션이 많이 발생하는 것은 이미지로 설치하지 말고 로컬에 설치합니다.
> 레드마인은 -v를 두 번 하여 공유 폴더를 두 개 만들 것입니다.
'[개발자] > [교과목]' 카테고리의 다른 글
오픈소스 SW PART.실습 과제1 (0) | 2022.12.07 |
---|---|
오픈소스 SW PART.쿠버네티스 (0) | 2022.12.07 |
오픈소스 SW PART.MLops mini 프로젝트 설명 및 도입 (0) | 2022.11.09 |
오픈소스 SW PART.MLops (0) | 2022.11.02 |
오픈소스 SW PART.개발 지원도구 종합 실무 사례 (0) | 2022.10.19 |