///
Search

01.What is Docker

도커란 무엇인가?

서버를 효과적으로 관리하기 위한 툴
서버는 A부터 Z까지 눈에는 잘 안보이지만 굉장히 복잡한 유기적 구조로 얽혀 있음
그래서 하나라도 실수하면 작동이 안되는 불 상사가 발생할 수 있음
그걸 방지하기 위한 오픈소스 공짜 프로그램이다.

그렇다면 왜 도커를 쓰는가?

회사에서 Oracle설치해달라 Wordpress설치해달라 Git 설치해달라 여러 부탁이 올 때 메뉴얼 보고 따라하는건 옛날 방식이다.
버전이 안 맞거나 컴퓨터 운영체제 따라서 설치가 될수도 있고 안 될수도 있다.
프로그램을 설치하는걸 넘어서 AWS랑 Azure Google Cloud 같은 환경도 바뀔 수 있고, 웹프로그래밍 할때에도 누구는 Go 누구는 Node.JS 등 다들 개발 환경이 전부 달라서 따로 취급해줄 필요가 있다.
그래서 이걸 해결해주고자 하는것이 바로 Docker이다.

도커가 등장한 후 서버관리 방식 변화

파이썬 버전이 바뀌어도 두려움이 사라짐
어떠한 프로그램도 컨테이너로 만들 수 있음 (컨테이너 : 가상머신과 비슷하지만 하나의 독립적인 작은 파티션 공간이라고 생각하면 됨)
도커의 컨테이너 개념은 가상머신처럼 독립적으로 실행되지만 더 빠르고 더 쉽고 더 효율적이다.
패키지 업데이트도 그냥 콘테이너 만들어서 돌리면 된다.
옛날에는 원시적으로 PPT 보고 메뉴얼을 만들었다.
그리고 CHEF, Puppet, Ansible 같은 상태 도구들이 나오긴 했지만 어려웠다.
가상머신을 이제 썼는데 이제 느리고 서버 이미지 공유도 어려웠다.
가상으로 이제 자원을 분할하기 시작했는데 CPU MEMORY 등 각 할당을 나눠서 관리를 하였으나 구글이나 아마존같은 대기업 사람들만 잘 했다.
도커는 자원할당을 쉽게 만든 솔루션이다.

도커의 특징

가상머신과 도커의 차이점은 다음과 같다.
위의 내용에서 Overhead라는 부분은 바로 윈도우에서 리눅스 까는것 처럼 운영체제 위에 운영체제를 까는것을 의미한다.
도커는 그럴 필요없이 독립적으로 따로 놔둬서 취급하기에 훨씬 빠르다.
도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음
특정 회사나 서비스에 종속적이지 않음 (무료)
쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편함
도커를 사용하지 않는 경우 ruby, nodejs, go, php로 만든 서비스들의 배포 방식은 제각각 다름
컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐

도커의 이미지

이미지에서 컨테이너를 생성하기 때문에 반드시 이미지를 만드는 과정이 필요
Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능
빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지를 불러옴
설정관리는 이렇게 한다.
설정은 보통 환경변수로 제어함
MYSQL_PASS=password와 같이 컨테이너를 띄울때 환경변수를 같이 지정
하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함
자원관리는 이렇게 한다.
컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨
업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요
세션이나 캐시를 memcached나 redis와 같은 외부로 분리

도커가 가져온 변화

클라우드 이미지보다 관리하기 쉬움
다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 (거의) 없음
복잡한 기술(namespace, cgroups, network, ...)을 몰라도 사용할 수 있음
이미지 빌드 기록이 남음 (Git 활용 가능)
코드와 설정으로 관리 > 재현 및 수정 가능
오픈소스 > 특정 회사 기술에 종속적이지 않음

도커의 응용버전 쿠버네티스

쿠버네티스란? 여러대의 서버와 여러개의 서비스를 관리하기 쉽게하는 목적으로 만든 프로그램
스케쥴링
컨테이너를 적당한 서버에 배포해 주는 작업
여러 대의 서버 중 가장 할일 없는 서버에 배포하거나 그냥 차례대로 배포 또는 아예 랜덤하게 배포
컨테이너 개수를 여러 개로 늘리면 적당히 나눠서 배포하고 서버가 죽으면 실행 중 이던 컨테이너를 다른 서버에 띄워줌
클러스터링
여러 개의 서버를 하나의 서버처럼 사용
작게는 몇 개 안 되는 서버부터 많게는 수천 대의 서버를 하나의 클러스터로
여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있 는 것처럼 쉽게 통신
서비스 디스커버리
서비스를 찾아주는 기능
클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고 다른 서버로 이동 할 수도 있음
따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하고 컨테 이너가 생성되고 중지될 때 어딘가에 IP와 Port같은 정보를 업데이트해줘야 함
키-벨류 스토리지에 정보를 저장할 수도 있고 내부 DNS 서버를 이용