개발/Docker

[Docker] 도커 개념 잡기 및 이해, 용어 (Container, Image, Dockerfile, Dockerhub)

mabb 2023. 9. 17. 07:55
반응형

빠르게 개발하고 어디서든 실행

Build once, Run anywhere.
Develop faster, Run anywhere.
도커의 슬로건. 애플리케이션을 어떤 환경에서든 실행 가능한 것이 도커의 장점이다. 

 

Docker: Accelerated Container Application Development

Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

DotCloud => Docker (회사명 변경)

가상화.
물리 리소스를 논리적으로 구현하는 것
OS도 일종의 가상화


컨테이너는 '리소스가 격리된 프로세스' 호스트 OS의 커널을 공유한다.

컨테이너 기술의 역사
빌조이(유닉스 TCP/IP, chroot 등 개발)

컴퓨터가 비싸던 시절, 개발 환경과 운영 환경을 각각 구성하는 것은
비용적으로 쉽지 않은 일이었음.

-특정 디렉터리를 root('/') 디렉터리로 인식하게 하는 기술 chroot
-파일 시스템을 분리하는 기술
-컨테이너 이미지를 공유하는 기술
=> 도커의 유행.

도커파일=> 도커이미지 => 컨테이너 실행
도커 이미지의 공유 = 도커 허브

도커 사용 3단계
1.빌드
2.쉐어
3. 런


쿠버네티스: 컨테이너화 된 애플리케이션의 자동 배포 및 스케일링 목적 관리도구.
오토 스케일링 = 스케일 아웃의 자동화
스케일링 = 스케일 아웃을 조정하는 것 정도로 이해

같은 기능을 하는 컨테이너를 추가하여 로드밸런싱 해주면 스케일 아웃이
되는 것으로 이해

스케일업(수직확장): 서버 자체 사양을 업그레이드
스케일아웃(수평확장): 서버를 추가하여 분산하는 확장




도커가 필요한 이유.

일관성을 위한 애플리케이션 컨테이너화 가능
서버마다 서버 패키지를 세팅해주어야 한다.
버전, 경로, 등등...

도커는 컨테이너라는 격리된 환경에서 
애플리케이션 패키징
애플리케이션 실행
기능을 제공한다.

격리되어 있기 때문에
특정 호스트에서 많은 컨테이너를 운영할 수 있다.

컨테이너는 가볍다.
컨테이너는 애플리케이션 실행에 필요한 모든 것을 포함한다.
컨테이너의 애플리케이션은 호스트에 설치된 것에 의존할 필요가 없다.

컨테이너를 공유할 수 있다.
공유한 컨테이너를 실행하는 모든 사람이 동일한 방식으로
애플리케이션을 실행할 수 있다.


컨테이너는 애플리케이션 배포 및 테스트의 단위가 될 수 있다.
로컬 코드 작업을 컨테이너로 공유할 수 있다.

Docker is portability and lilghtweight

도커 아키텍처 ( Client - Servier Architecture / Restful API )
1. 도커 클라이언트
-Docker users interact with Docker
-client can communicate with daemon
-도커 클라이언트는 도커데몬과 커뮤니케이션


2. 도커 데몬(dockerd)
-Docker API Request 
-manage Docker objects ( containers, networks, volumes)
-communicate with other daemons to manage Docker services.
-도커데몬은 도커 오브젝트들을 관리

3. 도커 허브
-pull or run: Docker pulls the required images from your configured registry
-push: Docker pushes your image to your configured registry

 

Dockerfile + Code +@  =>  Image  => Container



Docker object = Images and Containers
Images
-image is a read-only template
-도커 컨테이너 생성을 위한 지침이 포함된 읽기 전용 템플릿
-이미지는 다른 이미지를 기반으로 할 수 있다.
ex) 우분투 이미지를 기반으로 이미지를 만들 수 있다.
-> 우분투 이미지 속에 nginx 이미지 
직접 우분투 환경에 nginx를 설치하는 것보다 이미지를 다운로드하여
컨테이너 화하여 사용하면 되는 것으로 이해.

컨테이너는 리소스가 격리된 프로세스라고 했는데, 운영체제 자체도 컨테이너화가
가능한 것.

자신만의 이미지를 만들거나 레지스트리에 게시된 이미지를 사용할 수 있다.

Dockerfile
이미지 생성 및 실행에 필요한 단계를 정의하는 구문 파일

