관리 메뉴

A seeker after truth

데센프 3주차 본문

수업 필기/Docker, Kubernetes(20-1) - 공개글!

데센프 3주차

dr.meteor 2020. 3. 30. 15:01

5. 도커 입문

4. Container 기술은 이미 이전부터 있었던 기술인데, 유독 Docker가 다른 Container 기술과 비교하여 많이 사용되는 이유를 설명하시오.(14)

 

6: LXC = 리눅스 컨테이너

컨테이너 기술 = 필요한 어플리케이션을 설치할 때 운영체제에 필요한 것 포함, 운영체제에 configuration 해야하는 것 포함, 라이브러리 등등의 것을 한데 묶어서 설치하고, 지울때 깨끗하게 지우는. 이 기능을 하는 도커 이전의 소웨 중 가장 유명한게 LXC.

도커의 라이센스는 가장 유명한 아파치 라이센스를 쓰는데, 가장 큰 특징은 바로 오퍼레이팅 시스템 부문을 보면 리눅스 위에 버클리 유닉스 dsd, 윈도우즈, 맥os ...  지원하지 않는 운체가 없다.

리눅스 컨테이너와 비슷한 기능을 하는 도커 하지만 도커의 가장 큰 장점은 가장 많은 운체를 지원하고, 이에 기반해서 만들면 운체에 상관없이 동일한 기능을 해준다는 것

리눅스 컨테이너 외에도 이런 기술을 가진 소웨는 많았지만 그 중 가장 성공한 것이 도커&쿠버네티스인 것 뿐.

 

도커 기반 어플리케이션에 대한 건 뒤에 가서 볼 것.

 

12: 빨간 표시된 것들 잘 보기

도커 덕에 인프라의 스펙과 독립적인 어플리케이션 제작 가능

 

13: 셋의 관계. 도커 파일을 빌드하면 도커 이미지, 이를 실행하면 도커 컨테이너. 파일에 있는 코드가 바로 인프락스트럭처 에즈어 코드.

이 코드는 뭔 내용이냐 -  우분투 설치, 그 속의 소웨들 업뎃, 내가 필요로 하는 개발 환경이 파이썬 쓰기를 setup하고, 필요한 소웨를 다시 업글.

첫 줄은 내가 지금 만드는 이 이미지를 우분투 최신 버전으로 만들어달란 말. 사이트 가서 다운받고 설치하고 configuration잡고... 하는 과정이 한방에 생략됐다는 것에 의의!

 

14:인터체인저블이란 무엇인가. 동일한 스펙의 이미지를 여러개 사용하는 컨셉은 유연성이 달린다. 다른 버전이 필요한 경우에 수정이 불가능하기때문. 하지만 도커는 interchangeable하여 버전 업/다운 해야할 때 자유롭게 그것을 할 수 있음.

 

15: 서버 플밍 하다보면 운체의 변수를 건드릴 때가 있다(path, 환경변수 - 어떤 플램을 실행하려 하는데 디스크에 어딨는지 찾아갈 수 있도록 함. 또, 운체를 setup 하는 configuration 파일들) 결국 실행하는 프로그램과 그 사촌인 라이브러리, 그 밑에 깔릴 커널에 해당하거나 미들웨어, 런타임, 기타 라이브러리 등등... 코드가 아니더라도 환경설정과 관련된 많은 것들- 이걸 다 도커 이미지 안에 담을 수 있다는 것.

한 번에 설치되고, 지울땐 이게 동시적으로 깨끗하게 지워진다!

 

17: 레지스트리란? 웹~ 임베디드 중에 뭐~ 할 떈 이런 환경이 좋던데? - 하는 노하우를 담아 만든 이미지들이 공개되어 있다!

 

만약 이미지를 실행했는데 자기가 갖고 있는 것 중에서 없다? 그러면 도커 허브에서 이미지를 찾아 pull 한다.

digest는 이 이미지가 문제가 없단 것을 컨펌했단 의미다.

도커 데몬 = 이미지를 기반으로 프로그램을 실행하는 아이

docker run -it(옵션 의미: 인터랙션을 주고받는다는 의미. 손으로 타이핑한다는 것) ubuntu bash

uname 명령어: 넌 누구세요? 알 수 있음

왜 우분투 이미지 크기가 84메가 밖에 안될까? -  컨테이너 이미지로 있는 버전의 우분투는 우분투 풀버전이 아니다.

 

23: 웹사이트를 통해 무료로

 

실습:

-d: demon이라 그러는데

--rm: 백그라운드 모드로 + 임무가끝나면 자동으로 지워줘

--name ~

이제 뒤에서 우분투가 돌아가고 있고. 배쉬를 손으로 직접 실행하려고 하면?

docker exec(실행) -it ubuntuos /bin/bash

exit: 우분투에서 나오고자 할 때.

실행하고 있는 것을 눈으로보고자 할 때 docker container ls

비슷하게  docker image ls

 

추가로 파썬 실행해보고자 하면

docker pull python

다운로드 된 것이 파썬 이미지 최신 버전(3주전!) 임을 확인 가능

docker container run -it -d --rm --name pythonclid python:latest

docker exec -it pythonclid /bin/bash  --->이게 가능한 이유? pythonclid는 이 이미지 밑에 리눅스 운체가 있고 파썬2가 동작하기 위한 것들을 함께 갖고 있는 것. 이에 대한 설명은 도커 허브에 가서 파썬을 보면 거의 써있. 그 안에 뭘 넣었는지.

 

docker container stop ubuntuos

docker image rm -f(잘 안지워질 때 대비. 사실 많이 씀) (이미지 아이디)

 

