본문 바로가기
교육

[98일 차] 21.12.10 : Docker

by ballena 2021. 12. 10.

Docker 전반적인 내용 빠르게 복습


1교시

 

 

도커 기본 수업 + 다음 주는 쿠버네티스/EKS

 

  • Docker

앱 실해에 필요한 환경을 하나의 이미지로 모아 두고, 그 이미지를 사용하여 다양한 환경에서 앱 실행 환경을 구축/운용하기 위한 오픈소스 플랫폼

 

컨테이너와 도커 컨테이너는 다르다.

컨테이너는 리눅스에서 자원을 효율적으로 사용하기 위한 격리 시스템 프로세스

도커 컨테이너는 이런 컨테이너를 프로세스의 개념이 아닌 VM의 개념으로 돌린 것

호스트 OS상에 논리적 구획(컨테이너)을 만들어 앱을 작동시키기 위해 필요한 라이브러리나 앱 등을 하나로 모아 별도의 서버처럼 사용할 수 있게 한다.

 

컨테이너는 VM보다 작다

-> 호스트의 리소스 자원을 덜 먹는다(경량화)

 

일반적인 시스템 개발 흐름은

[앱 + 미들웨어 + OS + HW]의 모음을 개발 환경 - 테스트 환경 - 스테이징 환경 - 실제 환경에서 구동

개발 ~ 스테이징은 같은 환경이겠지만 실제 환경은 다를 수 있다.

 

도커를 사용한 시스템 개발 흐름은

[HW + OS + 라이브러리 + 앱]의 모음을 하나의 이미지로 만들어 모든 환경에서 구동

 

도커의 이미지를 만드는 기능(Build) - 이미지 파일(Dockerfile) 생성

도커의 이미지를 공유하는 기능(Ship) - 제작한 이미지를 업로드/다른 사람의 이미지를 다운로드할 수 있다

도커 컨테이너를 작동시키는 기능(Run) - 이미지를 다운로드하여 컨테이너로 변환, 실제로 동작시킬 수 있다

 

도커 엔진 : 이미지 생성, 컨테이너 생성, 호스트 PC에서 실제로 가동하려면 필요

Kitematic : GUI 모드로 도커 운영

도커 레지스트리 : 도커 이미지 저장소

도커 컴포즈 : 호스트 OS상에 있는 여러 컨테이너를 그룹화해서 관리하는 기술

도커 머신 : 도커 엔진이 설치된 VM을 배포하는 기능

도커 스웜 : 여러 도커 호스트를 하나의 클러스터로 묶어서 관리하는 도구


2교시

 

 

컨테이너 구획화 - 리눅스 커널의 namespace 기능 사용

자원 할당 - cgroups

 

도커 기본 명령어

-> docker container run <도커 이미지명> <실행할 명령>

이미지로 컨테이너를 만들고, 컨테이너를 이미지로 만들고, 이미지로 컨테이너를 만들고...

 

도커 사이트에서는 이미지 저장소를 레포지토리라고 하는데, 이게 도커 레지스트리다.

 

도커 컨테이너는 VM이지만 우분투(호스트 OS)는 컨테이너를 단일 프로세스로 받아들인다.

 

docker container run ubuntu:latest /bin/echo 'Hello world'

-> ubuntu:latest까지는 정지된 상태의 VM이다. 뒤에 실행할 명령(프로세스)이 오면 살아 움직이고


3교시

 

 

이미지 삭제 시 옵션 중

--no-prune : 관련 중간 이미지를 삭제하지 않음

-> 이미지 생성 시 overlay 파일 구조를 기억하자 : 기존 이미지에 새로운 계층을 쌓아 새로운 이미지 생성

-> 기존 이미지에는 변함이 없고, 수정이 가해진 새로운 이미지를 생성했었다.

 

이미지도 파일의 집합이다 : OS, 미들웨어, 라이브러리, 애플리케이션을 계층을 달리해서 저장

ex) nginx 이미지가 있는데, 다른 버전의 이미지를 받았다고 가정해 보자.

-> 이미지 전체를 다시 받는 것은 비효율적. 차지하는 공간만 쓸데없이 커질 뿐이다

-> 라이브러리, 미들웨어, 앱 등은 그대로 써도 된다.

 

특정 이미지를 기반으로 새로운 이미지를 만들었을 때, 그리고 이 이미지를 삭제할 때

-> 이미지를 구성하는 모든 계층을 삭제하지 않는다.

-> 기반이 되었던 이미지의 계층은 내버려둔다

도커 컨테이너의 라이프 사이클


4교시

 

 

--attach라는 것은 가동 중인 컨테이너에 접근할 수 있는 옵션

-> 잘 안 씀. 그냥 exec를 쓰지

--detach는 컨테이너를 백그라운드에서 실행

--interactive는 컨테이너 내부에서 쉘이 작동 중일 때 표준 입력을 연다


5~8교시

 

 

컨테이너 생성 시 진입 -it 옵션

 

attach로 재진입

 

실행 중인 컨테이너 진입 exec

 

컨테이너의 단점 - 스토리지

 

쿠버네티스 찌꺼기 때문에 VM이 자꾸 멈춘다

ㅅㅂ

 

컨테이너를 tar 파일로 출력(export)

-> import 해서 이미지로 만들 때 시 tar 파일에는 구성 정보만 있어서 컨테이너로 바로 만들 수 없다

-> inspect 해서 해당 이미지의 Config 블록 내의 CMD 내용 필요

 

멀티스테이지 빌드 : 하나의 도커 파일로 다수의 이미지 빌드

 

 

  • ONBUILD

-> Dockerfile에서 빌드 완료 후에 실행되는 명령

빌드된 이미지를 기반으로 다른 이미지가 도커 파일로 생성될 때 실행할 명령어를 추가.

이미지가 빌드될 때 수행되어야 하는 각종 도커 파일의 명령어를 나중에 빌드될 이미지를 위해 미리 저장할 수 있다.

 

이미지를 만들 때 실행되는 것이 아니라, 이 이미지로 다른 이미지를 만들 때 실행된다(FROM에서)

애플리케이션을 tar 파일로 만들고 경로를 지정, ADD로 추가해주면 이미지가 생성될 때 압축이 풀리며 앱 배치

'교육' 카테고리의 다른 글

[100일 차] 21.12.14 : Kubernetes 2  (0) 2021.12.14
[99일 차] 21.12.13 : Kubernetes 1  (0) 2021.12.13
[97일 차] 21.12.09 : Terraform 6  (0) 2021.12.09
[96일 차] 21.12.09 : Terraform 5  (0) 2021.12.08
[95일 차] 21.12.07 : Terraform 4  (0) 2021.12.07

댓글