도커에서 컨테이너와 이미지의 차이점은 무엇입니까?
도커에서 컨테이너와 이미지의 차이점은 무엇입니까?도커 시작 자습서에서는 이 두 용어가 모두 사용되지만 차이점을 이해할 수 없습니다.
누구 좀 비춰주실 수 있나요?
이미지는 활성 컨테이너의 고정 불변 스냅샷입니다.컨테이너가 일부 이미지의 인스턴스를 실행 중이거나 중지되었습니다.
'라는합니다.우분투'라는 기본 이미지로 시작합니다.Ubuntu 이미지 내에서 대화형으로 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
우리가 시작한 표준 이미지.
이미지는 루트 파일 시스템 변경 사항과 컨테이너 런타임 내에서 사용할 해당 실행 매개 변수의 순서 모음입니다.이미지는 읽기 전용입니다.
컨테이너는 이미지의 활성 상태 저장 인스턴스(instateful instance)입니다.
객체 지향 프로그래밍 유추를 사용하면 도커 이미지와 도커 컨테이너의 차이는 클래스와 객체의 차이와 동일합니다.개체는 클래스의 런타임 인스턴스입니다.마찬가지로 컨테이너는 이미지의 런타임 인스턴스입니다.
개체는 인스턴스화될 때 한 번만 만들어집니다.마찬가지로 컨테이너가 실행 중이거나 중지될 수 있습니다.컨테이너는 이미지에서 생성되지만 항상 그렇지는 않을 수 있습니다.다음 예제에서는 Apache 서버 이미지를 생성하고 이미지를 실행하며 이미지를 나열한 다음 컨테이너를 나열합니다.
다음 내용으로 도커 파일을 만듭니다.
FROM httpd:2.4
Apache 서버 설치
sudo docker build -t my-apache2 .
이미지 실행
sudo docker run -it --rm --name my-running-app my-apache2
도커 이미지 나열
sudo docker images
실행 중인 도커 컨테이너 나열
docker ps
모든 컨테이너 나열
docker ps -a
최근에 만든 컨테이너 나열
docker ps -l
이미지는 기본적으로 컨테이너를 생성하기 위한 불변 템플릿입니다.이미지를 컨테이너로 변환하기 위해 이미지에 발생하는 작업을 고려하면 이미지와 컨테이너의 차이를 더 쉽게 이해할 수 있습니다.
Docker 엔진은 이미지를 가져와 맨 위에 읽기-쓰기 파일 시스템을 추가한 다음 다양한 설정을 초기화합니다.이러한 설정에는 네트워크 옵션(IP, 포트 등), 이름, ID 및 모든 리소스 제한(CPU, 메모리)이 포함됩니다.도커 엔진이 컨테이너를 작동하도록 요청받으면 도커 엔진 내부의 프로세스도 초기화됩니다.컨테이너를 중지하고 다시 시작할 수 있습니다. 이 경우 컨테이너는 모든 설정 및 파일 시스템 변경 사항을 유지합니다(그러나 메모리의 모든 내용이 손실되고 모든 프로세스가 다시 시작됩니다).이러한 이유로 중지되거나 종료된 용기는 이미지와 다릅니다.
도커 파일 --(빌드)--> 도커 이미지 --(실행)--> 도커 컨테이너
DockerFile은 사용자 또는 개발자가 어떤 작업을 수행하기 위해 코드를 작성하는 것입니다(예: 설치).
도커 이미지는 도커 파일을 빌드할 때 얻을 수 있습니다.
도커 이미지를 실행할 때 얻을 수 있는 도커 컨테이너
도커 허브에서 도커 이미지를 가져온 다음 실행하여 컨테이너를 가져올 수 있습니다.
이미지 [VM과 유사]
- 컨테이너를 만드는 데 사용되는 읽기 전용 템플릿
- 사용자 또는 다른 Docker 사용자에 의해 빌드됨
- 도커 허브 또는 로컬 레지스트리에 저장
[실행 중인 기계와 같은] 용기
- 격리된 애플리케이션 플랫폼
- 응용프로그램을 실행하는 데 필요한 모든 내용
- 이미지 기준
도커에서는 모든 것이 이미지로 시작됩니다.이미지는 필요한 작업을 수행하기에 충분한 양의 운영 체제를 구성하는 모든 파일입니다.기존에는 각 애플리케이션에 대한 모든 기능을 갖춘 전체 운영 체제를 설치했습니다.Docker를 사용하면 아래로 쌍을 이루어 필요한 작업을 수행할 수 있는 충분한 양의 운영 체제가 포함된 작은 컨테이너를 만들 수 있습니다. 그리고 컴퓨터에 이러한 많은 것들을 효율적으로 저장할 수 있습니다.
사용하다docker images
및 이미지 docker ps
실행 중인 이미지를 확인합니다.를 할 때docker run
그것은 이미지를 가져다가 실행 과정을 가진 살아있는 용기로 만듭니다.주로 사용하는 항목:
도커 런티
<image>:<tag>
때리기
마지막으로 이미지에는 고유한 ID 집합이 있고 컨테이너에는 고유한 ID 집합이 있습니다. 중복되지 않습니다.
컨테이너는 이미지를 기반으로 합니다.이미지를 도커스 실행 명령으로 전달해야 합니다.
예:
비지박스 이미지
https://i.stack.imgur.com/eK9dC.png
▁called▁image다라는 이미지를 합니다.busybox
도커는 이 이미지를 로컬에 가지고 있지 않으며 공용 레지스트리에서 가져옵니다.
레지스트리는 Docker 클라이언트가 통신하고 이미지를 다운로드할 수 있는 Docker 이미지의 카탈로그입니다.이미지가 풀리면 도커가 컨테이너를 시작하고 echo hello world 명령을 실행합니다.
이미지: 컨테이너를 실행하는 데 필요한 파일 시스템 및 메타데이터입니다.응용 프로그램을 실행하기 위한 모든 종속성과 해당 응용 프로그램을 실행하기 위한 기본 설정을 포함하는 응용 프로그램 패키징 형식으로 간주할 수 있습니다.메타데이터에는 실행할 명령의 기본값, 환경 변수, 레이블 및 상태 점검 명령이 포함됩니다.
컨테이너:분리된 응용 프로그램의 인스턴스입니다.컨테이너는 초기 상태를 정의하기 위해 이미지가 필요하며 컨테이너별 읽기-쓰기 파일 시스템과 함께 이미지의 읽기 전용 파일 시스템을 사용합니다.실행 중인 컨테이너는 실행 중인 프로세스 주변의 래퍼로, 파일 시스템, 네트워크 및 PID와 같은 프로세스 이름 공간을 제공합니다.
를 할 때docker run
명령을 실행하면 명령줄에 이미지와 모든 구성을 제공하고 도커는 제공한 이미지 정의 및 구성을 기반으로 컨테이너를 반환합니다.
참조: 도커 엔진에서 이미지는 이미지 ID에 불과합니다.이것은 고유한 불변 해시입니다.이미지를 변경하면 새 이미지 ID가 생성됩니다.그러나 심볼 링크와 달리 이미지 ID를 가리키는 하나 이상의 참조를 가질 수 있습니다.이러한 참조는 새 이미지 ID를 가리키도록 업데이트할 수 있습니다.컨테이너를 만들 때 도커는 컨테이너를 만들 때 해당 참조를 확인하므로 실행 중인 컨테이너의 이미지를 업데이트할 수 없습니다.대신 새 이미지를 생성하고 해당 새 이미지를 기반으로 새 컨테이너를 생성합니다.
레이어: 조금 더 깊이 파고들면, 파일 시스템 레이어가 있습니다.도커는 계층화된 파일 시스템으로 이미지를 조립합니다.각 계층은 파일 시스템에 대한 변경 사항의 읽기 전용 집합이며, 해당 계층은 고유한 해시로 표시됩니다.이러한 읽기 전용 계층을 사용하면 여러 이미지가 다른 이미지를 확장할 수 있으며 이러한 이미지 간의 차이만 네트워크를 통해 저장하거나 전송하면 됩니다.Docker 컨테이너를 실행하면 해당 컨테이너에 고유한 컨테이너별 읽기-쓰기 파일 시스템 계층이 수신되고 모든 이미지 계층이 유니온 파일 시스템을 사용하여 해당 계층과 함께 조립됩니다.파일을 찾거나, 삭제를 찾거나, 맨 아래 계층에서 파일을 찾을 수 없을 때까지 각 계층을 통해 읽기가 처리됩니다.쓰기는 이미지 읽기 전용 계층에서 컨테이너별 읽기-쓰기 계층으로 쓰기 시 복사를 수행합니다.그리고 삭제는 컨테이너별 읽기-쓰기 계층의 변경 사항으로 기록됩니다.이미지를 구축하는 일반적인 단계는 이전 이미지 파일 시스템 상태를 기반으로 임시 컨테이너에서 명령을 실행하고 결과로 생성된 컨테이너 특정 계층을 새 이미지의 계층으로 저장하는 것입니다.
도커 이미지:여기에는 컨테이너를 빌드하고 실행하는 방법에 대한 명령 목록과 지침이 포함되어 있습니다.따라서 기본적으로 이미지에는 컨테이너(블루프린트라고도 함)를 시작하는 데 필요한 모든 데이터와 메타데이터가 포함됩니다.이미지를 지정하지 않고는 컨테이너를 런치할 수 없습니다.
$docker images centos
사용 가능한 Centos 버전을 모두 나열합니다.
도커 컨테이너: 컨테이너는 이미지의 런치이므로 컨테이너는 이미지의 실행 인스턴스라고 할 수 있습니다.컨테이너는 빌드 시간 구성인 이미지와 달리 런타임 구성입니다.
공식적인 차이점은 컨테이너가 쓰기 가능한 마지막 계층인 반면 아래 계층은 읽기만 가능하고 이미지에 속한다는 것입니다.도커 인스턴스는 도커 데몬에 의해 가상화된 인스턴스이며 이미지를 실행 중이며 커널의 격리된 섹션 내에서 작동합니다(이 프로세스는 사용자에게 숨겨집니다).그러나 이미지는 정적이고 실행되지 않으며 계층(정적 파일)의 더미일 뿐입니다.만약 우리가 이 패러다임을 객체 지향 프로그래밍과 연관시킨다면, 이미지는 당신의 클래스 정의인 반면, 당신의 도커 인스턴스는 메모리에 있는 당신의 클래스 생성 객체입니다.
저는 당신의 도커 지식 직관을 강화하기 위해 튜토리얼을 작성했습니다.
http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html
이미지는 휴대폰으로 만든 사진입니다.
컨테이너가 전화기입니다.
언급URL : https://stackoverflow.com/questions/21498832/in-docker-whats-the-difference-between-a-container-and-an-image
'source' 카테고리의 다른 글
SQL Server 작업이 이미 실행 중인 경우 예약된 실행을 건너뜁니까? (0) | 2023.08.13 |
---|---|
SVG 요소에 클릭 시 이벤트 추가 (0) | 2023.08.13 |
기호와 일치시킬 정규식: !$%^&*()_+|~-='{}[]:",'<>?,/ (0) | 2023.08.13 |
사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오. (0) | 2023.08.13 |
mysql 명령에서 bash에 선언된 변수를 가장 잘 사용하려면 어떻게 해야 합니까? (0) | 2023.08.13 |