반응형
도커에 대해서 설명드리기전에 컨테이너 가상화 기술에 대해서 설명드리도록 하겠습니다.
컨테이너 가상화란?
- 가상화 기술의 한 종류, 격리된 공간에서 프로세스가 동작하는 기술
- 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
- 프로세스를 격리하여 하나의 서버에 여러개의 컨테이너를 독립적으로 실행 가능. 빠르고 민첩함
기존에 많이 사용하던 호스트 가상화, 하이퍼바이저 가상화의 구조와 비교를 통해 구조가 어떻게 진화되었는지 확인해보도록 하겠습니다.
호스트 가상화
- VMware, VirtualBox, 무겁고 느려서 운영환경에서는 사용 불가한 수준
하이퍼바이저 가상화
- KVM, Xen, OS전체를 가상화 하는 방식이 아니므로 성능 향상되었지만 하이퍼바이저에 따라 성능 저하가 발생함
기존 하이퍼바이저 가상화와 비교해보면 컨테이너 가상화는 호스트 OS위에 도커엔진과 같이 컨테이너 관리소프트웨어를 설치 하면 호스트OS위에서 바로 어플리케이션을 실행할 수 있습니다. 따라서 아래와 같은 장점을 갖고 있습니다.
컨테이너 가상화의 장점
- 작고 가볍다 :
OS없이 프로세스와 파일 시스템을 분리하는 형태이기 때문에 작고 가볍습니다. - 리소스 활동도가 높다 :
컨테이너는 실행되는 프로세스를 위한 메모리만 필요하기 때문에, 낮은 사양의 환경에서도 컨테이너를 구동할 수 있습니다. - 작은 이미지 크기 :
게스트OS가 필요없기 때문에 가상화 실행을 위한 이미지크기가 매우 작습니다. - 이동성 :
개발자의 로컬PC에서 만든 컨테이너를 그대로 다른 컴퓨팅자원으로 가져가서 쉽게 실행할 수 있습니다. - 빠른 시작과 종료시간 :
컨테이너를 실행하는 것은 호스트OS입장에서 보면 단순하게 프로세스를 시작하는 것이기 때문에 매우 빠르게 시작할 수 있습니다. - 일관성있는 환경 :
컨테이너를 이용하여 다른 어플리케이션과 분리된 최적화된 환경을 구성할 수 있습니다. 어플리케이션과 종속항목들을 분리하여 관리가 가능하기때문에 환경차이의 문제에서 벗어날 수 있기 때문에 산성을 높힐 수 있습니다. - 다양한 운영환경 지원 :
컨테이너는 Linux, windows, Mac OS, 가상머신, 베어메탈 등등 사실상 어느 환경에서나 구동이 가능하므로 개발과 배포를 수월하게 진행할 수 있습니다.
등등 여러가지 장점들이 있습니다. 이런 컨테이너 가상화를 가능하게 하는 것이 바로 오늘 설명 드릴 도커 입니다.
도커란?
- 컨테이너 기반의 오픈소스 가상화 플랫폼
- Docker는 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행하도록 설계된 도구
- OS, 백엔드 프로그램, 데이터베이스, 메시지 큐 등 무엇이든 컨테이너로 추상화할 수 있게 해줌
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e1837b28-8fe1-4d2c-8673-b660bf898c2c/_2021-04-26__5.54.48.png
도커는 기존 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"]
도커 허브
- 도커허브는 위에서 생성한 도커이미지를 저장할 수 있는 저장 공간 입니다. 도커허브에 업로드하여 다른 사람들과 공유할 수 있고, 다른 사람들이 업로드해 놓은 이미지를 가져다가 사용할 수도 있습니다.
도커 데모
- 도커 허브에있는 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
반응형
'IT' 카테고리의 다른 글
Visual Studio Code 유용한 단축키 모음 (0) | 2021.08.04 |
---|---|
Message Qeue란?(Kafka vs RabbitMQ vs ActiveMQ) (0) | 2021.08.03 |
Mobaxterm 마우스 우클릭 Paste 설정 (0) | 2019.12.23 |
ELK(ElasticSearch, Logstash, Kibana) 란? ELK Stack 이란? (0) | 2019.12.11 |
[AI/ML]Anaconda(아나콘다) 란?? (0) | 2019.12.10 |