terminology 도커 나무위키 - Docker에서 컨테이너와 이미지의 차이점은 무엇입니까?





6 Answers

이미지는 라이브 컨테이너의 고정 된 불변 스냅 샷입니다. 컨테이너는 일부 이미지의 인스턴스를 실행 (또는 중지)합니다.

'우분투'라는 기본 이미지로 시작하십시오. 우분투 이미지에서 bash를 대화식으로 실행하고 파일을 만듭니다. 대화 형 bash 쉘을 제공하기 위해 -i-t 플래그를 사용합니다.

$ docker run -i -t ubuntu  /bin/bash
root@48cff2e9be75:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@48cff2e9be75:/# cat > foo
This is a really important file!!!!
root@48cff2e9be75:/# exit

이미지를 종료하고 다시 시작할 때 파일이 계속 붙어있을 것으로 예상하지 마십시오. 이전에 시작한 것과 완전히 동일한 정의 된 상태에서 다시 시작합니다. 중단 한 부분이 아닙니다.

$ docker run -i -t ubuntu  /bin/bash
root@abf181be4379:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@abf181be4379:/# exit

그러나 더 이상 실행되지 않는 컨테이너는 상태를 가지며 이미지에 저장 (커밋) 될 수 있습니다.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS                      NAMES
abf181be4379        ubuntu:14.04        /bin/bash              17 seconds ago       Exited (0) 12 seconds ago                                  elegant_ardinghelli    
48cff2e9be75        ubuntu:14.04        /bin/bash              About a minute ago   Exited (0) 50 seconds ago                                  determined_pare        
...

컨테이너 ID 48cff2e9be75에서 파일을 생성 한 이미지를 만듭니다.

$ docker commit 48cff2e9be75 ubuntu-foo
d0e4ae9a911d0243e95556e229c8e0873b623eeed4c7816268db090dfdd149c2

이제 우리는 정말로 중요한 파일을 가지고 새로운 이미지를 갖게되었습니다 :

$ docker run ubuntu-foo /bin/cat foo
This is a really important file!!!!

명령 docker images 사용해보십시오. 새 이미지 ubuntu-foo 가 우리가 시작한 ubuntu 표준 이미지와 함께 나열되어야합니다.

사용이유 컨테이너란 구글

Docker에서 컨테이너와 이미지의 차이점은 무엇입니까? Docker 시작하기 자습서 에서는이 두 용어가 모두 사용되지만 차이점을 이해하지 못합니다.

아무도 약간의 빛을 비출 수 있습니까?




쉬운 말로.

이미지 -

컨테이너를 만드는 데 사용되는 파일 시스템 및 구성 (읽기 전용) 응용 프로그램입니다. 자세한 내용 .

컨테이너 -

이것들은 Docker 이미지의 실행중인 인스턴스입니다. 컨테이너는 실제 응용 프로그램을 실행합니다. 컨테이너는 응용 프로그램과 모든 종속성을 포함합니다. 커널을 다른 컨테이너와 공유하고 호스트 OS의 사용자 공간에서 격리 된 프로세스로 실행됩니다. 자세한 내용 .

주의해야 할 기타 중요 용어 :

도커 데몬 -

건물을 관리하고 Docker 컨테이너를 실행 및 배포하는 호스트에서 실행되는 백그라운드 서비스.

도커 클라이언트 -

사용자가 Docker 데몬과 상호 작용할 수있는 명령 줄 도구.

도커 스토어 -

저장소는 무엇보다도 Docker 이미지의 레지스트리입니다. 레지스트리를 사용 가능한 모든 Docker 이미지의 디렉토리로 생각할 수 있습니다.

그림은 천 단어의 가치가있다.

(더 깊은 이해를 위해 this 읽으십시오.)

개요:

  • Docker 허브에서 이미지를 가져 오거나 Dockerfile에서 빌드 => Docker 이미지를 제공합니다 (편집 할 수 없음).
  • 이미지 실행 ( docker run image_name:tag_name ) => 실행중인 이미지 즉 컨테이너 (편집 가능)



이미지 [좋아하는 VM]

  • 컨테이너를 만드는 데 사용되는 읽기 전용 템플릿
  • 너 또는 다른 Docker 사용자가 작성한
  • Docker 허브 또는 로컬 레지스트리에 저장 됨

컨테이너 [러닝 머신처럼]

  • 고립 된 애플리케이션 플랫폼
  • 애플리케이션을 실행하는 데 필요한 모든 것을 포함합니다.
  • 이미지 기반




DockerFile - (빌드) -> DockerImage - (실행) -> DockerContainer

