데이터센터프로그래밍05

05-Docker Introduction

🔹 Container Technologies
▶ Container Technologies
: 필요한 어플레이션을 설치 할 때, 운영체제에 필요한 것 포함, 운영체제에 config 해야하는 것 포함, 라이브러리/기타 등등의 것을 하나로 묶어서 설치하고, 지울 때 깨끗하게 지우는 것
즉, 리눅스 기반으로 만들어진 컨테이너인 LXC

▶ Docker
: 라이센스는 Apache 라이센스를 사용
: 가장 큰 특징) Operating system 부분에서 리눅스 위에 FreeBSD, Windows, macOS 즉, 거의 다 지원함
: 리눅스 컨테이너와 비슷한 기능을 하는 도커
: 장점) 현존하는 가장 많은 OS들을 지원하기 때문에, 우리가 도커에 익숙하고, 도커에 기반해서 무언가를 만들면 운영체제가 무엇이든간에 도커가 동일한 지원을 해줄것이라는 믿음이 있음
: 도커는 컨테이너 기술 중 한 가지이며, 리눅스 컨테이너를 포함해서 컨테이너 기술을 지원하는 SW는 많이 있었음
*도커는 구글이 가장 크게 지원하는 SW이기 때문에, 구글이 제공하는 쿠버네티스와 함께 어울리면서, 현재 가장 훌륭하고 많이 사용하는 유명한 Container Technologies의 SW임

▶ Docker 의미
: 그림을 보면, 고래 위에 컨테이너가 있음
ex. 돌리고자 하는 어플리케이션, 라이브러리, SW, 설정들을 실어 나르는 고래 (한 대의 컴퓨터(고래)가 많은 컨테이너를 실어나름)
: 도커는 Go언어(서버프로그래머들이 가장 좋아하는 언어)를 사용해 만들어졌고, 운영체제가 Linux, Windows, macOS 모두 설치해서 사용 가능함
*Linux는 아직 미비하지만, 성능이 좋고 제일 잘 실행됨; macOS는 설치 및 사용시에 가장 편함; Windows는 제일 답답함을 느낌

▶ Docker Popularity
: 450개의 회사가 도커에 돈을 지불하여 사용하고 있음
: 37빌리언 다운로드로, 다운횟수가 높음
: 1만5천개의 job listing이 링크 되어있음
: 350만개의 도커 기반의 어플리케이션이 존재함 (ex. 우분투)
: 200+ 개발자, 사용자 그룹이 굉장히 많음을 의미
🐣 추가적으로, 도커를 많이 사용하는 국가 순위는
: 중국-세인트헬레나-대한민국-이스라엘-에스토니아 순서임
ex. 중국: 알리바바 등 IT업계, 서비스업체들이 커지고 있음 (새로운 기술을 빨리 받아들이는 나라)

▶ Docker 사용하는 이유
(1) Open paltform
: 도커는 대부분의 플랫폼에서 실행되며 오픈소스임
😀 따라서, 도커 위에서 실행된다면, 플랫폼이 독립적으로 SW를 어디서든지 실행 가능
(2) Separate your applications from your infrastructure-Deliver software quickly
: 도커는 Linux, Windows, macOS와 같이 여러 운영체제에서 실행 가능
: 그러므로, 도커를 이해하고 그 위에 어플리케이션을 실행하면 됨
😀 따라서, 내가 어떤 운영체제, CPU인지를 생각하지 않고 어플리케이션을 실행 할 수 있으니, 직접 만든 어플리케이션을 infrastructure, 완전히 독립적인 SW를 만들 수 있음
(3) Infrastructure as Code & DevOps
: 자신이 필요한 운영체제, 그리고 운영체제에 필요한 mmodual, 그에 대한 configration들이 자신의 어플리케이션이 돌아갈 때, 필요한 것들을 프로그래밍 하듯이 짜면, 이것을 빠른시간 안에 자동화된 방법으로 동작시킬 것임
🙋‍ Infrastructure가 독립적인 것이 왜 중요한지?
🙋‍ Infrastructure 코드를 실제로 어떻게 이루어 나갈 것인지?
😀 따라서, 개발과 운영을 빠르게 할 수 있는 DevOps룰 아루어 내는 것이 목표임
(4) Immutable Infrastructure using 'Docker file'
➡ 도커의 역할
: 왼쪽도커파일-중간도커이미지-오른쪽_도커컨테이너가 있음
: 즉, 도커파일로 도커이미지를 build하고 도커이미지를 run하면 도커컨테이너가 됨

