Docker architecture & image 명령어

공부기록·2023년 10월 18일
0
post-thumbnail

도커 아키텍쳐

  • 클라이언트 - 서버

도커데몬 (docker demon)

  • 도커 API 요청 (request)를 수신하고 도커객체(이미지, 컨테이너, 네트워크, 볼륨)를 관리하고 다른 데몬과 통신하여 도커 서비스를 관리할 수도 있다.

도커 클라이언트

  • 도커 사용자와 도커가 상호작용하는 방법
  • 도커 API의 명령어를 이용하면 클라이언트는 명령을 도커데몬에 전송하여 처리하게끔한다.
  • 하나의 클라이언트는 두개 이상의 데몬과 통신이 가능하다.

도커 레지스트리

  • 도커의 이미지를 저장하는 공간이다.
  • 도커는 이미지를 주로 도커허브에서 가져온다.

도커 객체

이미지

  • 컨테이너 생성 지침이 포함된 읽기 전용 템플릿
  • 이미지 생성을 위한 도커파일(Dockerfile)을 작성해야한다.
  • 도커 파일의 명령어는 이미지의 레이어를 생성한다.
  • 도커 파일을 수정하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드된다.

컨테이너

  • 이미지를 실행시키는 인스턴스
  • 도커 API(혹은 CLI)를 이용하여 컨테이너를 생성,시작,중지,이동,삭제할 수 있다.
  • 컨테이너 = 생성 혹은 시작 시의 구성옵션 + 이미지
  • 컨테이너를 하나이상의 네트워크에 연결하거나 스토리지를 연결하거나 현재상태를 기반으로 새이미지 생성이 가능하다.
  • 컨테이너가 제거되면 영구저장소(볼륨)에 저장되지않은 변경사항은 없어진다.



도커엔진의 기술변화

  • 리눅스 컨테이너 기반
    • 프로세스 가상화 구현 - chroot, namespace, cgroup
    • 컨테이너 런타임에 대한 표준 인터페이스가 존재하지않아 혼란을 빚음
      • 컨테이너 런타임 : 컨테이너의 생성, 실행
  • OCI(Open Container Initiative) 구성 : 컨테이너 형식 및 런타임에 대한 개방형 산업표준
  • 0.9.0 버전부터는 libcontainer OCI 이용하여 도커엔진 구성
  • 1.11.0 버전부터는 도커엔진은 도커데몬, 컨테이너데몬, runC OCI이용하여 컨테이너 관리
    • 도커데몬 : 도커 CLI로부터 명령어를 수신하여 처리한다. 네트워크, 볼륨등 처리
    • 컨테이너 데몬 : 컨테이너 런타임 툴로 컨테이너를 관리한다.
    • runC : 컨테이너를 실제로 생성하고 종료하는 역할
      • 호스트 OS에 대한 의존성을 제거하여 리눅스에 의존적인 문제 해결



BusyBox이용하여 hello world 출력

  • BusyBox : UNIX CLI 기능을 하나의 실행파일로 통합시킨 소프트웨어
	$ docker pull busybox //busybox 이미지 다운
    $ docker images //pc 내 이미지 조회
    $ docker run busybox echo 'Hello World' //busybox 컨테이너 실행 후 셀에 echo명령어 입력
    Hello World
    $ docker ps -a //실행중인 컨테이너 조회



도커 실행 원리

  • 클라이언트 : 도커의 명령을 받고, 결과를 출력한다.

  • 서버 : 도커엔진의 도커데몬을 이용하여 컨테이너를 시작, 운영, 정지한다.

  • 로컬 혹은 데스크톱에 이미지 저장하는 법

    • dockerfile로 이미지 생성 후 도커허브에 저장
    • 도커 허브로부터 이미지 내려받기



도커 이미지 명령어

  • docker image <명령어>
명령설명
buildDockerfile에서 이미지를 빌드함한다.
importtarball에서 내용가져와서 파일 시스템 이미지를 생성한다.
inspect하나 이상의 이미지 정보를 출력한다.
loadtar 아카이브 또는 stdin에서 이미지를 가져온다.
ls이미지 목록을 출력한다.
prune사용하지않는 이미지를 제거한다.
pull저장소에서 이미지를 다운한다.
push이미지를 저장소에 저장한다.
rm하나 이상의 이미지를 제거한다.
save하나 이상의 이미지를 tar 아카이브에 저장한다.
tagSOURCE_IMAGE를 참조하는 TARGET_IMAGE 태그를 작성한다.

