도커와 쿠버네티스 - 도커

3426 단어 docker4242

도커란 무엇인가


도커에 대해 알기 위해서는 먼저 가상화가 무엇인지를 알아야 합니다.

컴퓨터는 기본적으로 하나의 운영체제만 사용할 수 있는데, 컴퓨터를 가상으로 분리해서 한 컴퓨터로 여러 운영체제를 사용할 수 있게 한 것이 가상화입니다.

 물리 머신 : 운영체제 = 1 : 1
 
 물리머신 -> n개의 가상머신 : n개의 운영체제

하나의 장치를 여러개로 나누는 것과 여러 장치를 묶어 하나로 사용하는 것 모두 가상화라고 하지만 도커 설명을 위해 전자로만 설명하겠습니다.

1. 호스트 가상화

호스트 가상화는 원래의 운영체제 위에 가상 머신을 설치하고, 그 위에 새로운 운영체제를 설치하는 방식입니다.

운영체제가 가상머신을 실행시키고 그 위에서 또다른 운영체제가 돌아갑니다. 이 때문에 상당히 큰 오버헤드가 발생하고 속도가 느려집니다.

2. 하이퍼바이저 가상화

호스트 가상화에서는 운영체제가 가상머신을 실행시켰지만, 하이퍼바이저 가상화는 하이퍼바이저라는 소프트웨어가 하드웨어에서 곧장 가상머신을 실행시킵니다.

운영체제를 통하지 않고 하이퍼바이저가 바로 물리머신을 가상머신으로 분할해 주기때문에 호스트 가상화보다는 확실히 적은 오버헤드가 발생합니다.
하지만 하이퍼바이저는 가상머신이 각각 독립되어 있습니다. 가상머신을 하나 만들때마다 매번 운영체제를 설치해주어야 합니다.

하나의 가상머신에서 발생한 오류가 다른 가상머신에 퍼지지 않는다는 장점이 있지만, 여전히 많은 오버헤드가 발생합니다.

3. 컨테이너 가상화

컨테이너 가상화는 가상머신도, 운영체제도 설치하지 않습니다.
필요한 건 그저 컨테이너 엔진 뿐입니다.
기존에는 하드웨어를 분리했지만, 컨테이너 가상화는 하드웨어가 아닌 프로세스를 분리합니다.

컨테이너는 서비스를 구동하기 위해 필요한 라이브러리, 종속 항목, 파일들을 패키지로 묶어 따로 격리합니다. 가상머신을 설치하지 않고도 가상머신과 비슷한 기능을 보여줍니다.

다른 가상화 방식보다 훨씬 빠르고 가볍습니다.

4. 드디어 도커

도커는 바로 이 컨테이너 가상화에 속합니다. 하드웨어가 아닌 프로세스를 격리해 가상환경을 만들어줍니다.

이 가상환경은 이미지를 기반으로 생성되고 또 배포됩니다. 이 이미지에는 환경을 구축하는데 필요한 파일과 설정들이 들어있습니다. 기초적인 환경 이미지(ubuntu, ,debian, alpine, nginx, wordpress ...)는 대부분 docker hub에 있으므로 단순히 이미지를 PULL해와서 실행시키기만 해도 빠르게 기초 환경을 구축할 수 있습니다.

+) 간단하게 데비안 환경을 구축하고 접속해 보겠습니다.

docker pull debian:buster
//이미지를 가져옵니다.
docker run -it debian:buster
//-i : 컨테이너와 상호작용 할 수 있게 해주는 옵션
//-t : 컨테이너와의 상호작용을 모니터에 보여주는 옵션
//컨테이너를 실행시키고 컨테이너에 접속합니다.

단 두줄로 데비안 환경을 구축하고 접속할 수 있었습니다.

도커는 어느 환경에서든 도커를 통해 이미지를 실행시키면 동일한 환경이 구축된다는 장점이 있습니다. windows건 macOS건 위의 코드를 실행시키면 동일한 데비안 환경에 접속할 수 있습니다.

또한 도커는 OS와 하드웨어를 공유하고 있기 때문에 컨테이너를 만들 때 하드웨어에 있던 자료를 컨테이너에 옮겨올 수 있습니다. 이 덕분에 직접 설정한 서비스를 쉽고 빠르게 배포할 수 있습니다.

Q) 어떻게 필요한 자료를 컨테이너로 옮길 수 있을까요?
A) 도커파일을 작성해 파일을 복사하겠다고 명시해야 합니다.

도커파일은 환경 혹은 서비스를 구축하는데 필요한 설정을 모아둔 파일입니다. 끌어올 이미지 설정, 복사해올 파일 설정, 컨테이너 내에서 실행시킬 명령어 설정 등을 할 수 있습니다.

+) 데비안을 기본 이미지로 해서 (1)nginx를 깔고, (2)nginx 설정파일인 default파일을 옮겨오고, (3)nginx를 실행시키는 도커파일을 만들어 보겠습니다.

FROM   debian:buster
RUN    apt-get install nginx
COPY   default /etc/nginx/sites-available/
CMD    service nginx start

도커파일의 이름은 무조건 Dockerfile 이어야 합니다.

도커파일을 빌드하면 이미지가 생기는데, 그 이미지를 실행시키면 이미 설정이 완료된 서비스가 실행됩니다.

+) 위에서 작성한 도커파일으로 myService라는 태그를 가진 이미지를 만들고 실행시켜보겠습니다.

docker build -t myService .
// -t : 태그설정 옵션. 
//해당 서비스의 태그가 myService로 수정됨
//. : 도커파일의 위치
docker run -it -p 80:80, -p 443:443 myService
//-p : 포트를 열어주는 옵션
//myService가 실행됨

default파일이 제대로 작성되었다면 localhost로 접속했을때 nginx를 만날 수 있을겁니다.

좋은 웹페이지 즐겨찾기