성장에 목마른 코린이

[배포] Docker 본문

배포

[배포] Docker

성장하는 코린이 2022. 11. 24. 08:57
728x90

Docker

Go 언어로 작성된 리눅스 컨테이너 기반 오픈소스 가상화 플랫폼입니다.
이걸 왜 쓰는지, 어떤 식으로 쓰는지 알아보도록 하겠습니다.

가상화를 사용하는 이유

서버 관리자 입장에서 CPU 사용률이 현저히 낮은 서버들을 그대로 두면 리소스 낭비, 돈 낭비입니다.

그렇다고 모든 서비스들을 한 서버안에 올리면 안정성이 바닥을 칠 것입니다.

여기에 안정성을 높이며 리소스도 최대한 활용할 수 있는, 혜성처럼 등장한 것이 서버 가상화입니다.
대표적인 가상화 플랫폼으로는 VM(Virtual Machine)이 있습니다.

컨테이너란?

현실 세계에서 컨테이너는 물자를 운송할 때 쓰는 물건입니다.

컨테이너 내용물의 소유자는 컨테이너가 배송되는 방법에 신경 쓸 필요가 없습니다.

또한 배송사는 내용물을 알거나 관리할 필요 없이 컨테이너를 목적지까지 운송합니다.

컨테이너는 가상화 기술 중 하나로,

기존 OS를 가상화시키던 것과 달리 OS 레벨의 가상화로 프로세스를 격리시켜 동작하는 방식이라고 합니다.

VM 가상화 vs 컨테이너 가상화

기존의 가상화나 클라우드 컴퓨팅을 설명할 때는 VMwareVirtualBox와 같은 VM이 언급되어졌습니다.

이러한 VM호스트 OS위에 게스트 OS 전체를 가상화하여 사용하던 방식입니다.

이 방식은 거의 완벽하에 게스트와 호스트가 분리된다는 장점이 있지만, 아무래도 OS 여러개를 돌려서 상대적으로 무겁고 느립니다.

컨테이너는 이러한 VM의 성능적 단점을 보다 개선한 시스템입니다.

컨테이너 기반 가상화는 Docker엔진 위에 OS가 아닌 Application 실행에 필요한 바이너리만 올립니다.

또한 컨테이너 기반 가상화는 Host의 커널을 공유하기 때문에 성능의 효율을 더 높일 수 있습니다.

컨테이너를 사용하는 것은 가상 머신을 생성하는 것과는 다른 개념입니다.

호스트 OS가 사용하는 자원을 분리하여 여러 운영 환경을 만들 수 있도록 하는 것입니다.

딱 봐도 구조가 훨씬 간단하고, 이렇게 구조 레이어가 간단한 컨테이너VM보다 성능을 높이기 쉽습니다.

Docker

컨테이너를 사용할 때 Docker를 사용하면 간단한 명령으로 컨테이너 이미지를 만들고 저장할 수 있습니다.

또한 도커를 설치한 호스트에 컨테이너 이미지를 다운로드해서 컨테이너를 실행할 수 있습니다.

여기서 컨테이너 이미지란?

컨테이너를 실행하기 위한 모든 것을 가지고 있는 것입니다.

(immutable) 이미지는 상태값을 가지지 않고 변하지 않습니다.

예를 들어 ubuntu 이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있으며,

MySQL 이미지는 MySQL을 실행하는 데 필요한 파일과 실행 명령어, 포트 등을 가지고 있습니다.

이제 새로운 서버가 추가된다면, 미리 만들어놓은 이미지를 다운받고 컨테이너를 생성하기만 하면 됩니다.

한 서버에 여러 컨테이너를 실행할 수 있습니다.

초간단 Docker 사용법

도커에서는 도커 이미지를 이용하여 컨테이너를 생성할 수 있다.
도커 이미지를 사용해 이미지에 설정해둔 대로 컨테이너의 구성 환경을 적용할 수 있다.

이미지 목록 보기

$ sudo docker images

이미지 검색

$ sudo docker search [이미지 이름]

이미지 받기

$ sudo docker pull [이미지 이름]:[버전]

이미지 삭제

$ sudo docker rmi [이미지 id]

컨테이너 목록 보기

$ sudo docker ps

컨테이너 실행

$ sudo docker run [options] image[:TAG|@DIGEST] [COMMAND] [ARG...]

컨테이너 시작/재시작

$ sudo docker start [컨테이너 id 또는 name]
$ sudo docker restart [컨테이너 id 또는 name]

컨테이너 접속

$ sudo docker attach [컨테이너 id 또는 name]

컨테이너 정지

$ sudo docker stop [컨테이너 id 또는 name]

컨테이너 삭제

$ sudo docker rm [컨테이너 id 또는 name]
Comments