본문으로 바로가기

[DevOps]Docker(도커)란?

category IT 2021. 5. 21. 10:47
반응형

도커에 대해서 설명드리기전에 컨테이너 가상화 기술에 대해서 설명드리도록 하겠습니다.

컨테이너 가상화란?

  • 가상화 기술의 한 종류, 격리된 공간에서 프로세스가 동작하는 기술
  • 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것

  • 프로세스를 격리하여 하나의 서버에 여러개의 컨테이너를 독립적으로 실행 가능. 빠르고 민첩함

기존에 많이 사용하던 호스트 가상화, 하이퍼바이저 가상화의 구조와 비교를 통해 구조가 어떻게 진화되었는지 확인해보도록 하겠습니다.

호스트 가상화

  • VMware, VirtualBox, 무겁고 느려서 운영환경에서는 사용 불가한 수준

하이퍼바이저 가상화

  • KVM, Xen, OS전체를 가상화 하는 방식이 아니므로 성능 향상되었지만 하이퍼바이저에 따라 성능 저하가 발생함

기존 하이퍼바이저 가상화와 비교해보면 컨테이너 가상화는 호스트 OS위에 도커엔진과 같이 컨테이너 관리소프트웨어를 설치 하면 호스트OS위에서 바로 어플리케이션을 실행할 수 있습니다. 따라서 아래와 같은 장점을 갖고 있습니다.

컨테이너 가상화의 장점

  • 작고 가볍다 :
    OS없이 프로세스와 파일 시스템을 분리하는 형태이기 때문에 작고 가볍습니다.
  • 리소스 활동도가 높다 :
    컨테이너는 실행되는 프로세스를 위한 메모리만 필요하기 때문에, 낮은 사양의 환경에서도 컨테이너를 구동할 수 있습니다.
  • 작은 이미지 크기 :
    게스트OS가 필요없기 때문에 가상화 실행을 위한 이미지크기가 매우 작습니다.
  • 이동성 :
    개발자의 로컬PC에서 만든 컨테이너를 그대로 다른 컴퓨팅자원으로 가져가서 쉽게 실행할 수 있습니다.
  • 빠른 시작과 종료시간 :
    컨테이너를 실행하는 것은 호스트OS입장에서 보면 단순하게 프로세스를 시작하는 것이기 때문에 매우 빠르게 시작할 수 있습니다.
  • 일관성있는 환경 :
    컨테이너를 이용하여 다른 어플리케이션과 분리된 최적화된 환경을 구성할 수 있습니다. 어플리케이션과 종속항목들을 분리하여 관리가 가능하기때문에 환경차이의 문제에서 벗어날 수 있기 때문에 산성을 높힐 수 있습니다.
  • 다양한 운영환경 지원 :
    컨테이너는 Linux, windows, Mac OS, 가상머신, 베어메탈 등등 사실상 어느 환경에서나 구동이 가능하므로 개발과 배포를 수월하게 진행할 수 있습니다.

등등 여러가지 장점들이 있습니다. 이런 컨테이너 가상화를 가능하게 하는 것이 바로 오늘 설명 드릴 도커 입니다.

도커란?

도커는 기존 VM방식에서 사용하던 VM이미지와 같은 도커이미지 생성하여 관리할 수 있습니다.

도커 이미지

  • 도커 이미지는 컨테이너 실행에 필요한 파일과 설정 값등을 포함하고 있음
  • 도커이미지는 Docker Hub에 등록하거나 Docker Registry를 직접 만들어서 관리 가능함
  • 도커 이미지는 Dockerfile에 명시된 내용에 따라 생성함
  • 파일이 추가되거나 수정되면 새로운 도커이미지 생성이 아닌 레이어가 생성됨
  • 이미지에 태그를 붙혀서 관리 가능

 

그럼 도커이미지는 어떻게 생성할까요?

도커 이미지는 도커파일(Dockerfile)에 정의댄 정보에 따라서 생성을 하게 됩니다.

 

도커파일

  • DSL(Domain-specific language)언어를 이용하여 이미지 생성 과정을 적음
  • Dockerfile 예시
# 어떤 이미지를 기반으로 할지 설정 합니다.
FROM ubuntu:latest

# 이미지 생성자 정보를 입력합니다.
MAINTAINER kimdragon5@test.com

#local pc에 있는 파일을 복사합니다.
ADD docker/script/start.sh /usr/local/bin/

# 셸 스크립트 또는 명령어를 실행합니다.
RUN ln -s /usr/local/bin/start.sh /start.sh

# 호스트와 연결할 포트 입니다.
EXPOSE 80
EXPOSE 443

#컨테이너가 시작되었을때 실행할 파일 또는 쉘 스크립트 입니다.
CMD ["start.sh"]

도커 허브

  • 도커허브는 위에서 생성한 도커이미지를 저장할 수 있는 저장 공간 입니다. 도커허브에 업로드하여 다른 사람들과 공유할 수 있고, 다른 사람들이 업로드해 놓은 이미지를 가져다가 사용할 수도 있습니다.

https://hub.docker.com]

도커 데모

  • 도커 허브에있는 Nginx 이미지를 실행 하는 예제
## server 와 client로 구분되어있는 것을 확인 할 수 있음
docker version

## nginx 를 띄워보자 nginx는 docker hub에 있는 도커이미지
docker run -d -p 80:80 --name dockertest nginx
docker run -d -it -p 80:80 --name dockertest nginx



## docker file 생성
- Nginx에 내가 생성한 index.html을 실행하는 예제

- index.html 

```html
<html>
<head>
<title> hello world </title>
</head>
<body> <h1> Hello world </h1>
</body>
</html>
  • dockerfile 예제
vi dockerfile
FROM nginx:latest
COPY ./index.html /usr/share/nginx/html
  • 생성한 도커이미지 생성/확인/실행
# 이미지 생성
docker build -t dockertest .
# 이미지 확인
docker images
# 이미지 실행
docker run -itd -p 80:80 -name dockertest dockertest
반응형