간단한 용어와 명령어 정리
Docker에 대해 알아본다. 모든 분야가 항상 오버헤드를 줄이고, 무언가를 빠르게 효율적으로 하기 위한 수단을 찾으려고 노력하는 것 같다. 컨테이너의 개념도 같은 맥락에서 등장했다. 지금 세대가 가꿔나가는 인프라 위에서 다음 세대는 또 어떤 부분에 집중해나갈지 궁금해진다.
특정 기능을 수행하는 큰 프로그램을 만들기 위해 여러 프로그램(DB, 웹서버)등을 설치해야할 때가 있다. 다만 이러한 과정은 예상치 못하는 오류를 자주 보이기도 하며, 상당히 번거롭다. 특정 운영체제나 환경에서 그냥 잘!! 돌아가도록 미리 만들어두고 서로 통신하며 굴러가면 참 좋을 것이다.
그러나 이를 위해 하드웨어를 직접 여러대 장만하는 것은 비용 소모가 크다. 여기서 컴퓨터 안의 컴퓨터인 가상머신의 개념이 나왔다. 운영체제 위에 서로 다른 환경과 운영체제를 각각 구축하는 것이다. 하드웨어 비용 절감은 되지만, 안그래도 용량이 큰 운영체제를 그 때 그 때 설치하는 것도 굉장히 비용 소모적인 일이고, 일단 느리다.
컨테이너의 개념이 등장한다. 각각의 소프트웨어/앱은 하나의 운영체제 위에서 ‘격리된 환경’을 갖고, 그 위에서 실행된다. 이 각각의 격리된 환경을 컨테이너라고 한다. 각각의 컨테이너에는 운영체제 전체가 설치된 것이 아니고, 앱을 위한 파일들(라이브러리 등)만 설치되어있다.
이런 컨테이너 기술을 사용하는 다양한 소프트웨어가 있고, 그 중 docker가 가장 많이 쓰인다.
먼저 CLI 두들겨보고 나서 어떤 개념들이 필요한지 확인하고 다시 찾아 정리했다.
https://docs.docker.com/get-started/overview/
Docker은 client-server 구조를 사용한다. Docker client는 Docker daemon에게 요청하고, docker daemon은 뒷 단에서 일을 처리하는 방식이다.
Docker client와 daemon은 같은 host에서 실행될 수도 있고, client는 다른 host의 docker daemon에 요청을 보낼 수도 있다!!
Client와 HTTP REST API로 의사소통 한다.
{
"Id": "8dfafdbc3a40",
"Names": [],
"Image": "ubuntu:latest",
"ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
"Command": "echo 1",
"Created": 1367854155,
"State": "Exited",
"Status": "Exit 0",
"Ports": [],
"Labels": {},
"SizeRw": 12288,
"SizeRootFs": 0,
"HostConfig": {},
"NetworkSettings": {},
"Mounts": []
},