본문 바로가기

Programming/Cloud

DAY 167. 도커(Docker) 개념

 

도커(Docker)?

애플리케이션을 개발/배포/실행 하기 위한 플랫폼이다.

컨테이너를 사용하여 애플리케이션 및 지원 구성 요소를 개발한다.

리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 제공한다.

배포 용량과 시간을 단축한다.

성능 손실을 최소화 시킨다.

 

 

https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

 

기존 가상화와 차이점?

▶ 기존 가상화 : 하드웨어 < 운영 체제 위에 Hypervisor를 올리고, Virtual Machine을 이용해서 필요한 운영체제를 또 올린다. 가상머신마다 운영체제를 별도 설치해야하기 때문에 용량이 매우 크다는 단점이 있다. 하드웨어도 가상화해서 사용하기 때문에 시스템 성능 손실이 많이 발생한다. 애플리케이션 배포하기에는 단점이 많다. (ex. Virtual Box, VM Ware)

 

▶ 도커 Docker : 하드웨어 < 운영체제 < Container Runtime 이 올라간 뒤, 운영체제가 별도로 올라가지 않는다. 도커는 리눅스 컨테이너를 기반으로 하기 때문에, 부가 기능을 제공받을 수 있다는 장점이 있다. 기존에 있던 운영체제를 공유해서 사용하고, 각 컨테이너는 애플리케이션 구동에 필요한 라이브러리와 앱(실행 파일)이 올라가고 별도의 분리된 영역을 갖기 때문에 서로에게 영향을 주지 않는다. 따라서 도커 컨테이너는 운영체제를 별도로 설치하지 않고 컨테이너가 돌아가는 호스트 시스템(OS)를 공유해서 사용한다. OS가 설치되지 않기 때문에 가상머신이 아니라 컨테이너라고 불린다. 용량이 훨씬 적다. 리눅스 컨테이너 기반으로 배포를 많이 하고 있다.

 

- 기존에는 웹 애플리케이션을 서버에서 실행 한다면, OS < JVM < Tomcat < Web Application 식으로 환경을 구성했었다.

만약, 사용자가 많아져서 똑같은 환경을 서버를 한 대 더 구입해서 만든다면, 똑같은 설치 과정이 필요할 것이다.

이 과정에서, 버전이 달라진다면 하나하나씩 수정해야 하는 단점이 있다.

 

- 그래서 도커를 사용한다면, 컨테이너를 사용하게 되고 똑같은 환경을 만들 때에는 똑같은 컨테이너를 1개씩 더 가상화 시켜서 실행시키면 된다. 따라서 세팅 과정을 줄일 수 있다.

 


 

https://docs.docker.com/get-started/overview/

 

- 클라이언트 서버 아키텍처를 사용한다.

- 사용자가 도커 클라이언트에서 명령어를 통해서 작업하며 요청 -> 도커 데몬에게 전달 -> 도커 데몬이 요청을 받아서 컨테이너 생성, 이미지 받아오기, 볼륨 생성, 네트워크 생성 등 작업 수헹 

 

도커 엔진 & 도커 데몬

외부에서 Docker API 요청을 받아서 Docker 객체와 서비스들을 관리

컨테이너를 생성하고 관리하는 주체

 

▶ 도커 데몬 : 도커 프로세스가 실행되어 입력받을 준비가 된 상태, 클라이언트(cmd)의 명령어를 받아서 컨테이너를 만들거나 이미지를 Registry(원격 저장소)에서 받아서 구동시킨다.

 

 

도커 클라이언트(docker)

입력된 명령어를 Docker API 형태로 도커 데몬에게 전달

도커 엔진의 수행 결과를 반환 받아 사용자에게 출력

 

 

도커 레지스트리(Registry)

도커에서 사용되는 이미지들을 저장, 공유해주는 원격 저장소 (도커 허브)

공개 레지스트리와 사설 레지스트리 사용 가능

 

 

 


 

도커 컨테이너

도커 이미지 실행이 가능한 인스턴스

개별 애플리케이션의 실행에 필요한 실행 환경을 독립적으로 운영한다.

 

 

도커 이미지

컨테이너를 만들고 실행하는 데 필요한 읽기 전용 파일(템플릿)

모든 컨테이너는 이미지 기반으로 생성

컨테이너 실행에 필요한 파일, 설정 값 등이 포함되어 있다.

 

 

※ 도커 이미지와 컨테이너 관계

- 컨테이너는 필요한 파일과 설정을 이미지에서 읽기 전용으로 가져다 사용하고, 변경된 사항만 컨테이너 계층에 별도로 저장한다.

- 하나의 이미지로 여러 컨테이너에서 사용할 수 있다.