🐣 추가적으로, Ubuntu OS 이미지, Windows OS 이미지, Openstack과 같은 클라우드 컴퓨팅에서 개발자&사용자가 운영하는 운영체제와 환경이 있다면, 그 운영체제 or 운영체제 위에 환경을 갖춘 이미지를 Pubilc cloud에게 제공함
🐣 자신에게 필요한 운영체제, 필요한 환경들, 필요한 SW들을 포함하는 것과 비슷한 의미
🐣 도커를 사용할 때, 자신이 필요로 하는 운영체제 그 위에 필요한 라이브러리 set-up하는데, 이것을 어떻게 만드는지?
🐣 Dockerfile : 자신이 필요로 하는 환경을 프로그래밍 하듯이 하는것
😀 Infrastructure as Code 예시는 아래와 같음

# Docker file for a slim Ubuntu-cased Python3 Image

# ubuntu 운영체제 설치 (프로그래밍 하듯 요구함: 내가 만든 이미지는 ubuntu 최신 버전으로 만들어달라고 요청함)
FROM ubuntu:latest
MAINTAINER fnndsc "[email protected]"

# ubuntu 운영체제에 SW들을 업데이트 (apt-get: SW가 
손으로 타이핑하는 명령어)
# 개발환경 python3 set-up하고 upgrade
RUN apt-get update \
	&& apt-get install -y python3-pip python-dev \
    && cd /usr/local/bin \
    && ln -s /usr/bin/python3 python \
    && pip3 install --upgrade pip

ENTRYPOINT ["python3"]

😀 따라서, ubuntu를 설치, 설치된 SW 업그레이드, python3 설치 및 업그레이드, 환경구축 등 복잡한 부분들을 몇줄의 코드로 실행함
😀 위에서 프로그램을 실행하는 것, 즉, Mac 프로그램은 항상 ubuntu&python이 잘 동작될 것이라는 믿음이 있음
😀 Infrastructure as Code : 자신이 원하는 인프라를 프로그래밍 함으로써 구축한 것을 의미
😀 Container
ex. 이미지를 디스크에서 실행, 필요시 10개, 더 필요한 경우 100개, 실행되는 형태로 컴퓨터의 CPU와 메모리, 디스크를 실행할 때를 의미
😀 Dockerfile을 가지고 Infrastructure as Code 처럼 만든후에 run하면, 하나의 이미지가 만들어지고, 그 이미지를 필요한 만큼 필요한 곳에서 실행하는데, 이것을 도커이미지로 run해서 컨테이너를 실행했다고 함
(5) Flexible & Lightweight & Interchageable

  • Flexible
    : 복잡한 절차없이 Dockerfile에서 작성하면, 복잡한 어플리케이션이라도 환경을 구축하고 실행 가능
    : 자신이 만든 프로그램이 어떤 환경에서 실행하든지 간에, 반드시 환경이 구축될 것이라는 신뢰가 있으므로 자신이 만든 프로그램도 항상 밑에서 실행되는 환경을 신경쓰지 않고 짤 수 있음
  • Lightweight
    : virtual machine보다 컨테이너 기술은 별도의 host 운영체제 위에 guest OS를 올리지 않으니 Lightweight 할 수 있음
    : guest OS가 올라가지 않고, host OS 위에서 동작하기 때문에, Lightweight라는 상대적 단어를 사용함
  • Interchageable
    : 필요할 때, 필요한 만큼의 CPU와 컴퓨터들과 네트워킹을 사용하는데, 버전up&down을 할 것임
    ex. immutable한 컨셉
    : 전체를 동일한 이미지로 실행하는 것이 맞기 때문에, 100개의 SW가 버전1로 실행된다고 한다면, 조금씩 바꿔서 서비스를 중단하지 않고, 버전2로 올릴 것임
    : 다시 버전2로 올렸는데, 문제가 생기면 다시 1버전으로
    내림
    : 이런식으로 업데이트하고, 업그레이드하고, 변경하고, 버전up&down을 굉장히 쉽게 할 수 있음
    😀 이러한 장점들이 있어 컨테이너들을 쓰지만, 컨테이너들의 장점을 가장 많은 플랫폼 위에서 신뢰할 수 있게 동작시키는 SW가 도커임