5. Docker daemon과 Docker CLI (client)의 관계를 설명하시오.(10~11)

* 데몬

- 도커 api를 통해 cli의 요청을 듣고 도커 객체를 관리한다. 다른 데몬의 요청을 듣기도 한다.

* cli

 

 

 

 

 

 

6. 도커 오버뷰

5: 커뮤니티 에디션이 곧 오픈소스. 오픈소스/유저그룹/공짜 란 의미로 보통 받아들여짐.

8~9: <도커 엔진>

컨테이너를 관리하는 지속적인 프로세스를 말함. 도커에서 가장 중요한 일들을 담당한다(빌드, run, 컨테이너 배포). 호스트 위에서 백그라운드 서비스 혹은 데몬 형태로 돌아간다

10: 데몬이라는 애가 메모리 위에 둥실둥실 떠서 할 일을 함. 통상 'd'라고 notation을 단다. 보통 백그라운드 서버를 말함. 당근 이 역시 하나의 소웨

도커 api를 통해 cli나 다른 데몬의 요청을 listen하고 도커 객체(이미지, 컨테이너, 네트워크, 볼륨 등) 관리. 도커 서비스를 관리하기 위해 다른 데몬들과 통신/소통

cli를 통해 다른 도커 데몬을 접촉하기도 한다? -> 둘은 별개의 존재.

11: < 도커 클라이언트>

cli로 '도커 엔진에게' 명령 요청

도커 커맨드 하나하나가 도커 api로 맵핑됨. 지금은 명령을 손으로 치고 있지만 나중엔 프로그램쪽에서 도커 데몬에 컨택해서 필요한 기능들을 다룰 수도 있다. 우리가 "컨테이너 3개 띄워주세요" 이렇게 하는게 아닌, 프로그램에서 자동으로 + 수시로 로우드??load....? 뭐지? 를 보다가요게 너무 심하면 새로운 컨테이너가 하나 더 필요하다고 생각하며 하나 더 달라 / 하나 죽여라 이런 거 가능

그리고 호스트는 다른 호스트에 있는 도커 데몬을 선택하는 것도 가능

 

12: 위 내용에 대한 그림 설명

- 레지스트리: 남들이 만들어둔 이미지들

- 도커 데몬: 클라이언트 요구, 명령 받고.

 

13: 사업의 일환.

여기서 중요한건, 라이브러리 오픈소스 뿐만 아니라 IaaC 컨셉에 의해 제 3자가 만든 이미지도 재사용 하면 좋다는 것.

그냥 제 3자가 아니고 구글 아마존 등의 초초초 네임드들

그들은 자기들 회사에 최적화된 이미지들을 이미 레지스트리에 오픈해놓았다.

구글은 텐서플로 등. 그럼 엔진엑스로 예를 들면, 그 엔진엑스 재단에서 이미 도커에서 돌리기에 최적화된 엔진엑스를 이미 레지스트리에 올려두었다. 그걸 받아쓰는게 그냥 일반인이 만든 것보다 안정적이고 시행착오도 적을 가능성 높

 

14: 명령어를 이미지로 설명해뒀다 이거 꼭 한번 봐라!

 

15: 이건 더 빅픽처!

도커 호스트가 수천 수만대가 되면 그떄 오케스트레이터 즉 쿠버네티스가 등장

 

16: 코드와 도커파일을 외부에 올려놓을 때 도커 명령 아니고 git push 쓴다는거 봐둘 것. 소웨 버전을 유지

17: alternarte registry = 애주어, gcp 등등

18: 한 개의 도커 데몬 위에서 여러 개의 컨테이너를 띄울 수 있음. 매우 중요한 개념인데, cpu가 쿼드 코어(4개)인 경우 가상머신을 띄운다 그러면 예를 들어 가상머신 하나당 코어 1개를 줘야했다 그러면 호스트가 써야하는 코어가 한개 있으니 남아있는 코어는 3개.

-> 최대 3개의 가상 머신만 띄울 수 있음 -> 가상머신은 코어를 먹어서 cpu 개수 이상의 코어를 띄울 수가 없다.

컨테이너는 그렇지 않다. 컨테이너가 요구하는 부하가 cpu에 들어갈 수만 있으면 코어 개수랑 상관없음

나중에 한번 더 설명할 것임

서비스가 멈추지않으면서 업글을 해야할때? 이런 작업을 해야하는건 오케스트레이터. 수많은 도커 머신들을 지휘함

 

20: 네임스페이스 개념

멀티 유저가 동시에 사용할 수 있는 운체... 한 대의 컴퓨터를 여러명이 동시에 사용하기 떄문에 이의 자원을 다른 사람들이 동시에 쓰지 않게 침범하지 않게 하는 기술로써 원래 있는 기술.

플밍에서도 여러 사람이 각자 만들어둔 클래스 라이브러리들을 한 프로그램에서 쓸 때, 서로 간의 이름이 충돌하는 것을 막기 위해 쓰는.

-> 컨테이너들이 서로 침범하지 않는 고유의 영역을 만들어 줌. 그에 대한 5가지 개념이 여기 아래쪽에 나와있음 꼭 봐라!

 

21: 컨트롤 그룹

자원 관리. 각 컨테이너+ 호스트가 각각 메모리를 얼마나 나눠쓸건지

 

22: 명령어 칠 때

docker ~  이렇게 치는게 바로 도커 cli.

 

그 이후론 실습.

 

일부러 명령어 외울 필요는 없음

 

docker container rm $(docker container ls -a -q)   (Remove all container) <- 알아두기

 

docker image rm $(docker image ls -a -q)

 

docker push username/repository:tag