[컨테이너와 컨테이너 이미지의 구조]
- 컨테이너는 하나의 Application 프로세스
- 컨테이너 1개 = Application 1개
- 컨테이너의 특징 : 완전하게 Application 들이 독립된 공간으로 분리되어 운영됨.
○ CPU, Memory, Network, Disk 등 H/W 리소스를 각각 따로 가지고 있다.
○ 또한, 사용되는 Hostname, User ID 도 모두 독립적.
- 즉, Frontend 단의 Node.js 는 PHP, MySQL(DB)에 동작되면서 영향을 주지 않는다.
[Docker Architecture]
※ Docker Host : Docker Daemon이 동작되고 있는 리눅스 커널이 있는 시스템
○ Docker가 Container들을 실행할 수 있는 Platform을 만들어 놨다는 의미.
- 여러 개의 Container들이 독립적으로 isolate되어 동작하지만, 사용하는 커널은 1개이다.
○ Docker Host 입장에서 Container는 단순히 동작되는 프로세스.
○ Docker Host가 갖고 있는 H/W리소스를 각 Container에 할당하여 실행하는 것.
[Container]
(Application Container의 목적은 run node app.js)
각각 하나의 uuid를 갖고 있는 image Layer
- base image Layer : app.js 가 실행되려면 node.js 가 필요하다. 즉 node.js를 먼저 설치하고
- source image Layer : app.js 코드를 컨테이너에 집어 넣는다.
- app.js 에 실행한다.
이와 같이 3개의 Layer가 쌓아 가지고 만들어진 Container이다.
시스템 관전에서는 nodejs를 uuid로 저장(ex. f3ed6cb59ab0)하고 Layer의 사이즈는 3.74MB이다.
이 3개의 Layer가 쌓인 Container를 하나의 Container 이미지라고 부른다.
※ Container Image : 여러 개의 Layer로 구성이 되어 하나의 Application이 실행될 수 있도록 모아져있는 이미지들의 조합
[ Container Image와 Container 가 어떻게 다른가? ]
- Docker Host에 dockerd 가 동작 중.
- Container image 들이 HDD에 하나의 File 형태로 저장됨. (ReadOnly)
○ 각각의 Layer 별로 File이 따로따로 저장됨.
- 이 Container image를 run하게 되면 메모리에 Container로 하나의 Application 프로세스로 실행됨
[컨테이너 동작 방식]
- Hub.docer.com 은 docker.com에서 운영하고 있는 컨테이너를 저장해놓고 있는 저장소.
$docker search nginx
: docker Hub에서 nginx가 있는 지 찾아보아라. dockerd가 docker Hub에 검색을 해서 nginx가 있는 지 확인하여 있으면 List를 출력한다.
$docker pull nginx:latest
: container image를 하드디스크로 가져온다.
$docker run -d --name web -p 80:80 nginx:latest
: container image를 실행한다. run 대신 create, start를 사용할 수 도 있다.
- docker platform 위에 container가 동작하게 된다. nginx가 설치된 web이라는 이름의 컨테이너
이제 Client가 Hostname이나 ip에 80번 port로 연결하면 nginx가 web page를 보내게 된다.
※ 이성미, [따배도] 도커 시리즈 ,TTABAE-LEARN, https://www.youtube.com/watch?v=m454YTyPWSk&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=9, 2021-08-31
'Docker > 이론' 카테고리의 다른 글
[Docker] 7.Container 리소스 관리 (0) | 2021.09.07 |
---|---|
[Docker] 5.Container 운영 (0) | 2021.08.24 |
[Docker] 4.Container Registry (0) | 2021.08.12 |
[Docker] 3.Container(3) (0) | 2021.08.03 |
[Docker] 1.Container (0) | 2021.07.29 |