< 이론 >
주제
- 컨테너와 컨테이너 이미지가 어떤 구조로 만들어져있고 둘 간의 차이점
- 컨테이너가 어떤 형태로 동작되는지 전체적인 흐름을 본다.
컨테이너와 컨테이너 이미지의 구조
- 용어
- 컨테이너 이미지(readonly) = 디스크에 이미지의 레이어별로 저장되는 파일 형태의 이미지 = 여러개(1개도 가능)의 레이어로 구성된 컨테이너 이미지 = 컨테이너 실행을 위해 필수적인, 하나의 어플리케이션이 잘 실행될 수 있도록 모아져있는 이미지들의 조합
- 컨테이너(read&write) 도커플랫폼 위에서 컨테이너 이미지를 실행한, 동작중인 프로세스. ⇒ 메모리에서 하나의 애플리케이션 프로세스로 러닝중인 것
- 도커 허브(hub.docker.com) docker.com에서 제공해주는 허브. 또는 커스텀 허브(회사에서 자기네 환경에 맞춰서 직접 도커허브 만들 경우)
- 일반 어플리케이션과 컨테이너 기반 애플리케이션의 비교
- 공통점 일반 에플리케이션이랑 동일하게 어플리케이션을 실행해줌
- 차이점 도커에서는 각각의 어플리케이션이 완전하게 분리된, 독립적인 공간에서 각자가 따로따로 움직인다. (애플리케이션이 동작될 때, 컨테이너 1개 == 어플리케이션 1개)
- a 컨테이너 : nodeJS 기반의 웹서버c 컨테이너 : mysql 데이터베이스⇒ 프론트단에 있는 노드js에는 동작되면서 뒷 단에 있는 php나 mysql에 영향을 주지 않음. 수정이 있따하더라도 노드js단에서만 수정해서 배포하면 돼
- 컨테이너 특징 : 어플리케이션들이 독립돼서 분리돼서 운영된다. cpu, memory, network, disk..하드웨어 리소스들을 각각 따로따로 가지고있어. 그리고 유저아이디(hostname)도 독립적으로
- b 컨테이너 : php 기반의 어플리케이션
- 컨테이너 세분화 Layer : 컨테이너 내에서 하나의 층 단위 ( ∵ 쌓는다는 개념 ): 고유의 UUID를 가지고 있는 이미지
- 구성
- Base Image Layer - 설비가 되는 가장 기본적인 이미지 레이어
- Soruce Image Layer - 실행하고자 하는 애플리케이션을 싣는 레이어
- 세번째 : 동작시키는 레이어 3개의 레이어를 가지고 만들어진 컨테이너!
- 구성
- EX) 예제를 통한 컨테이너 세분화(구조화) run node app.js——————— app.js 소스코드 ———————웹서비스를 지원해주는 프론트단 어플리케이션인 app.js 실행하려면 node.js가 필요하므로 필요한 설비인 nodejs를 설치하는거야. ( Like 원양어선에 필요한 환경인 냉동고로 생선을 날라야 유통이 잘되는 것 ) 그러고나서 app.js라는 물건을 넣는 것. 컨테이너가 실행될 떄 app.js가 동작해서 웹서비스가 실행되도록 하는 것. 이게 다 컨테이너 구조.
- nodejs base image
- Docker Daemon 도커에서 컨테이너 실행시키는 데몬. - 도커 데스크탑으로 하면 자동으로 도커데몬이 실행이 되는데 만약 리눅스에서 수동으로 데몬 시작하려면 systemctl start docker 명령어 입력
- Docker Host(도커호스트) = 1개의 리눅스 커널을 가지고 있는 OS(윈도우/맥/리눅스)에다가 docker를 설치해서 데몬을 실행하고 있는 것 = 리눅스 커널이 있는 OS에서 도커 데몬이 동작되고 있는 시스템. = 리눅스 커널 있는 특정 OS에 도커가 컨테이너를 실행할 수 있는 플랫폼을 만들어놨따는 것. 즉, 하드웨어가 각각의 컨테이너에 할당되고 동일한 커널의 도커 데몬 하에서 독립적인 상태로 운영되는 어플리케이션으로 동작되는 것이다. ⇒ 도커데몬이 없으면 컨테이너는 동작 할 수 X 도커호스트에 도커데몬(==Docker d)이 동작중인 상태야. 그리고 컨테이너 이미지가 하드디스크에 파일형태로 저장되어있어. (각각의 레이어별로 파일이 따로 존재함)
컨테이너 동작 방식
- EX) 도커 nginx 이미지 search 및 pull 명령 후 컨테이너화 프로세스
- 도커호스트에다가 도커 클라이언트 search 명령을 실행시킴 : docker search nginx 도커 허브에서 ngix 있는지 찾아봐
- docker client command 도커 데몬에게 데몬아 ~~작업해줘 라고 명령어 때리는 거
- 도커데몬은 도커허브에 nginx 있는지 검색해서 있으면 리스트 출력해줌
- 허브에서 이미지를 내 하드로 가져온다 : docker pull nginx:latest 실제로는 레이어가 여러개 있을텐데 그 개수만큼의 폴더를 가지고 도커허브에서 파일을 저장하고 있음. 다운받은 이미지는 하나지만 레이어별로 파일이 따로따로 있어.
- 컨테이너 생성 (컨테이너이미지 → 컨테이너 시키는) 명령 ex) docker run/create/start -d --name web -p 80:80 nginx:latest : nginx라는 웹서버가 web이라는 이름으로 컨테이너화함으로써 현재실행중인 애플리케이션이 되는 것.⇒ 고객이 접속하면 nginx가 웹펭이지를 보여주게 된다. 최종적으로 컨테이너기반으로 고객이 접속할 수 있는 서버까지 만든 것. 컨테이너 안에 이미 다 완성되어있는 걸 실행만 해줌 돼.(설정 필요 X)
- 도커호스트에다가 도커 클라이언트 search 명령을 실행시킴 : docker search nginx 도커 허브에서 ngix 있는지 찾아봐
< 실습 >
실습을 통해서 컨테이너가 어케 동작되고 어떤 구조로 되어있는지 알아보자
- Docker 허브에서 Search명령어 이용하여 컨테이너 이미지 검색
- 루트계정에서 /bar/lib/docker/ : -ls -l 폴더들이 쭉 있는데 컨테이너 이미지 레이어가 들어가는 폴더들 cd overlay2 ls 명령어 실행 시, l 폴더만 보이는 상태(1개의 레이어) 컨테이너 이미지가 하나도 없는 상태야.
- pull 명령어로 컨테이너 이미지 다운로드 후 이미지레이어보기검색돼서 검색된 이미지를 받아오는데 uuid로 구분돼서 총 레이어 5개 有 도커데스크탑으로 확인하면 nginx 컨테이너이미지 전체인 하나만 보여줌.
- docker image ls nginx latest 버전으로 2주전에 도커허브에서 마지막으로 업데이트된 총 142메가바이트 이미지가 시스템에 저장되어있다 라는 것. 컨테이너 동작 시, 90eff736fb3a29b4a1538d0c4fcdf2906a6173989a3978c8c7a0147b2a90a637 라는 uuid의 컨테이너 아이디로 동작이 된다. 시스템에는 80포트가 열려있고 누구나 80로 접속ㄹ하면 ngix가 제공해주는 웹페이지가 보여진다.
- docker ps 현재동작중인 컨테이너보여달라는 명령어 수많은 종류의 웹페이지들이 있을텐데 그것들이 고객에게 전달이 되는 것. 하나의 어플리케이션 프로세스..
- 컨테이너 실행하고 확인해보기
- curl localhost:80 : 웹페이지가 보여지게 돼
- 컨테이너 중지(고객이 접속 불가하게 됨)
- docker stop web
- 컨테이너 삭제(컨테이너가 지워진거지, 이미지가 지워진 게 아냐.)
- docker rm web
- 이미지 삭제
- dcoker rm image nginx == docker rmi nginx
'DEVOPS > Docker' 카테고리의 다른 글
[따배도] 5강 - 컨테이너 Registry (0) | 2022.05.12 |
---|---|
[따배도] 4강 - 도커 컨테이너 만들어보기 (0) | 2022.05.12 |
[따배도] 2강 - 도커 설치 (0) | 2022.05.12 |
[따배도] 1강 - 컨테이너 개념 (0) | 2022.05.12 |
[따배도] OT (0) | 2022.05.11 |
Uploaded by Notion2Tistory v1.1.0