일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자연어처리
- RecSys
- Collaborative Filtering Bandit
- 클라우드
- aws자격증
- HTTP
- 클라우드자격증
- llm
- BANDiT
- BERT이해
- TFX
- chatGPT
- nlp
- 머신러닝 파이프라인
- 플랫폼
- transformer
- 머신러닝
- 메타버스
- MSCS
- MLOps
- docker
- COFIBA
- MAB
- 추천시스템
- 중국플랫폼
- BERT
- 미국석사
- 네트워크
- AWS
- 언어모델
- Today
- Total
Julie의 Tech 블로그
컨테이너 개념 이해 - (2) VM vs Container 본문
AWS 컨테이너 서비스에 대한 이해를 하기 전, 컨테이너란 어떤 개념인지를 파악하기 위해 기록을 해보았다. VM과는 어떤 추상화 차이가 있는지에 대해서 살펴보며, 컨테이너 서비스 중 도커와 kubernetes에 대해 간략하게 정리하였다.
* VM (Virtual Machine)
- hardware-level virtualization
* 컨테이너
- OS-level virtualization이다.
즉 VM은 hardware (processor, ram, stroage, network 등)을 가상화하고,
컨테이너는 Operating System(OS)를 가상화한다.
VM은 hyperviser 를 통해 hardware가상화를 제공함으로써 machine의 isolation을 구현하였다.
즉 VM을 띄우면 개별 machine처럼 보인다.
각각의 서버가 철저히 독립된 상태이다.
이에 따라 하드웨어 유연성을 최대로 가져갈 수 있다.
컨테이너는 process를 isolation하였다. 프로세스끼리 자원 공유가 가능하며 위 장점에 따라 portability를 최대로 가져갈 수 있다. (흔히 도커를 파일로 저장하여 포팅하듯이) 컨테이너를 사용하게 되면 하드웨어적인 한계가 있을 수 있다.
VM 계층도 vs 도커 계층도
Docker
도커는 컨테이너화 기술 중 하나이며, VM과는 다르게 가상 실행 환경이다.
우분투 VM을 띄우면 우분투 서버가 실행되지만, 도커는 우분투 이미지를 run하면 우분투에 명령을 실행할 수 있는 환경만을 제공해준다는 점에서 큰 차이가 있다.
위 설명을 좀 더 직관적이게 이해하려면, 아래를 따라 터미널창에서 실행해보면 된다.
우분투 image를 run하면 아무 결과물을 내뱉지 않는다. 문제가 있다고 생각하기 쉬운데, 실상은 default 명령어인 “/bin/bash” 가 실행되고, 해당 명령어에 따른 output이 아무것도 나오지 않는 것이다. 하지만 output을 뱉지 않으니 프로세스가 명령어 수행시 바로 exit된 상태처럼 느껴질 수 있다.
docker run ubuntu 시 아무 결과도 내뱉지 않음
docker run ubuntu “env”와 같이 옵션에 명령어를 주게 되면 해당 명령어로 인한 결과물이 뱉고, 바로 종료된다는 점을 확인할 수 있다.
docker run ubuntu "env" 실행시 env 결과를 내뱉음
이처럼 도커는 가상 실행 환경을 제공하는 것이기 때문에 컨테이너에서 실행되는 명령이 계속되지 않는 이상 명령이 종료됨에 따라 컨테이너도 종료된다. 즉 도커 컨테이너는 host os 의 입장에서 보면 하나의 프로세스이기에 docker run이 끝나게 되면 프로세스가 종료되어 컨테이너가 종료된다.
백그라운드로 컨테이너를 실행해주더라도 명령어 수행이 마무리되면 바로 exit된다. (옵션 : -d)
-d 옵션으로 docker run시에 컨테이너 ID를 내뱉음
-it 옵션으로 실행할 경우 가상 shell환경이 실행되고 있기 때문에 컨테이너가 종료되지 않고 계속적으로 실행되고 있는 것을 확인할 수 있다.
* -i : interactive (표준입력, 표준출력을 키보드와 화면을 통해 가능하도록 함)
* -t : terminal 기반의 애뮬레이션 옵션
위에서 docker attach 명령어를 통해 컨테이너에 접속하여 shell환경처럼 명령어를 내릴 수 있다. (exit 명령어를 주게 되면 당연 컨테이너는 종료됨)
이처럼 가상 실행 환경을 제공해주는 도커는 일반적으로 4단계로 구성되어 심플하게 운영할 수 있다.
1) 컨테이너 실행
2) 도커 빌드 (dockerfile 작성 등)
3) 빌드한 도커를 registry 에 push
4) 도커 run
이처럼 도커의 개념과 특성을 정리하고 보면 아래와 같은 상황을 이해할 수 있다.
- 도커는 컨테이너가 각각 독립된 환경(sandbox화)을 사용하기 때문에 컨테이너 환경과 곳에서 프로세스에 접근하기 위해서는 Port를 뚫어줘야한다. 즉 내가 도커에 웹 서버를 띄우더라도 host network인 내 컴퓨터에서 접근하려고 하면 네트워크를 공유하고 있지 않기 때문에 포트를 매핑 해주어야한다.
- 또한 컨테이너는 stateless하기 때문에 host 내 데이터를 저장하고 다른 컨테이너를 띄우더라도 해당 데이터에 접근가능하도록 하기 위해서는 별도 명령어를 통해 host내 특정 경로로 저장을 해야한다. (docker run시 -v 옵션)
다음편에는 왜 도커를 사용해야하는 가에 대해 다뤄보는 것으로 글을 마무리하겠다 🙂
-- 내가 보려고 적은 추가 노트
* 리눅스 명령어 :
- ps aux : 프로세스 리스트가 출력됨
- ps aux | grep 프로그램명 : pid(process id)를 확인할 수 있음
- nester : 프로그램을 다른 프로그램의 namespace내에서 run하도록함
* Namespace : 프로세스가 보고 접근할 수 있는 부분을 한정하는 것. 다른 네트워크 환경이거나 다른 프로세스인 경우 접근이 불가함
- control group, ipc(interprocess communication), its (hostname), user ID, 등을 저장할 수 있음
- control group이란 프로세스가 소비할 수 있는 자원의 량을 한정하는 것
* 도커 명령어 관련
- docker run -d redis <- -d는 background에서 돌게 하는 옵션, docker run <option> <image-name>:<tag> (tag없으면 최신버전으로 자동다운)
- docker ps : 실행되고 있는 프로세스를 보여줌
* 백그라운드 vs 포그라운드
백그라운드 기능은 프로세스가 실행되는 동안 다른 프로세스가 실행 가능
즉 하나의 쉘에서 여러 개의 프로세스를 동시에 실행할 수 있는 방식
반면 포그라운드는 명령어 실행이 완료될 때까지 기다리는 방식
출처 및 참고자료
www.docker.com/whatisdocker - 도커, VM 사진 출처
https://www.popit.kr/개발자가-처음-docker-접할때-오는-멘붕-몇가지/
https://gocoder.tistory.com/1814 [고코더 IT Express] - 백그라운드 vs 포그라운드
'Tech > AWS' 카테고리의 다른 글
AWS SAA 자격증 준비 (3) - 컴퓨팅 (0) | 2022.08.14 |
---|---|
AWS SAA 자격증 준비 (2) - 클라우드 개념, 인프라, 보안 및 다중계정 (0) | 2022.08.14 |
AWS SAA 자격증 준비 (1) - 자격증 개요 및 준비 팁 (0) | 2022.08.14 |
컨테이너 개념 이해 - (3) Why Docker? (0) | 2021.05.12 |
AWS - Container Service (ECS vs EKS) 에 대한 이해 (0) | 2021.05.12 |