- 컨테이너를 만들면 똑같은 환경의 컨테이너를 이미지를 통해서 만들 수 있다.

 

 

도커 허브(Docker Hub)

도커에서 공식으로 제공하는 중앙 이미지 저장소

깃헙, 메이븐 레파지토리와 비슷하다.

도커 계정이 있다면 누구든 이미지 업로드/다운로드 가능

도커 사용해서 개발 시에 필요한 이미지(리눅스 운영체제, 웹서버(톰캣), 데이터베이스, 각종 애플리케이션)를 도커 레지스트리에서 내려 받아 컨테이너로 생성할 수 있다.

 

 

도커 이미지 이름

[저장소이름/]이미지이름[:태그]

 

- 저장소 이름 : 생략 시 도커 허브 공식 이미지로 인식

- 태그 : => 버전을 의미, 생략 시 최신 버전(latest)으로 인식

 

 

PowerShell에서 검색어 명령

 

▶ 이미지 검색

1. 도커 허브에서 직접 검색

2. 도커 엔진에서 명령어로 검색

 

docker search 키워드

예시 > docker search tomcat 

[결과]

NAME  : [저장소이름/] 실제 이미지 이름

DESCRIPTION : 이미지 설명

STARS : 즐겨찾기된 횟수

OFFICAIL : [OK] 라면 Docker에서 제공하는 공식 이미지

AUTOMATED : 자동 BUILD 기능 사용하는지

 

 

 이미지 다운로드

docker pull [저장소이름/]이미지이름[:태그]

예시 > docker pull tomcat:8.5
           docker pull ubuntu 혹은 docker pull ubuntu:latest

 

 

 다운로드 받은 이미지 목록 조회

docker images

 

 

- IMAGE ID 는 16진수(0 ~ F까지)로된 ID로 구분한다.

 

[결과]

REPOSITORY : 이미지이름

TAG : 버전 정보

IMAGE ID : 실제 이미지에 대한 고유 ID

CREATED : 만들어진지 얼마나 되었는지

SIZE : 사이즈

 

 

docker images 이미지명

- 이미지명만으로도 조회가 가능하다.

예시 > docker images tomcat
- 톰캣 이름 가진 이미지만 쭉 나온다.

 

 

  이미지 세부 정보 조회

docker image/container/volume inspect IMAGE ID

- JSON 형태로 볼 수 있다.

예시 > docker image inspect 551e
-> id의 앞 4자리만 적어도 가능하다.

 

 

  도커 이미지 추출

docker save -o 파일명 이미지이름[:태그]

- o 옵션 : 추출될(실제 저장될) 파일명을 지정

 

 

- 이미지를 도커 허브나 사내 사설 레파지토리에 올려 놓고 받아서 사용하기 때문에 이 방법은 잘 사용하지 않는다.

- 도커 이미지를 파일 시스템에 별도의 파일로 추출해서 저장하는 것이다.

 

 

D드라이브가 없을 경우에는 C 드라이브 바로 밑에 하면 실행되지 않기 때문에, C 드라이브에 폴더 하나 임시로 생성해서 거기에 해야 된다. 그래서 dockertest라는 폴더를 임의로 만들었음

 

예시 > c:\\dockertest\\tomcat_image tomcat:8.5

 

 

  도커 이미지 로드(읽기)

docker load -i 파일명

 - i 옵션 : 로드할 파일명 지정

예시 > docker load -i D:\tomcat_image

 

- 추출될 파일을 다시 도커 내 이미지로 로드

 

 

 

  도커 이미지 이름 추가

docker tag [기존저장소/]기존이미지명[:기존태그]

                      [새로운저장소/]새로운이미지명[:새로운태그]

 

- 하나의 이미지에 이름을 여러 개 붙이는 것의 개념

- IMAGE ID는 같고 이름만 다른 또 다른 이미지가 추가된다.

- 이름은 하나 더 붙인다고해서, 이미지를 또 다운 받는 것이 아니다.

 

예시 > docker tag tomcat:8.5 mytom:1

 

 

  도커 이미지 삭제

docker rmi 이미지이름:태그 or IMAGE ID

 

 

 

[번외]

clear : PowerShell 작업 내용 모두 깨끗하게 지우기

'Programming > Cloud' 카테고리의 다른 글

DAY 171. 도커파일(Dockerfile) 응용  (0) 2022.02.09
DAY 170. 도커 볼륨(Docker Volume)  (0) 2022.02.08
DAY 169. 도커 파일(Dockerfile)  (0) 2022.02.07
DAY 168. 도커(Docker) 컨테이너  (0) 2022.02.05
DAY 167. 도커(Docker) 설치  (0) 2022.02.04