카테고리 없음

Docker In Action 3. Software Installation Simplified

로파이 2023. 10. 16. 00:02

이미지를 어떻게 확인하는 가 How do I identify software?

 

Repository

Repository란 image를 모아둔 저장소. 이미지 저장소에 대한 주소는 위 예시 처럼 url 형식으로 표현된다.

 

{RegistryHost}/{UserName}/{ShortName}:{Tags}

 

Tags

각 이미지에 대한 빌드 태그(이름), git의 브랜치처럼 특정 기능 혹은 날짜에 대한 별칭을 의미.

latest라는 특별 태그는 항상 최신으로 빌드된 이미지를 뜻 함.

 

이미지를 어디서 설치하는 가 Where do I find sofware to install?

Repositories는 Registry에서 검색하여 이미지를 확인하고 설치할 수 있다.

Docker Inc에서 관리하는 Docker Hub는 공개된 registry로 docker pull과 docker run을 이용할 때 검색하게 되는 기본 registry이다.

 

도커 이미지 검색하기

docker search

검색된 이미지 이름, 설명, 받은 스타 개수, 공인 여부, 자동화된 빌드 버전 정보를 알 수 있다.

 

Docker Hub에서 확인하기

https://hub.docker.com.

도커허브 레지스트리에 등록된 이미지를 공식 사이트 주소에서 확인 가능하다.

 

비공식 registry에서 이미지 받기

도커는 registry를 호스팅하는 소프트웨어를 제공한다. 직접 registry를 호스팅하여 자신의 이미지를 등록하여 비공개된 방식으로 이미지를 관리할 수 있다.

 

docker pull [REGISTRYHOST]/[USERNAME]/[NAME](:TAG)

 

비공식 레지스트리에서 이미지를 직접 받는 경우 필요한 정보가 담긴 repository 저장소 주소를 명시한다.

 

이미지를 파일로 저장하고 로드하기

- 이미지를 비디오 게임의 세이브 파일 처럼 파일로 save 및 load 하는 것이 가능하다.

위 명령어로 busybox 이미지를 가져온 후 myfile.tar 파일로 저장한다.

docker rmi busybox
docker load -i myfile.tar

도커 이미지를 삭제하고 myfile.tar 이미지 파일을 이용하여 다시 이미지를 설치하는 것이 가능하다.

 

docker images 명령어로 busybox 이미지가 설치됌을 확인 가능하다.

 

Dockerfile로 부터 설치하기

docker build -t dia_ch3/dockerfile:latest ch3_dockerfile

dockerfile에 이미지 설치에 필요한 정보를 작성한다.

docker build {image_name} 명령어를 통해 도커 이미지를 설치할 수 있다.

-t 옵션은 이미지를 설치할 때 부여할 tag이다. 최종 설치되는 이미지는 [image_name]{:Tag} 로 설치된다.

 

어떤 파일이 설치되고 어떻게 구분되어지는가 What files are installed and how are they isolated?

 

docker pull dockerinaction/ch3_myapp
docker pull dockerinaction/ch3_myotherapp

 

서로 다른 이미지를 설치해보자. 두번째 이미지는 첫번째 이미지를 설치할 때보다 빠르게 설치된다.

두 이미지가 사용하는 base 이미지가 있는데 java:6 라는 공통 이미지를 가진다.

첫번째 이미지를 설치할 때 java:6를 설치하므로 두번째 이미지를 설치할 때는 해당 이미지를 제외한 나머지만 가져오면 된다.

 

docker rmi {image_name}

 

설치된 도커 이미지를 삭제한다.

 

도커 이미지의 구성 Layer relationships

도커의 이미지는 layer 형식으로 이미지의 부모/자식 layer image가 있을 수 있다.

각 이미지는 설치될 때 UID를 부여받는다. Java6 이미지를 빌드 하기 위해서 의존하는 상위 이미지들이 존재한다.

자신이 필요로 하는 이미지만을 base로 하여금 빌드함으로써 가벼운 이미지를 만들어 낼 수 있다.

 

컨테이너 파일 시스템 추상화와 고립

컨테이너의 기반이 되는 이미지를 바탕으로 프로그램을 실행할 때 이미지에 포함된 모든 파일은 각 컨테이너의 파일 시스템에 복사되는 것처럼 보이도록 한다. 이를 가능하게 하는 union file system은 각 이미지 레이어가 포함하는 파일들을 호스트의 파일 시스템에 마운트한다.

도커는 리눅스 커널이 제공하는 MNT system의 namespace 기능을 이용하여 컨테이너를 만들고 고유의 MNT system를 갖도록 한다. 그리고 새 마운트 지점을 제공하여 기반으로 하는 이미지를 사용할 수 있게 한다.

마지막으로 chroot는 이미지 파일 시스템의 root를 container 관점에서의 root로 만든다. 이는 컨테이너가 다른 호스트 파일을 접근하지 못 하도록 한다.

 

union file system의 취약성

도커는 실행되는 파일 시스템에 맞는 파일 시스템을 선택하나 모든 워크로드에 완벽한 기능을 동작을 보장하지는 못 한다. 다른 파일 시스템은 속성, 사이즈, 이름, characters 등 다른 특징을 가질 수 밖에 없고 union file system은 적절한 파일 시스템간 translation을 제공해야한다. 또한 union file system은 linux 기능인 copy-on-write과 memory-mapped- files 기능을 사용하기 어렵게 한다.