Docker 기초 (1) 원리 편
Docker 는 개 원 된 응용 용기 엔진 이다.그것 의 이념 은 'Buildonce, Run anywhere, Configure once, Run anything' 이다. 이것 은 자바 가 제기 한 'Write Once, Run Anywhere' 와 다른 점 이 있다.자바 와 Docker 는 플랫폼 이식 문제 에 직면 했 을 때 비슷 한 해결 방안 을 채택 했다.자바 언어 는 가상 머 신 을 사용 하여 구체 적 인 플랫폼 과 관련 된 정 보 를 차단 하여 자바 언어 컴 파일 러 는 자바 가상 머 신 에서 실행 할 수 있 는 목표 코드 (바이트 코드) 만 생 성하 면 여러 플랫폼 에서 수정 없 이 실행 할 수 있 습 니 다.
이와 같이 Docker 는 용기 엔진 을 사용 하여 플랫폼 의존 문 제 를 해결 합 니 다. 모든 호스트 에서 Docker 의 데 몬 을 시작 합 니 다. 데 몬 은 구체 적 인 플랫폼 과 관련 된 정 보 를 차단 하고 상부 응용 에 통 일 된 인 터 페 이 스 를 제공 합 니 다.이렇게 하면 Docker 화 된 응용 은 여러 플랫폼 에서 실 행 될 수 있 고 Docker 는 서로 다른 플랫폼 을 대상 으로 해당 하 는 실행 구동, 저장 구동 과 네트워크 구동 에 대해 실 행 될 수 있 습 니 다.여기 서 말 하 는 플랫폼 은 주로 서로 다른 리 눅 스 버 전 을 대상 으로 한다. Docker 의 실현 은 리 눅 스 의 cgroups, namespaces 등 특성 을 사용 해 야 하기 때문에 현 재 는 리 눅 스 환경 에서 만 실행 할 수 있 고 Windows 와 Mac 에서 Docker 를 사용 하려 면 가상 컴퓨터 방식 을 사용 해 야 한다.
또한 Docker 는 공식 미 러 창고 에서 다운로드 한 미 러 를 Docker 엔진 이 장 착 된 모든 운영 체제 에서 실행 할 수 있 고 개발 자 는 자신 이 만 든 미 러 를 제출 한 공식 창 고 를 다른 사람 이 사용 할 수 있 도록 하 는 자체 생태 권 도 있다.개인 미 러 창고 도 만 들 수 있다.이것 은 안 드 로 이 드 나 iOS 시스템 과 응용 상점 의 관계 와 유사 하 다.
마지막 으로 Docker 는 버 전 관리 기능 도 가지 고 있어 미 러 를 수정 한 후에 새로운 버 전 을 제출 할 수 있 고 여러 버 전에 서 빠르게 전환 할 수 있 습 니 다.
다시 말 하면 Docker 는 개 원 된 응용 용기 엔진 으로 미 러 형식 으로 존재 합 니 다. Docker 는 환경의 차 이 를 차단 함으로써 다양한 환경 에서 편리 하 게 응용 할 수 있 고 Docker 는 미 러 에 대한 버 전 제어 기능 도 가지 고 있 습 니 다.
Docker 의 구성
Docker 는 자신 만 의 완벽 한 생태 권 을 가지 고 전체적으로 Docker 미 러 창고 와 Docker 자체 프로그램 두 부분 으로 나 뉜 다.그 중에서 Docker 자체 프로그램 은 Server 와 Client 두 부분 으로 나 뉘 어 C/S 구 조 를 사용 하여 Go 언어 로 작 성 했 습 니 다.Docker 의 서버 엔 드 는 Docker Daemon 이 라 고도 부 르 며, 홈 호스트 에서 데 몬 형식 으로 실 행 됩 니 다.Docker Client 는 이 컴퓨터 에서 bin 명령 형식 (예 를 들 어 Docker info, Docker start) 으로 명령 을 보 낼 수도 있 고 원 격 에서 RESTful API 형식 으로 명령 을 보 낼 수도 있 습 니 다.Docker 의 서버 에서 명령 을 받 고 명령 을 일련의 작업 으로 분해 하여 실행 합 니 다.
Docker client 를 통 해 docker run 명령 을 보 내 용 기 를 만 들 고 시작 할 때 Docker Daemon 은 먼저 로 컬 에 해당 하 는 미 러 가 있 는 지 확인 하고 없 으 면 공식 창고 에서 다운로드 한 다음 다운로드 한 미 러 를 기반 으로 용 기 를 만 들 고 시작 한 다음 실행 결 과 를 Docker Client 에 되 돌려 줍 니 다.
Docker 의 레이 어 링 과 쓰기 시 복사 정책
Docker 는 소프트웨어 와 의존 하 는 환경 (운영 체제 와 공유 라 이브 러 리 등 포함), 의존 하 는 프로필 을 포장 하여 가상 컴퓨터 미 러 형식 으로 공식 창고 에 넣 어 다른 사람 이 다운로드 할 수 있 도록 합 니 다.그러나 운영 체제 의 부 피 는 소프트웨어 의 부피 에 비해 너무 커서 소프트웨어 를 실행 하기 위해 매번 조립 된 운영 체 제 를 다운로드 하 는 것 은 비현실적이다.이 문 제 를 해결 하기 위해 Docker 는 층 을 나 누 는 개념 을 도입 했다.하나의 응용 을 임 의 여러 층 으로 나 누 었 다. 예 를 들 어 운영 체제 가 1 층 이 고 의존 하 는 라 이브 러 리 와 제3자 소프트웨어 는 2 층 이 며 응용 소프트웨어 패키지 와 프로필 은 3 층 이다.만약 두 응용 프로그램 이 같은 밑바닥 을 가지 고 있다 면, 이 층 들 을 공유 할 수 있다.바닥 에 부피 가 큰 층 일수 록 공유 가 더 클 수 있다.
그러나 레이 어 링 방식 은 공유 층 충돌 문제 에 직면 할 수 있 기 때문에 Docker 는 파일 층 에 우선 순위 속성 을 추가 하고 상층 과 하층 이 같은 파일 과 설정 이 있 을 때 상층 이 하층 을 덮어 씁 니 다.예 를 들 어 A 를 사용 하려 면 운영 체제 의 특정한 설정 을 수정 해 야 하고 B 를 사용 하려 면 수정 할 필요 가 없다.이 때 A 를 사용 하여 우선 순위 가 가장 높 은 공백 층 을 추가 합 니 다. 하층 의 파일 을 수정 하려 면 이 공백 층 으로 복사 하여 수정 합 니 다. 하층 의 파일 이 변 하지 않도록 하 는 것 을 쓰기 시 복사 정책 이 라 고 합 니 다.
应用A:
====运行的应用======
======空白层========
=====配置文件=======
=====依赖的库=======
=====操作系统=======
应用B:
====运行的应用======
=====配置文件=======
=====依赖的库=======
=====操作系统=======
Docker 와 주류 가상 컴퓨터 의 차이
KVM, Xen, VMWare, VirtualBox 등 주류 의 가상 컴퓨터 는 일반적으로 비교적 무겁다. 실행 할 때 가상 컴퓨터 자체 가 대량의 시스템 자원 (CPU, 메모리 등) 을 소모 해 야 하고 이런 가상 컴퓨터 는 시작 시간 도 비교적 길 어서 걸핏하면 몇 분 이 걸린다.한편, OpenVZ, VServer, LXC 를 비롯 한 용기 류 가상 머 신 은 커 널 가상 화 기술 로 홈 호스트 와 같은 Linux 커 널 에서 실행 되 며 명령 급 시 뮬 레이 션 이 필요 없고 성능 소모 가 매우 적 으 며 매우 경량급 가상 화 용기 로 가상 용기 의 시스템 자원 소모 와 일반적인 프로 세 스 차이 가 많 지 않다.Docker 는 LXC (나중에 libcontainer 를 출시) 를 사용 하여 가상 컴퓨터 를 경 량 화 하 는 것 이다.
Docker 미 러 와 용기 의 관계
그렇다면 미 러 와 용 기 는 어떤 관계 일 까? 앞의 설명 에 따 르 면 미 러 는 층 을 나 누 어 LXC/libcontainer 가 이해 할 수 있 는 파일 저장 형식 을 말한다.Docker 의 응용 프로그램 은 모두 이러한 형식 으로 Docker 창고 에 발표 되 어 사용 할 수 있 습 니 다.용 기 는 애플 리 케 이 션 미 러 를 Docker 창고 에서 로 컬 기기 에 다운로드 하고 미 러 를 템 플 릿 으로 하여 용기 류 가상 컴퓨터 에서 이 애플 리 케 이 션 을 시작 하 는 것 을 말한다. 이 가상 기 계 는 용기 라 고 부른다.다른 측면 에서 볼 때 미 러 와 용 기 는 Docker 화 응용 두 가지 서로 다른 상태 로 볼 수 있다.미 러 상태 일 때 하나의 응용 프로그램 은 실행 에 필요 한 파일, 패키지 등 내용 만 있 고 응용 도 정지 상태 에 있 습 니 다.한편, 용기 상 태 는 대외 적 으로 서 비 스 를 제공 하기 위해 실행 되 어야 합 니 다. 예 를 들 어 출력 로그, 동적 으로 특정한 설정 을 업데이트 하 는 등 파일 을 수정 할 수 있 습 니 다. 이 때 공백 층 이 쓸 때 복사 해 야 합 니 다.
미 러 변경 관리
미 러 를 레이 어 링 하여 저장 하 는 특성 을 이용 하여 Docker 는 유연 한 변경 관리 도 할 수 있 습 니 다.예 를 들 어 Docker 미 러 의 V 1.0 버 전 은 3 층 이 있 습 니 다. 지금 은 다음 과 같이 수정 해 야 합 니 다. 1 층 에 있 는 파일 A 를 수정 합 니 다.2 층 에 있 는 파일 삭제 하기;새 파일 C 를 추가 합 니 다.이때 4 층 이 추가 되 고 이 층 에서 수정 합 니 다. 1 층 의 파일 A 를 4 층 으로 복사 하고 파일 A 의 내용 을 수정 합 니 다.4 층 에서 B 라 는 파일 을 존재 하지 않 는 것 으로 설정 합 니 다.4 층 에 새 파일 C 를 만 듭 니 다.
v1.0:
=====第三层 50M=====
=====第二层 500M====
=====第一层 1G======
v1.1:
===第四层 修改 1M===
=====第三层 50M=====
=====第二层 500M====
=====第一层 1G======
이렇게 수정 하면 완 료 됩 니 다. 창고 에 이 새 버 전 을 발표 할 때 앞의 3 층 은 창고 에 저장 되 어 있 기 때문에 부피 가 작은 4 층 만 업로드 하면 됩 니 다.이 미 러 를 사용 하 는 다른 기 계 는 버 전 을 업그레이드 하려 면 창고 에서 4 층 만 다운로드 해 야 한다.이 를 통 해 알 수 있 듯 이 이러한 레이 어 링 특성 은 Docker 에 중요 한 의 미 를 가진다. 레이 어 링 특성 을 이용 하여 Docker 는 미 러 의 증분 변경 을 할 수 있 고 Docker 미 러 의 다운로드 업 로드 를 매우 가 벼 워 지게 할 수 있다 (첫 번 째 조작 제외).
참고 자료 이금 방 윤 엽 유 천 스 진 순 저 '순차 점진 학 Docker'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.