▶ Docker Image
➡ Infrastructure as 컨셉
(1) code
:실행한 SW의 code(코드)가 있고
(2) runtime & libraries
: 코드가 필요로 하는 runtime, libraries(라이브러리)등 OS와 관련된 SW, midelware든 여기에 포함됨
(3) environment variables
: 리눅스 프로그래밍, 서버 프로그래밍을 하다보면, 운영체제에 가지고 있는 environment variables(변수들)이 있어서 이것에 영향을 줄 수 있음
ex. path) 자신이 만든 프로그램을 실행하는데, 위치를 운영체제에게 알려줘서 그 프로그램을 실행시키면, 디스크에 어디있는지 찾아갈 수 있게 하는 등의 환경변수들이 있음
(4) configration files
: 운영체제를 set-up하는 configration files 있음
😀 도커는 필요한 것을 한번에 설치하고, 한번에 지울 수 있음

▶ Docker Container
: 도커 파일을 통해 만들어진 이미지 자체는 잠자고 있는 파일이며, 필요한 만큼, 필요한 위치에서 실행되는 것이 컨테이너임
: runtime instance (즉, 실행시에 동작하는 객체)
: 컴퓨터 프로그램을 짤 때에 class를 배우면 class는 설계도, instance는 컴퓨터 메모리를 잡아주면서 실존하는 것
😀 도커 이미지, 컨테이너 이미지가 instance화 되는 것임
: instance를 필요한 만큼 만드는 것이고, 실제로 컴퓨터 메모리를 점유하고, CPU에 의해서 작업을 함

▶ Dockerfile, Image, Container & CLIs

▶ Sharing Immutable Infrastructures

▶ Birds-Eye-View of Docker
: 도커이미지를 가져와서 build한 것을 contanier로 만들고, run(실행)한 것에 대한 내용은 다음과 같음

🍰 꿀팁) Trouble Shooting
🎯 Docker Communuty Forums
: 링크) https://forums.docker.com/c/docker-hub/10
: 도커 커뮤니티 홈페이지는 도커와 관련된 문제점들을 해결하는데 도움이 됨
🎯 Docker GitHub Issues
: 링크) https://github.com/docker
: 도커관련 오픈이슈로 서로 문제점 및 해결에 대해서 오픈하고 있으며, 만약 문제점에 대해 본인이 최초로 발견한 것이라면 report할 수 있음
: 서버 관련 기술들은 빠르게 변화되므로, 새롭게 사용되는 신기술에 버그가 발생할 수 있는데, 이와 관련된 정보들을 이 사이트에서 얻을 수 있음
🎯 StackOverflow
: 링크) https://stackoverflow.com/
🎯 Google Group
: 링크) https://groups.google.com/
🎯 한국 도커 사용자 그룹
: 링크) https://www.facebook.com/groups/korea.docker.user.group/

🍰 꿀팁)

  • 도커 설치를 실패했거나, 도커 관련 무료 강의를 수강하고 싶다면 다음의 사이트를 참고할 것
    : 링크) https://www.katacoda.com/

좋은 웹페이지 즐겨찾기