이미지 다운로드

  • docker (image) pull (옵션) 이미지명 (:tag@digest)
	$ docker pull debian
    $ docker pull debian:10.3 //태그 = 버전 명시
    $ docekr pull library/debian:latest //도커 허브 registry 명시
    $ docekr pull gcr.io/google-sample/hello-app:1.0 //외부 registry 명시
	//docker.io는 도커 허브 이미지 저장소 주소를 나타낸다.

이미지 정보 조회

-docker image ls (옵션) (registry(:tag))

	$ docker image ls
    $ docker images //둘이 같은 명령어
  • docker image inspect (옵션) 이미지명
    • docker객체 정보를 JSON 형식으로 변환하여 출력한다.
	$ docker image inspect httpd
    $ docker image inspect --format="{{.RepoTags}}" httpd
    [httpd:latest] //중괄호형식을 이용하여 JSON의 정보 중 일부를 출력한다.
  • docker image history (옵션) 이미지명
    • iamge, created, created by, size, comment 등 출력

tag

  • 이미지 ID는 고유한 값으로 이미지 파일의 참조명을 붙이는 명령어이다.
  • docker image tag 이미지명(image ID) (저장소명):태그명
	$ docker images
    REPOSITOORY   TAG        IMAGE ID        CREATED         SIZE
    httpd         latest     b2c2ab6dcf2e    13 days ago     166MB
    
    //저장소와 버전(tag) 입력
    $ docker image tag b2c2ab6dcf2e debian-httpd:1.0
    REPOSITOORY   TAG        IMAGE ID        CREATED         SIZE
    httpd         latest     b2c2ab6dcf2e    13 days ago     166MB
    debian-httpd  1.0        b2c2ab6dcf2e    13 days ago     166MB
    
    $ docker image tag httpd:latest debian-hpptd:2.0
    REPOSITOORY   TAG        IMAGE ID        CREATED         SIZE
    httpd         latest     b2c2ab6dcf2e    13 days ago     166MB
    debian-httpd  1.0        b2c2ab6dcf2e    13 days ago     166MB
    debian-httpd  2.0        b2c2ab6dcf2e    13 days ago     166MB
    
    //도커 허브같은 레지스트리에 업로드하는 경우 저장소명과  태그 지정
    $ docker image tag httpd:latest inha/httpd:3.0
    REPOSITOORY   TAG        IMAGE ID        CREATED         SIZE
    httpd         latest     b2c2ab6dcf2e    13 days ago     166MB
    debian-httpd  1.0        b2c2ab6dcf2e    13 days ago     166MB
    inha/httpd  2.0        b2c2ab6dcf2e    13 days ago     166MB



도커허브

	$ docker login
    $ docker push 아이디/httpd:3.0
    $ docker pull 아이디/httpd:3.0
    $ docker logout



도커 이미지를 파일로 변환하기

  • 이미지를 tar(Tape Archiver) 파일로 저장이 가능하다.
  • docker image save (욥션) 이미지명 : 이미지를 tar로 변환
  • docker image load (옵션) : save로 저장한 tar파일을 이미지로 변환
	$ docker pull mysql:5.7
    
    /* save로 image파일 tar파일로 변환 */
    $ docker image save mysql:5.7 > test-mysql57.tar
    $ ls -lh test-mysql57.tar
    -rw-rw-r-- 1 hslee hslee 5 7 16:31 test-mysql57.tar
    
    /*
    	tar 파일 내용 확인
        t : list, v : verbose, f : file 
    */
    tar tvf test-mysql57.tar
    
    /* load로 tar 파일을 image 파일로 변화 */
    $ docker image rm mysql:5.7
    $ docker image load < test-mysql57.tar
    
    //tar보다 용량줄이려고 이용
    $ docker image save mysql:5.7 | gzip > test-mysql57.zie.tar.gz



도커 이미지 삭제

  • 컨테이너가 실행중이지 않은 도커의 이미지를 삭제
  • 컨테이너가 실행중인데 이미지를 삭제하면 참조중인 컨테이너가 있다며 오류가 발생한다.
  • 컨테이너 stop -> 컨테이너 rm -> 이미지 rm
  • 이미지 삭제시에는 tag명을 반드시 명시해야한다.
	$ docker pull ubuntu:14.04
    
    //만약 참조하는 컨테이너 존재시
    $ docker stop 컨테이너이름
    $ docker rm 컨테이너이름
    
    $ docker image rm ubuntu:14.04
    $ docker rmi ubuntu:14.04

  • docker image prune (욥션) : 컨테이너가 사용하지않는 모든 이미지를 삭제한다.
  • -a : 48시간동안 이용되지않은 image파일 제거
	$ docker image prune -a

0개의 댓글

관련 채용 정보