운영체제가 없으면 어떻게 핸들링?

 

원래 도커는 리눅스 OS위에서 작동하도록 설계??.

 리눅스의 chroot jail이라는 기능을 기반

 컨테이너 내부에서는 외부 Host OS의 존재를 인식할 수 없지만,

외부 Host OS에서는 컨테이너를 그저 하나의 프로세스로  인식?

 

 

Docker for Windows/Mac은 리눅스 가상 환경을 생성하여 도커를 지원함.

Linuxkit을 사용. Linuxkit은 리눅스의 커널을 최소한으로 경량화하여

필요한 작업만 컨테이너 기반의 서비스로 정의해 사용.

 

 

2020년 5월 도커는 윈도우즈에 새로 업데이트된 WSL2 기능을 사용하여 가상화를 하기 시작

Docker for Windows를 설치할 때 기본 체크됨

 

docker0이라는 브리지를 통해 외부와 통신함

 

 

운영체제의 유무, OS 없는 컨테이너가 빠름

운영체제는 최소 메모리/CPU 할당도 필요함. -> 컨테이너는 리소스를 공유해서 나눠서

운영체제 레벨 패치작업이 없음.


VM Docker
Host OS 논리적 가상화 (완전 분리) - Kernel 공유 (프로세스 공유)
- Container 내에서 명령어 실행 시 실제로는 Host OS에서 실행
Guest OS 풀 설치 Host OS와 비교해서 다른부분만 Packing
OS지원 모두 지원 Linux기반의 OS만 지원
장점 - 해킹 되더라도 다른 가상머신에 영향을 미치지 않음
/
이것도 반쪽짜리, 통신이 되니깐 같이 뚫림
- 시스템 자원의 효율적 사용
- 생산성 향상
단점 - 시스템 확장시 자원의 낭비
- 트래픽에 따른 분산처리가 유연하지 못함
- Host OS를 공유하기 때문에
Host 권한이 해킹된다면 다른 컨테이너들도 위험함

 

도커의 다른 기능

여러 Container간에 호스트 자원을 분리해서 사용하게 해줌

리눅스 고유 기술인 namespace와 cgroups을 사용해서 격리하는 기술

 

Namespace 커널에 관련된 영역을 분리 mnt, pid, net, ipc, uts, user
cgroups 자원에 관련된 영역을 분리 mem, cpu, i/o, network

 

 

 

컨테이너에 OS 없고,

필요한 모듈만 확장시키기 쉽다

개의 POD 확장시키면

 

도커허브에서 node.js 이미지를 실행할 수 있는 컨테이너 이미지를 가져온다.

 Hello world 앱을 하나의 컨테이너로 만든다.

 

Dockerfile                

FROM node:slim

EXPOSE 8000

COPY hello.js

CMD node hello.js

 

로컬 도커에서 컨테이너를 구동시킨다, 추가로 외부 서비스 하도록 통신 설정?

 

 

예제

이미지가 없다면 자동으로 다운로드함

nginx 컨테이너 docker container run --name webserver -d -P nginx
Node.js 컨테이너 docker run -d -it -p 9000:8000 --name=nodejs_test2 node:latest
js스크립트를 짜서
해당
컨테이너에 cp
컨테이너
진입하여, node.js실행 : docker exec -it nodejs_test2 /bin/bash


httpd(Apache) 컨테이너 docker run -d -p 8080:80 --name httpd-basic httpd:2.4

 

혹은 이미지 생성 방법

From 베이스이미지 필요함

 

개발페이지 작성/개발 8080포트 리슨

 

Dockerfile 작성

FROM golang:1.9RUN mkdir /echo
COPY main.go /echo
CMD [
"go", "run", "/echo/main.go"]

 

빌드

docker image build -t example/echo:latest

 

실행

docker container run example/echo:latest

 

접속확인

curl http://localhost:8080/

 




+ Recent posts