ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] 1. 도커Docker를 왜 만들었을까? - 도커 큰그림 그리기
    Docker 2024. 2. 23. 14:01

    Reference

     

    1. 컨테이너 기술이 등장하기 전 과거

    옛날엔 한 서버에서 여러 개의 app을 돌리기 안전하지 않았다.

    따라서, app 하나 추가할 때 서버를 하나 사야했는데, 이 app 구동에 필요한 사양을 추측해서 서버를 사야했다.

    따라서, 남는 사양 → 낭비

    VMware의 등장

    • 한 서버에서 여러 개의 VM을 운영함으로써 여러개의 app을 안전하게 구동할 수 있게 되었다.

    VM 류의 단점

    • 각각의 가상머신은 OS 위에서 구동되기 때문에 CPU, RAM, Storage 많이 사용함.

    Container의 등장으로 해결

    • container는 VM과 비슷하지만 차이가 있음.

    Container vs VM 차이점

    • 컨테이너: 호스트에 OS가 설치되어 있고, 하나의 호스트에서 여러 개의 컨테이너가 호스트의 OS를 컨테이너들끼리 공유하는 구조
    • 가상머신: 각 가상머신당 개별 OS 필요.

    장점

    • 각 컨테이너에서 별도의 CPU, RAM, Storage가 필요하지 않게 되었다.
    • OS 라이센스 문제 없음.
    • OS 패치 문제 없음.
    • portable → 노트북, 클라우드, VM 어디에서나 같은 컨테이너 사용 가능

    Linux Container

    • 많은 개인, 단체의 기여로 만들어짐(ex. 구글: 리눅스 커널)

    컨테이너의 주요 기술

    • kernel namespaces
    • control groups

    그밖에

    • 도커가 등장하기 전까지 컨테이너 기술은 사용하기 어려워서 잘 쓰이지 않았다.(리눅스 엔지니어 필요, 거대 기업에서 사용)
    • 컨테이너는 구동 머신의 커널을 이용한다. 따라서 각 머신 OS별 컨테이너 구현이 다르다.
    • 리눅스에서 windows container 구동 방법 → WSL2 사용

     

    2. Docker

    도커는 리눅스와 윈도우 환경에서만 작동한다.

    맥: docker desktop사용(hyperkit가 경량 리눅스 가상환경을 만들어주면, 이 위에서 도커가 돌아간다.)

    Docker Engine(도커 엔진)

    컨테이너를 구동하고 orchestrate하는 런타임 환경이다.

    Open Container Initiative(OCI)

    컨테이너 표준 설립 기구

    컨테이너 표준 스펙들

    • image spec
    • runtime spec
    • distributed spec

     

    3. Docker Big Picture

    도커를 설치하면 두 개의 주요 컴포넌트가 있다.

    • docker client
    • docker daemon(server or engine)

    Images

    도커 이미지: OS의 파일시스템과 app을 포함하는 객체(멈춘 컨테이너, 클래스와 유사)

    • openvidu 이미지만 있었는데 ubuntu 이미지 추가한 상태
    • 만약 nginx 이미지 추가하면 nginx를 구동하기 위한 os 코드 조금 + nginx로 구성된 이미지가 받아질 것이다.

    docker container 명령어들

    docker container run -it ubuntu:latest /bin/bash // ubuntu:latest 이미지 구동하는데, bash shell 실행
    docker container ls // 현재 구동중인 컨테이너 리스트 반환
    docker container exec -it vigorous_chatterjee bash // 호스트 터미널과 이미지 터미널 합치고 bash 실행 
    ctrl - p q // 데몬 상태로 만들고 빠져나오기
    docker container stop vigorous_chatterjee // 컨테이너 중지

    Dockerfile

    Docker Image를 어떻게 빌드할 것인지에 대해 작성된 문서

    예제 dockerfile

    seon@Userui-MacBookAir psweb % cat Dockerfile 
    # Test web-app to use with Pluralsight courses and Docker Deep Dive book
    FROM alpine
    
    LABEL maintainer="nigelpoulton@hotmail.com"
    
    # Install Node and NPM
    RUN apk add --update nodejs npm curl
    
    # Copy app to /src
    COPY . /src
    
    WORKDIR /src
    
    # Install dependencies
    RUN  npm install
    
    EXPOSE 8080
    
    ENTRYPOINT ["node", "./app.js"]
    seon@Userui-MacBookAir psweb % 

    이미지 빌드 코드

    docker image build -t test:test .

    dockerfile이 있는 위치에서 위 명령어를 실행하면, <이름>:<태그> = test:test인 이미지가 빌드됨

    docker container run -d --name web1 -p 8080:8080 test:latest
Designed by Tistory.