Docker

도커 이미지 기본개념

25G 2023. 8. 7. 13:13

도커 이미지

모든 컨테이너는 이미지를 기반으로 생성되므로 이미지를 다루는 방법은 도커 관리에서 빼놓을 수 없는 부분입니다.
데비안 운영체제에서 api-geet install을 실행하면 apt 리포지터리에서 패키지를 내려받고 레드햇 운영체제에서 yum install 을 실행하면 yum 리포지터리에서 패키지를 받듯이 도커는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다.

도커허브?

도커허브는 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있습니다.
docker run, docker pull 등의 명령어로 이미지를 내려받을때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려 받습니다. 이때 도커허브는 아무나 이미지를 올릴수 있기때문에 Official 라벨이 있는 이미지를 사용하는 것을 권장합니다 이는 도커에서 인증한 이미지라는 뜻입니다.

도커 이미지 생성

docker search를 통해 검색한 이미지를 pull 명령어로 내려받아 사용하는 방법도 있지만 도커로 개발하는 많은 경우에는 컨테이너에 애플리케이션을 위한 특정 개발 환경을 직접 구축한뒤 사용자만의 이미지를 직접 생성해야합니다.

그럼 a라는 이미지를 허브에서 다운받아온다음 그 이미지를 내 니즈에 맞게 커스텀해서 이 상태를 이미지화하고 언제든지 컨테이너로 만들어내고 싶다면 docker commit 이라는 명령어로 만들 수 있습니다.

docker commit [OPTIONS] CONTAINER [ REPOSITORY[ :TAG]]

태그를 입력하지않으면 자동으로 latest로 설정됩니다.

  • -a : author를 뜻하며 작성자를 나타내는 메타데이터를 이미지에 포함시킵니다.
  • -m : 옵션은 커밋메시지를 뜻합니다.

그리고 이미 한번 저장된 이미지는 태그이름에 변화를 주어서 다음 커밋을 만들어 낼 수 있습니다.

이미지 구조 이해

docker inspect 이미지이름
다음과 같은 명령어로 해당 이미지의 레이어 리스트를 볼 수 있습니다. 그럼 깃에서 커밋 로그를 보듯 해당 이미지가 어떻게 쌓아져 왔는지 알 수 있습니다.

  • docker history 명령어를통해 좀 더 쉽게 이미지 레이어를 파악할 수 있습니다.

이미지 추출

도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야 할 때가 있습니다.
이때 docker save 명령어를 사용해서 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출 할 수 있습니다

  • -o : 이미지 파일명

추출된 이미지는 모든 메타데이터를 포함하기 때문에 docker load 명령어로 쉽게 도커엔진에 생성시킬 수 있습니다.

docker load -i 이미지파일

이미지 배포

이미지를 생성 했다면 이를 다른 도커 엔진에 배포할 방법이 필요합니다. 이미지 파일의 크기가 커질 수록 더욱더 배포하기가 힘들어지고 파일로 배포하기때문에 도커의 이미지구조인 레이어 형태를 이용하지않아 매우 비효율 적입니다.
방법

  1. 도커허브에 이미지를 선배포 후 배포하는 서버에서 내려받는다.
    • 이는 프라이빗저장소를 사용해야하기 때문에 1개이상일시에 비용발생
  2. 도커 사설 레지스트리를 사용하는 것으로서 사용자가 직접 이미지 저장소를 만들어서사용해야합니다.
    • 사설 서버컴퓨터나 나스같은 시스템이 있다면 비용도절약하고 보안적인 측면도 보완할 수 있어서 좋다.
    • 회사같은 내부망 배포시 추천

저장소에 이미지 올리기

이미지의 이름의 접두어는 이미지가 저장되는 장소이기때문에 도커허브나 사설 레지스트리에 미리 만들어놓은 저장소의 이름을 사용해야 본인이 저장하고싶은 저장소에 이미지를 저장할 수 있습니다.

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

저장소 웹훅 추가

저장소에 이미지가 push 됐을때 특정 url로 http 요청을 전송하도록 설정할 수 있다.
이기능이 웹훅이라고합니다.
이는 도커허브에 저장소내부에서 웹훅이라는 탭에서 설정할 수 있습니다.

사설 레지스트리 생성

도커 사설 레지스트리는 이미 도커에서 공식적으로 제공하고 있기때문에 간단히 사용할 수 있습니다.

# docker run -d 一name myregistry \ -p 5000:5000 \
- - restart=always \
registry:2.6

사설 레지스트리에 이미지 push 하기

다음 명령어로 이미지의 이름을 추가합니다. ${D0CKER_H0ST_IP}에 사설 레지스트리의 ip 를 입력합니다.
dns도 가능합니다.

 docker tag my-image-name:0.0 ${D0CKER_H0ST_IP}:5000/my-image-name:0.0

기본적으로 도커 데몬은 https를 사용하지 않은 레지스트리 컨테이너에 접근하지 못하도록 설정합니다. 그래서 https 인증서를 적용해서 별도로 설정해야합니다.
일단 설정했다고 가정하고
이제 해당 레지스트리에 push를 하면

# docker push ${D0CKER_H0ST_IP}:5000/my-image-name:0.0

그리고 이미지를 pull할 때도 이미지의 접두어를 레지스트리 컨테이너의 url로 입력해야합니다.

그리고 nginx를 사용할줄 아신다면 nginx서버로 접근 권한도 생성해서 허용된 사용자만 사설레지스트리에 접근할수 있게 설정 할 수도 있습니다

출처 : 시작하세요 도커 쿠버네티스

'Docker' 카테고리의 다른 글

docker 컨테이너와 이미지 조사하는법  (0) 2023.08.07
도커 엔진 기본 개념  (0) 2023.08.07
Dockerfile 기본개념  (0) 2023.08.07
도커 데몬  (0) 2023.05.31
docker/ expose 와 port 의 차이점  (0) 2023.05.31