ML/AI/SW Developer

Docker - Basic

0. 강의 소개

이번 강의에서는 가상화의 개념과, 
최근 개발환경 설정 및 서비스 배포에 가장 많이 사용되는 Docker에 대해 학습하는 시간을 가져보도록 하겠습니다.

1. Docker 소개

1.1 가상화란?

  • 문제가 되는 것!!
    • 운영에 사용하는 서버에 직접 들어가서 개발 하지 않음
      • -> Local에서 개발 후, Staging, Production 서버에 배포
    • 개발을 진행한 환경과, Production 서버 환경이 다를 수 있음
      • OS가 다르기 때문에 라이브러리, 파이썬 등 설치할 때 다르게 진행해야 함
  • 어떻게 해결하지?
    • 다양한 설정을 README 등에 기록하고, 항상 실행하도록 하는 방법
      • 사람이 진행하는 일이라 Human Error 발생
      • 매번 이런 작업을 해야 하는 과정이 귀찮음
    • 서버 환경까지도 모두 한번에 소프트웨어화 할 수 없을까?
      • 밀키트처럼!!! 간단하게!
  • 위와 같은 문제들을 해결하기 위해 나온 개념이 가상화!
    • 특정 소프트웨어 환경을 만들고, Local, Production 서버에서 그대로 활용
    • 개발(Local)과 운영(Production) 서버의 환경 불일치가 해소
    • 어느 환경에서나 동일한 환경으로 프로그램을 실행할 수 있음
    • 개발 외에 Research도 동일한 환경을 사용할 수 있음

1.2 Docker 등장하기 전

  • VM(Virtual Machone)을 사용
    • 호스트 머신
    • 실제 물리적 컴퓨터에 OS를 포함한 가상화 소프트웨어를 두는 방식
    • E.G
      • 호스트 머신은 Window인데, Window에서 Linux를 실행
      • 호스트 머신은 Mac인데, Mac에서 Window를 실행
  • GCP의 Compute Engine 또는 AWS EC2가 이런 개념을 활용
    • 클라우드 회사에서 미리 만든 이미지를 바탕으로, Computing 서비스를 통해 사용자에게 동일한 컴퓨팅 환경을 제공
    • 하지만!! OS위에 OS를 하나 더 실행시키는 것으로 매우 리소스를 많이 사용
      • 무겁다!! 느리다!!
  • Container
    • VM의 무거움을 덜어주면서, 좀 더 경량화된 프로세스의 개념으로 만들어진 기술
    • 훨씬 빠르고 가볍게 가상화 구현 가능

1.3 Docker 소개

  • Container 기술을 쉽게 사용할 수 있도록 나온 도구가 바로 Docker
    • 2013년에 오픈소스로 등장
    • 컨테이너에 기반한 개발과 운영을 매우 빠르게 확장
  • Docker의 핵심
    • Docker Image
      • 컨테이너를 실행할 때 사용할 수 있는 “템플릿”
      • Read Only
    • Docker Container
      • Docker Image를 활용해 실행된 인스턴스
      • Write 가능

1.4 Docker로 할 수 있는 일

  • 다른 사람이 만든 소프트웨어를 가져와서 바로 사용할 수 있음
    • 예) MySQL을 Docker로 실행
    • 예) Jupyter Notebook을 Docker로 실행
  • 다른 사람이 만든 소프트웨어 : Docker Image
    • OS, 설정을 포함한 실행 환경
    • Linux, Window, Mac 어디에서나 동일하게 실행할 수 있음
  • 즉!
    • 자신만의 이미지를 만들면 누구에게나 쉽게 공유가능!!
    • 원격 저장소: Container Registry 에 저장!

2. Docker 실습하며 배워보기

2.1 설치하고 실행하기

  • Os 맞게 설치하기
    • 리눅스 - 우분투 설치 가이드
      • Set up the repository

          1. apt-get update
          2. apt-get install \
              ca-certificates \
              curl \
              gnupg \
              lsb-release
          3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
          4. echo \
              "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
              $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
        
      • Install Docker Engine

          1. apt-get update
          2. apt-get install docker-ce docker-ce-cli containerd.io
          3. apt-cache madison docker-ce
          # 옵션
          4. apt-get install docker-ce=5:18.09.1~3-0~ubuntu-xenial docker-ce-cli=5:18.09.1~3-0~ubuntu-xenial containerd.io
          5.  docker run hello-world
        
  • docker images : 다운받은 이미지 확인
  • docker run “이미지 이름:태그”
    • 다운받은 이미지 기반으로 Docker Container를 만들고 실행
      • shell을 꺼도 이미지가 꺼지지 않게 백그라운드 옵션을 주자!
    • 실행한 컨테이너는 docker ps 명령어로 확인할 수 있음
    • docker exec -it “컨테이너 이름(혹은 ID)” /bin/bash
    • “컨테이너이름” -u root -p -> 컨테이너 안으로 들어갈 수 있음
  • 기본 명령어 정리
    • docker pull “이미지 이름:태그” : 필요한 이미지 다운
    • docker images :다운받은 이미지 목록 확인
    • docker run “이미지 이름:태그” : 이미지를 기반으로 컨테이너 생성
    • docker ps : 실행중인 컨테이너 목록 확인
    • docker exec -it “컨테이너 이름(ID)” /bin/bash : 컨테이너에 진입
    • docker stop “컨테이너 이름(ID)” : 실행중인 컨테이너를 중지
    • docker rm “컨테이너 이름(ID)” : 중지된 컨테이너 삭제
  • 다양한 도커 이미지

Reference

  • AI boot camp 2기 서빙 강의