DevBoi

[Docker] Docker Study 기본 본문

Infra/[K8S & Docker]

[Docker] Docker Study 기본

HiSmith 2022. 11. 21. 15:22
반응형

Docker 개념

 

Docker 는 개발자와 시스템 관리자가 컨테이너 기술을 사용하여 어플리케이션을 개발, 배포 및 실행하기 위한 플랫폼이다.

일반적으로 리눅스에서 사용되는 컨테이너 기술을 사용하여 응용프로그램을 배포하는 것을 컨테이너화 시켰다고 한다.

컨테이너는 새로운 기술은 아니지만 도커를 통해서 과거보다 편리하고, 간편하게 어플리케이션을 배포하는데 사용된다.

 

이러한 컨테이너 기술은 아래와 같은 장점이 있다.

  • 유연성 : 복잡한 어플리케이션들도 모두 컨테이너화 할 수 있다.
  • 경량화 : 컨테이너는 호스트 커널을 활용하고 공유한다.
  • 변화관리 편의성 : 업데이트 및 업그레이드를 즉시 배포할 수 있다.
  • 포터블 : 로컬로 구축, 클라우드와 가상화에 배치도 가능, 어디에서나 실행가능하다.
  • 확장성 : 컨테이너 복제본을 늘리고 자동배포를 할 수 있다.
  • 스택화 : 서비스들에 대한 수직적 또는 수평적 디자인이 매우 용이하다.

 

 

이미지 및 컨테이너 개념

컨테이너는 이미지를 실행하여 시작이된다.

이미지는 코드,런타임,라이브러리,환경 변수 및 구성 파일, 어플리케이션 등을 실행하는 데 필요한 모든 것을 포함하는 실행가능한 패키지이다.

컨테이너는 이미지의 런타임 인스턴스 단위이며, 이미지가 컨테이너로 실행이 될때 메모리로 로딩이 된다.

 

도커에서 말하는 이미지는 컨테이너를 생성하게 하는 설계도 개념이다.

 

컨테이너 및 가상화 머신 

컨테이너의 동작방식은 여러개의 컨테이너들이 같은 호스트 시스템의 커널을 공유하는 방식이다.

가상화 기반의 방식에 비해 메모리를 경량화 시킬 수 있고, 별도의 프로세스를 실행하는 방식을 사용한다.

 

이와 다른 가상화 방식은 하이퍼바이져를 통해 호스트 리소스에 대한 제어권을 소유하는 방식이다.

하이퍼바이저 방식은 컨테이너보다 많은 메모리와 자원을 소모하게 된다.

왜? 별도의 운영체제를 구현해야하고, 별도의 가상머신과 운영체제에서 어플리케이션이 동작하는 방식으로 디자인되기 때문이다.

 

 

이제 도커의 동작 흐름에 대해서 살펴보자

개발자들이 인프라에 대한 구성을 위해 도커가 탄생했나? 싶을정도로

인프라에 대한 설정이 간단하다.

 

사실 나도 개발자라서 인프라 이것저것 하는거 너무 귀찮은데, 이런건 너무 편하고 좋은것같다

사이드 플젝에서... 써봐야지ㅋ 

 

 

docker run은 이미지의 다운로드,생성,동작,접속 까지 한번에 한다.

Docker client에서 docker api 를 사용하게 되면, 

Docker server에서 이 Docker api와 통신하는 도커데몬이 이미지를 찾거나 컨테이너를 생성하게 된다.

이미지는 Dodcker hub나, local에 있는것을 가져다가 쓰는 경우가 있다.

 

아래의 명령어 들은 docker를 실행하고, 시작하는 기본적인 명령어이다.

일단 이것들을 익히고 추가로 다른 것들을 해보면서 관련 개념을 공부해보자

 

*docker search - docker serach java라고 하면, JAVA관련 이미지들을 보여준다. desc 기준으로 검색을 한다.

*docker pull (docker 이미지를 다운 받는다.)

*docker create (pull 받은 이미지를 기준으로 컨테이너를 생성한다.)

생성만 하면 이렇게 나온다.

 

<docker start / docker stop>

created 된 컨테이너를 실행하고 중지 할 수 있다.

 

<docker attach / docker exec>

사실 이 두개의 차이를 아는것이 조금 어려웠다.

-docker attach는 실행되고있는 컨테이너에 접속하는 명령어이다.

-docker exec는 실행되고 있는 컨테이너에 새로운 명령을 할 수 있는 명령어이다.

 

근데 사실 나는 차이를 모르겠다, 큰 차이는 없는듯하고 나중에 차이를 알게되면 알아보자

우선 나는 docker exec -it <컨테이너ID> /bin/bash 로 해당 필요한 명령어들을 진행한다.

 

< docker run>

docker run을 하게 되면 개념이 조금 다르다.

docker run은 컨테이너 생성 + 실행 + 삭제 등등을 한꺼번에 옵션으로 할 수 있다.

예를 들어서

docker run 은 docker create + docker start를 한번에 해주는 개념으로도 사용될 수 있다.

 

<docker run -it --name test mariadb>

이렇게 하게되면 test라는 이름으로 지정하여, mariadb의 이미지로 컨테이너를 만들고 실행 하는것이다.

docker run -it -d --name test mariadb - 백그라운드 실행

 

이외에도 컨테이너 종료시에 삭제, 메모리,환경변수,작업디렉토리,컨테이너끼리 연결 등등을 명령어 옵션으로 사용할 수 있다.

 

 

 

이번에는 기본적인 도커의 개념, 컨테이너의 개념, 기본적인 동작 방식, 기본 명령어등을 정리해봤다.

 

 

 

반응형

'Infra > [K8S & Docker]' 카테고리의 다른 글

[Docker] Docker Swarm network_개념  (0) 2022.12.15
[Docker] Docker network  (0) 2022.12.15
[Docker] 메모리 정리  (0) 2022.11.02
[k8s] Deployment 실습  (0) 2022.08.28
[k8s] ReplicaSet 실습  (0) 2022.08.28