ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker - Basic
    Server Side/Docker 2020. 3. 28. 20:31

    Docker를 실제로 적용해볼일이 있어서 개념과 사용법을 간단하게 정리해보았다. 학원에서 실행하는 것만 따라해보면서 마냥 신기했던 기억이 있는데, 개념을 이해하고 실제로 적용해보니 정말 편리하고, 많은 기업들이 Docker를 사용하는 이유를 알 수 있었다. 앞으로도 도커를 적극적으로 활용하고 컨테이너를 시스템에 의해 처리할 수 있는 쿠버네티스에 대해도 공부해볼 생각이다.

     

    Docker 란?

    컨테이너를 관리하는 플랫폼

    기존의 Virtual Machine의 단점을 개선한 컨테이너 기반 가상 머신. docker는 크게 이미지(파일)와 컨테이너(프로세스)로 구성된다.

     

    Image: 어플리케이션(소스 코드)과 라이브러리(또는 프레임워크)를 담고 있는 하나의 파일. 구성하고자 하는 환경을 설치하기 위한 스크립트를 담고 있는 파일이라고 생각하자.

    Container: Image의 실행 상태(프로세스). 이미지를 이용해 실행 상태로 만든다.

     

    -> 하나의 Image를 이용해 여러개의 Container를 생성할 수 있다.

    -> Docker의 Container는 자체 컨테이너를 사용한다. (과거에는 리눅스 컨테이너를 사용했다.)

     

    기존의 가상 머신(VM)과 차이점

    기존의 가상머신은 호스트 OS위에 게스트 OS를 가상화

    • 호스트OS 위에 게스트OS를 올리고 그 위에 어플리케이션을 동작시킨다.
      Host OS(Hypervisor) - [Guest OS1 - Application1], [Guest OS2 - Application2], ...
      -> 무겁고 느려진다는 단점(실제 서비스하기 어려움)

    https://www.docker.com/resources/what-container (* Hypervisor: 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행시키기 위한 논리적 플랫폼(가상화 레이어)) 

    Docker

    • 호스트 OS위에 도커 엔진을 설치하고 여기에서 어플리케이션을 동작시킨다.
      Host OS - Docker Engine - [Application1], [Application2], [Application3],... 구조로 실행 속도가 매우 빠르다.
    • 하나의 OS에 여러개의 컨테이너가 독립적으로 실행된다.
    • git처럼 이미지를 저장소(Dockerhub)에 저장하거나 불러와 쉽게 환경을 구축할 수 있다.

    https://www.docker.com/resources/what-container

     

    도커 설치 및 사용법

    기본 설정

    # 설치가 끝나고 도커 버전확인 
    $ docker --version

     

     

    도커 이미지 생성

    # docker 파일 생성 - 일반적으로 Dockerfile(또는 Dockerfile.base)로 생성하는듯
    $ touch Dockerfile
    
    # 스크립트 작성
    $ vim Dockerfile
    
    ####################################################################
    # From을 이용해 다른사람이 올려놓은 python3.7 이미지를 사용한다.
    FROM python:3.7
    
    RUN apt-get update && apt-get install -y --no-install-recommends \
            python3-setuptools \
            python3-pip \
            python3-dev \
            python3-venv \
            git \
            && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/*
    
    CMD python -c "print('hello world')"
    ####################################################################

    FROM: 누군가 올려놓은 기존 이미지를 사용

    RUN: 쉘 커맨드에서 사용할 명령

    ENV: 환경 변수를 설정할 때 사용

    CMD: 도커 설정이 완료되고 실행될 명령(파이썬을 실행한 후 print('hello world') 명령 → 화면에 hello world가 출력된다.)

     

    ADD: 로컬 파일을 이미지에 올릴 때 사용

    ex) ADD ./game_of_life/game_of_life.py /var/www/streami/game_of_life/game_of_life.py

    = game_of_life.py를 해당 이미지로 생성된 컨테이너의 디렉토리(/var/www/streami/game_of_life/)에 추가한다.

     

    도커 주요 명령

    # 빌드 이미지 -> 도커 파일(Dockerfile)을 docker image로 생성
    $ docker build -t <your-tag> -f Dockerfile .
    # ex) docker build -t hello-world -f Dockerfile .

    -t: 태그를 생성할 때 사용

    -f: Dockerfile의 디렉토리를 의미한다.(위 코드는 현재 폴더의 Dockerfile을 이용해 이미지를 생성함)

    # 내 시스템에 생성한 이미지
    $ docker images
    
    # 내 시스템 모든 이미지 삭제
    $ docker rm $(docker ps -a -q)  # 이후
    $ docker rmi $(docker images -q)
    
    # 현재 실행중인 컨테이너
    $ docker ps -a
    
    # 도커 실행
    $ docker run -it <your-tag>
    # ex) docker run -it hello-world
    # 'hello world'가 출력된다.
    
    # -d: 백그라운드에서 실행되어야할 경우 필요한 옵션
    $ docker run -d -it <your-tag>
    
    # 현재 실행중인 컨테이너 아이디 확인
    $ docker ps - a
    # 컨테이너 중지
    $ docker stop <your-container-id>
    
    # 도커 실행 후 bash shell 실행
    docker run -it <your-tag> /bin/bash
    
    # --rm: 컨테이너가 종료될 경우 해당 컨테이너 삭제 
    docker run -it --rm <your-tag>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Reference

    도커 개념: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

    도커 기본 사용법: http://pyrasis.com/Docker/Docker-HOWTO

    리눅스 컨테이너: https://www.44bits.io/ko/keyword/linux-container

     

     

     

     

    댓글

Designed by Tistory.