DockerFile 은 개발자 또는 개발자가 코드를 작성하는 것입니다 (예 - 설치).

Docker Image 도커 파일을 만들면 이미지 가 나타납니다.

Docker 컨테이너 는 Docker 이미지를 실행할 때 얻을 수 있습니다.

Docker Image를 도커 허브에서 가져 와서 컨테이너로 가져올 수 있습니다.




이미지 : 컨테이너를 실행하는 데 필요한 파일 시스템 및 메타 데이터. 응용 프로그램을 실행하기위한 모든 종속성을 포함하는 응용 프로그램 패키징 형식과 해당 응용 프로그램을 실행하기위한 기본 설정으로 생각할 수 있습니다. 메타 데이터에는 실행할 명령, 환경 변수, 레이블 및 healthcheck 명령의 기본값이 포함됩니다.

컨테이너 : 격리 된 응용 프로그램의 인스턴스입니다. 컨테이너는 초기 상태를 정의하기 위해 이미지가 필요하며 컨테이너의 특정 읽기 - 쓰기 파일 시스템과 함께 이미지의 읽기 전용 파일 시스템을 사용합니다. 실행중인 컨테이너는 실행중인 프로세스를 감싸는 래퍼로서 파일 시스템, 네트워크 및 PID 같은 프로세스 네임 스페이스를 제공합니다.

docker run 명령을 실행하면 명령 줄에 이미지와 함께 모든 구성이 제공되고 docker는 제공된 이미지 정의 및 구성을 기반으로 컨테이너를 반환합니다.

참고 자료 : 도커 엔진에 대한 이미지는 단지 이미지 ID입니다. 이 고유 한 불변의 해시입니다. 이미지를 변경하면 새 이미지 ID가 작성됩니다. 그러나 심볼릭 링크와 달리 이미지 ID를 가리키는 하나 이상의 참조를 가질 수 있습니다. 그리고 이러한 참조는 새로운 이미지 ID를 가리 키도록 업데이트 될 수 있습니다. 컨테이너를 만들 때 컨테이너가 생성 될 때 docker가 해당 참조를 확인하므로 실행중인 컨테이너의 이미지를 업데이트 할 수 없습니다. 대신 새 이미지를 만들고 새 이미지를 기반으로 새 컨테이너를 만듭니다.

레이어 : 조금 깊게 파헤 치면 파일 시스템 레이어가 생깁니다. Docker는 계층화 된 파일 시스템으로 이미지를 어셈블합니다. 각 계층은 파일 시스템에 대한 읽기 전용 세트이며 해당 계층은 고유 한 해시로 표시됩니다. 이러한 읽기 전용 레이어를 사용하면 여러 이미지가 다른 이미지로 확장 될 수 있으며 이러한 이미지 간의 차이점 만 네트워크를 통해 저장하거나 전송해야합니다. Docker 컨테이너가 실행되면 해당 컨테이너에 고유 한 컨테이너 읽기 / 쓰기 파일 시스템 계층을 수신하고 모든 이미지 계층은 통합 파일 시스템을 사용하여 결합됩니다. 읽기는 파일이 발견되거나, 삭제가 발견되거나, 파일이 맨 아래 계층에서 발견 될 때까지 각 계층을 통해 처리됩니다. 쓰기는 이미지 읽기 전용 레이어에서 컨테이너 특정 읽기 / 쓰기 레이어로 쓰기시 복사를 수행합니다. 삭제는 컨테이너 고유의 읽기 - 쓰기 레이어에 대한 변경 사항으로 기록됩니다. 이미지 빌드의 공통 단계는 이전 이미지 파일 시스템 상태를 기반으로 임시 컨테이너에서 명령을 실행하고 생성 된 컨테이너 특정 레이어를 새 이미지의 레이어로 저장하는 것입니다.




공식적인 차이점은 컨테이너가 쓰기 가능한 마지막 레이어라는 것입니다. 아래의 레이어는 읽을 수만 있고 이미지에 속합니다. 직관적 인 차이점은 docker 인스턴스가 docker 데몬과 이미지 실행에 의해 가상화 된 인스턴스이며, 커널의 분리 된 섹션에서 작동한다는 것입니다 (이 프로세스는 숨겨져 있습니다). 그러나 이미지는 정적이며 실행되지 않으며 단지 레이어 더미 (정적 파일) 일뿐입니다. 이 패러다임을 객체 지향 프로그래밍과 관련 시키면, 이미지는 클래스 정의이고, 도커 인스턴스는 메모리에 상주하는 클래스 생성 객체입니다.

당신의 도커 지식 직관력을 강화하기위한 튜토리얼을 작성했습니다 :

http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html






Related