티스토리 뷰
이번 블로그는 Docker에 대한 개념과 Docker를 이해하기 위한 블로그이다.
1. 들어가기에 앞서
일반적으로 서버를 관리한다는 건 복잡하고 어려우며 고급 개발자들의 섬세한 작업이 필요한 영역이다.
시간이 흐르면서 서버 환경이 계속 바뀌는데 CentOS에 익숙해지면 Ubuntu를 써야하는 일이 생기고 AWS에 익숙해지면 Azure를 써야하는 일이 생긴다.
DevOps가 등장한 이후 개발주기가 점차 짧아지면서 배포는 더 자주 이루어지고 마이크로서비스 아키텍쳐가 유행하면서 프로그램은 더 잘게 쪼개어졌기 때문에 관리는 더 복잡해졌다. 새로운 툴은 계속해서 나오고 클라우드의 발전으로 설치해야 할 서버가 수백, 수천대에 이른다. 이와 같은 상황에서 Docker 가 등장하고 서버관리 방식이 바뀌게 된다.
2. Docker의 역사
도커는 2013년 3월 산타클라라에서 열린 Pycon Conference에서 dotCloud의 창업자인 Solomon Hykes가 The future of Linux Containers라는 세션을 발표하면서 처음 세상에 알려졌다.
이 발표 이후 도커가 인기를 얻으면서 2013년 10월 아예 회사이름을 Docker로 바꾸고 2014년 6월 Docker 1.0을 발표한다. 2014년 8월 도커에 집중하기 위해 dotCloud 플랫폼을 매각하고 2015년 4월 1100억원의 투자를 유치한 후 계속해서 빠르게 성장하고 있다.
3. Docker란 무엇인가?
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼 이다.
컨테이너라 하면 배에 실는 네모난 화물 수송용 박스를 생각할 수 있는데 각각의 컨테이너 안에는 옷, 신발, 전자제품, 술, 과일등 다양한 화물을 넣을 수 있고 규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있다.
서버에서 이야기하는 컨테이너도 이와 비슷한데 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.
- 컨테이너 (Container)
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.
가상화 기술의 하나지만 기존방식과는 차이가있다. 기존의 가상화 방식은 주로 OS를 가상화 했다.
전가상화든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법은 어쨋든 성능문제가 있었고 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장한다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VMVirtual Machine을 사용하는 느낌을 준다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있다. 새로운 컨터이너를 만드는데 걸리는 시간은 겨우 1-2초로 가상머신과 비교도 할 수 없이 빠르다.
- 이미지 (Image)
도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념이다.
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.
컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
ubuntu이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있고 MySQL이미지는 debian을 기반으로 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있다.
말그대로 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다. 이제 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없다.
도커를 설명해줄 좋은 사진이 위에 나와 있다.
도커의 이미지라를 다시 설명하면 베이스 이미지에 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 파일 하나로 만들어낸 것을 가리킨다. 각 리눅스의 배포판 이름으로 된 베이스 이미지는 배포판 특유의 패키징 시스템을 이용할 수 있다.
우분투라면 apt-get을, 레드햇 계열이라면 요즘은 DNF를 이용한다. 또한 원하는 베이스 이미지는 직접 만들어서 사용할 수 있다.
근데 이것이 매번 베이스 이미지에다가 필요한 프로그램과 라이브러리, 소스 등을 추가하다 보면 용량이 큰 이미지가 지속적으로 생길 것이라고 생각하는데, 위의 그림과 같이 변화된 곳만 별도로 이미지가 생기고, 실행할 때에는 베이스 이미지와 바뀐 부분이 합쳐져서 실행된다. 그래서 도커는 초기 환경이나 업데이트된 환경이나 큰 구조를 가지지 않는다.
사진 및 내용 출처 : 초보를 위한 도커 안내서
'나만의 스터디' 카테고리의 다른 글
[AWS] RDS 생성 및 python 연동하기 (0) | 2021.06.08 |
---|---|
Doker를 사용하여 Dash 생성하는 방법 (0) | 2021.06.08 |
쉘스크립트를 작성하여 jupyter notebook 실행하기 (0) | 2021.06.04 |
AWS Ubuntu 환경에서 jupyter-notebook 설치방법 (0) | 2021.06.04 |
캐글 따라하기 (bike sharing demand) (0) | 2021.05.31 |