도커파일의 각 명령은 이미지에 레이어를 생성한다.
도커파일을 변경하거나 이미지를 리빌드 할 때 변경된 레이어가
리빌트 된다. 다른 가상화 기술 대비하여 이미지를 경량, small 그리고 fast 하게 만든다.

호스트 OS형 가상화나 하이퍼바이저형 가상화 등과 비교하여 가벼움

Containers
-이미지 Runnable 객체. Image를 실행하면 독립된(격리된) 공간 컨테이너가 생기는 것으로 이해.
-Docker API or API로 컨테이너 create, start, stop, move, delete
-컨테이너는 start 시점 이미지 및 설정 옵션으로 정의된다.
-컨테이너 종료 시 persistent storage에 저장하지 않은 모든 변화는
저장되지 않는다.


듀토리얼
$ docker run -i -t ubuntu /bin/bash

1. 우분투 이미지가 로컬에 없을 경우 configured registry에서
자동으로 docker pull ubuntu 한다.
2. docker는 새로운 container 를 생성한다.

3. docker는 컨테이너의 최종 레이어로 읽기-쓰기 파일 시스템을 할당한다.
실행 중인 컨테이너가 로컬 파일 시스템에서 파일과 디렉터리를
생성 및 수정할 수 있게 된다.

4.docker 는 네트워킹 옵션을 지정하지 않은 경우
컨테이너의 네트워크 인터페이스를 생성하여 기본
네트워크에 연결한다.
컨테이너에 IP주소를 할당한다.

5. 컨테이너는 호스트 머신의 네트워크 연결을 사용하여
외부 네트워크에 연결할 수 있다.

6. 도커는 컨테이너를 시작하고 /bin/bash/를 실행한다.(-i -t 옵션)

7. /bin/bash exit 명령으로 컨테이너를 종료한다. 컨테이너를 종료해도
이미지가 삭제되지는 않는다. 이미지는 다시 시작하거나
제거할 수 있다.



Docker is written in the Go programming language.
Docker uses a technology called namespaces to provide
the isolated workspace called the container.
When you run a container, Docker creates a set of
namespaces for that container. 
컨테이너에 이름을 붙인다.


chroot 자체는 특정 디렉터리를 root 경로를 사용할  수 있게 
해주지만 파일시스템이 격리되지는 않음.
Change Root Directory (과거 빌 조이 선생님 개발, 특정 디렉터리를
root디렉터리로 인식하게 하여 진짜 루트('/')에 접근하지 못하게 하는 등
격리시키는 기술)

도커 컨테이너는 chroot + 파일시스템 격리로 이해.
루트경로도 다르고 파일시스템도 격리되니 독립된 공간인 것.
이 독립된 공간에 애플리케이션 실행에 필요한 환경을 세팅하여 컨테이너화 하고
Image파일로 만들면, 이 이미지를 서로 공유하거나 어느 환경에든 넣어 다시 도커로
컨테이너화 하여 사용할 수 있는 것.

실행 중인 컨테이너는 격리된 파일시스템을 사용한다.
격리된 파일시스템은 이미지에 의해 제공된다.
이미지에는 애플리케이션을 실행하는데 필요한 모든 것
-모든 종속성, 구성, 스크립트, 바이너리, 환경변수, 실행 기본명령
, 기타 메타데이터 등
이 포함된다.


Build the app's image
To build the image, use a Dockerfile.
도커파일은 이미지 생성 지침 스크립트가 포함된
파일확장자가 없는  단순한 텍스트 기반 파일, 

도커파일은 이미지 생성 지침 스크립트.

Dockerfile 생성
-package.json 동일 디렉터리인 getting-started-app 디렉터리에서
Dockerfile 생성.

# syntax=docker/dockerfile:1
FROM
WORKDIR
COPY
RUN
CMD
EXPOSE

Docker Compose

컨테이너 실행 옵션을 도커컴포즈파일로 작성해둘수있다. 예를들어 컨테이너 실행 시 포트(-p,-publish) 나 마운트(-v)옵션을 설정할 수 있는데 매 번 컨테이너 실행 시 해당 옵션을 주기보다는 도커컴포즈파일로 컨테이너를 실행하는것. 컨테이너의 실행스크립트 정도로 이해. 여러 컨테이너를 연동 실행하여 하나의 서비스로 사용하도록 세팅하는 것도 가능.













반응형