Home Docker 1 - Intro
Post
Cancel

Docker 1 - Intro

Environment

  • wsl2, ubuntu 22.04
  • 가끔 wsl2에서만 나오는 문제가 있는것같길래..

Docker

  • Linux의 container기술을 사용해 만든
    container 기술
  • 이 설명이 좀 이상할 수 있는데
    vitualization에 좀 더 설명이 있음.
  • 아무튼 원래 linux에는
    os vitualization을 이용한 기술이 있었고
    그걸 바탕으로 만들어졌다.
  • 당연히 장/단점은 os vitualization를 따름.

설치

1
apt install docker.io

Why Docker?

장점

  • 일단은 가벼움.

    hw vitualization type2 보다 훨씬.

  • 편의성이 있는데

    image만 받아서 바로 실행 가능한 점으로
    image는 실행 할 때 필요한
    모든걸 갖고있는상태로
    타겟프로그램을 실행하기 위해 필요한
    여러 부가적인 설치를 생각할 필요가 없다.

  • 격리된 공간의 이점으로

    환경 세팅에 부담이 없고
    테스트환경 세팅이 쉬워진다.

    어떤 환경을 세팅할 때
    익숙한 방식이라니라면 좀 헤메는 경우가 많음
    게다가 어떤 프로그램은 삭제를 해도 가끔
    이 전 정보가 남는 경우가 있음
    oracle db 같은거.

    container는 os, container에 독립적이었다.
    뭔짓을해도 외부에 영향을 주지 않는다.
    삭제 생성이 쉬워서
    부담없이 호로록 할 수도 있고.

  • vmware에서 snapshot같은기능을
    image를 이용해 사용할 수 있음.
  • 배포가 쉬워지는데
    image를 그 자체로 넘기면 바로 실행 가능해지고
    또는 dockerfile을 이용하면 훨씬 쉬워진다.
  • 그 외 확장이 쉽고 어찌고 하는게 있는데
    암튼 좋다.

단점

  • os에 종속적임.
    os와 kernel을 공유하면서 당연한거겠지만..

    원래 linux의 container기술 기반이었음.
    다만, 윈도우에서 linux를 사용하기가
    비교적 편해지면서 이 불편함은 옅어졌는데
    그래도 linux용 sw만 있는건 또 맞는것같음.

  • 태생적으로 cli가 더 적합해서
    gui앱은 좀 힘든것같다.
    근데 서버는 서버고 외부에서는 web이나
    다른식으로 하는게 보통이지 않음?


용어

  • 주요 용어로는 image, container가 대표적

Image

  • container 실행에 필요한
    resource, 설정값의 모음.
  • container가 실행 될 모든 요소를
    온전히 갖고있는상태이다.

    예를들어 linux, db등
    image만 받으면 실행이 됨.

  • readonly속성으로
    image자체는 수정할 수 없다.
  • container에서 변경된 내용을
    commit해 그 상태를
    다시 image로 저장 할 수 있다.
  • 그래서 container의 어떤 시점을
    저장해 놓은거라고 봐도됨
  • 이 때 새로 저장하는 부분을 layer이라함.

Container

  • image가 실행된 상태.
  • application처럼 동작하는
    실제 상태가 이거.
  • container 생성 및 실행 이후
    container에서의 변경사항은
    image에 영향을 주지 않는다.
  • 예를들어 db container의 경우
    db에 어떤 데이터가 들어가도
    image는 그 상태를 저장하지 않고
    container에는 있음.
  • container의 생성, 삭제 또한
    image나 같은 image로 부터 나온
    다른 container또한 영향을 주지 않음.
  • 모든 container는 host os와 kernel을 공유한다.
    다만 위에 설명에 있듯
    각 container끼리는 영향을 주지 않음.
  • kernel공유, container의 격리 같은 특성은
    os vitualization에서 기인함.

Image - Container

  • Image를 설치한다는 느낌이 아니고
    Class instance = new Class();
    이느낌에 가까움.
    image container = new image();
    이렇게.
  • class가 image, instance가 container인데
    instance(container)의 변화가
    class(image)에 영향이 없는건 비슷함.
  • 단, 위 비유와 달리 container의 변경사항을
    image에 다시 쓸 수도 있는데
    이부분은 git랑 비슷함.
    이 전에 썼듯 layer라 하고,
    이 전 상태에 변경된 부분을 쌓는다는 느낌.
  • 이 둘 스까 생각하면 될듯.

Life Cycle

  • 전반적인 주기

    https://github.com/psy0231/psy0231.github.io/blob/main/postAssets/img/docker/docker%20lifecycle.jpg?raw=true

    • docker hub에서 pull 한게 image
    • image에서 create 또는 run을 한게 container

Outro

  • 써보니 확실히 편함.
  • 잘쓰면 당연히 훨씬 더 편할것같음.
  • 다만, 생각보다 이것저것 신경써줄게 많음.
  • 또 지금 당장 필요함.
  • 이 뒤로 설명은 위 cycle를 따라가면서
    필요한 명령어들을 쓸 생각.
This post is licensed under CC BY 4.0 by the author.

Python 18 - Module, Package

Docker 2 - Image

Comments powered by Disqus.