Container - docker
내컴퓨터에서 어떤 애플리케이션을 만들기 위해서는 운영체제에 많은 소프트웨어를 깔아야 함
예) 웹개발 <= 웹서버나 데이터베이스 설치 필요
이것들을 설치하는 것은 생각보다 까다롭고 힘듦
가정 1.
웹서버를 만든 사람이 컴퓨터를 구해서 거기에 적당한 운영체제를 깔고
그위에 웹서버,데이터베이스를 설치한다음에 그걸 우리에게 준다면 얼마나 좋을까?
그리고 우리의 앱은 네트워크를 통신해서 이것들을 사용할 수 있다면 얼마나 좋을까 ?
하지만
이것은 많은 pc를 요구하니 그만큼 많은 비용이 들 것임...
가정 2.
하나의 컴퓨터에 가상으로 컴퓨터를 만들고 그 위에 운영체제를 설치한 후에
거기에 웹서버를 설치한다면 어떨까? (vmware , virtualbox와 같은 것)
하지만
겨우 웹서버를 위해서 운영체제를 깔아야 된다는 것은 너무 아까움.
운영체제의 용량은 너무 크고, 운영체제 위에 운영체제가 있다보니 실행속도도 너무 느림
가정 3.
그냥 1대의 컴퓨터 안에서 각각의 앱을 실행시킴
각각의 앱은 그냥 실행되는 것이아니고 격리된 환경에서 실행되고,
이때 운영체제가 설치된 컴퓨터를 host라고 부름
host에서 실행되는 격리된 각각 실행환경을 container라고 부름
각각의 container에는 운영체제 전체가 설치되어있는 것이 아니고,
앱을 실행하는데 필요한 라이브러리와 실행 파일들만 포함되어 있음.
이렇게 된다면,
이미 존재하는 운영체제를 공유하니까 무엇인가를 설치할 필요도없고
운영체제가 1개이니 속도도 느려지지 않고,
운영체제를 다시할 필요도 없어 시간도 절약하고, 저장장치의 용량도 아낄수있음
리눅스 운영체제에는 이렇게 환상적인 앱 실행방법이 내장되어있음
이러한 기술을 container라고 부름
그중에서 제일 잘나가는 기술이 바로 docker !
Container Image
위 내용을 정리하자면. 도커는서비스하려고 하는 애플리케이션(코드 등)과 그에 필요한 라이브러리 등을
'컨테이너'라는 공간에 담아서 여기저기 배포하기 쉽게 도와주는 플랫폼이라 할 수 있다.
컨테이너는 위에서 말했듯 비록 크기는 작지만 하나의 컴퓨터와 같은 기능을 할 수있다.
이런 컨테이너를 여기저기에 배포하기 쉬울까? 정답은 아니다.
컨테이너 자체는 한꺼번에 옮기기 무겁고, 대신 '컨테이너 이미지(Container Image)' 라는 것을 생성해서
어디서나 이 이미지를 토대로 컨테이너를 쉽게 생성하여 신속하게 구축 / 배포할 수 있게 된다.
이미지(Image)란 말 그대로 컨테이너 안에 담긴 것들을 사진을 찍어두듯 저장해둔 것인데
당연히 컨테이너보다 훨씬 용량이 적어 가볍다. 그래서 여기저기 배포하기도 쉽다.
Layer
앞서 말했듯 이미지는 컨테이너의 스크린샷과 같은 개념으로,
컨테이너 실행에 필요한 파일과 설정값들을 담아둔 파일이다.
이미지 파일은 층층이 쌓인 Layer 구조로 쌓여있다.
파일들이 한꺼번에 저장되어 있는 게 아니라 여러 layer 에 나누어 저장되어 있는 것이다.
그리고 컨테이너를 만들 때 각각의 layer 에 있는 파일들을 가져오게 된다.
왜 이런 구조로 만들어졌을까?
컨테이너를 나누어 사용할 개발자들이 각각 서로 다른 라이브러리를 사용하여 연구를 진행할 확률이 높다.
이들이 컨테이너를 만들 때 <공통 layer + 추가적인 서로 다른 layer> 를 다운받아 만들게 되는데
이 공통 layer 를 공유할 수 있는 장점이 있고,
로컬에 이미 존재하는 layer 의 경우 다시 다운로드 받을 필요가 없기 때문에
(추가 layer 만 다운받아) 보다 빠르게 컨테이너를 실행할 수 있는 장점도 있다.
즉, 이미지를 보다 세세하게 나누어서 자원 효율화를 더욱 높인 구조라 볼 수 있다.
Registry
컨테이너에서 이미지를 생성할 수 있고 이미지로부터 컨테이너를 생성할 수도 있다.
레지스트리는 이미지들을 보관하는 저장소다.
도커 허브(Docker Hub) 같은 곳이 대표적인 레지스트리인데,
내가 간단한 이미지를 생성하여 올릴 수도 있고
이를 공개적으로 설정한다면(public) 전세계 누구나 그 이미지를 다운받아 컨테이너를 생성할 수도 있다.
레지스트리에는 Base Image 라고 해서
최소한의 기본적인 응용프로그램들만 담은 이미지들이 많은데,
예를 들어 mysql 을 사용하는 애플리케이션을 만들기 위해 mysql 이미지를 손쉽게 다운받을 수 있다.
docker pull mysql # 가장 최근 버전 다운
docker pull mysql:latest # 가장 최근 버전 다운
docker pull mysql:5.7.38 # 버전 5.7.38 다운
요렇게 매우 간단하게 docker pull 만 하면 이미지를 받을 수 있다.
이미지명 외에 태그명 또한 지정이 가능해서,
태그를 사용하여 원하는 버전의 mysql 이미지를 다운받을 수도 있다.
출처: 생활코딩, toramko 티스토리
'STUDY > SERVER OS' 카테고리의 다른 글
[Linux] log파일 볼 때 자주 사용하는 명령어 cat·head·tail·grep (0) | 2024.02.21 |
---|---|
[Linux] 리눅스에서 OS 버전 확인 (0) | 2024.01.15 |
[Windows] Ping이란 (0) | 2023.10.13 |
[Linux] 쉘과 쉘스크립트(.sh)에 대하여 (0) | 2023.10.13 |
[Linux] su / su - / sudo 명령어 차이 (0) | 2023.10.13 |