>  기사  >  운영 및 유지보수  >  Docker 핵심 기술의 가장 체계적인 숙달(요약 공유)

Docker 핵심 기술의 가장 체계적인 숙달(요약 공유)

WBOY
WBOY앞으로
2022-02-04 07:00:312281검색

이 글은 도커 핵심 기술의 컨테이너 운영, Dockerfile에 대한 자세한 설명 등에 관한 질문을 가져왔습니다. 여러분에게 도움이 되기를 바랍니다.

Docker 핵심 기술의 가장 체계적인 숙달(요약 공유)

1. Docker

1. 소개

  • Linux 커널의 Cgroup, Namespace, Union FS 등의 기술을 기반으로 운영 체제 수준에서 프로세스를 캡슐화하고 격리하는 기술입니다. 격리된 프로세스는 호스트와 독립적이므로 컨테이너라고 합니다
  • 초기 구현은 LXC를 기반으로 했으며 0.7부터 LXC가 제거되고 1.11부터 자체 개발한 Libcontainer가 사용되었습니다. runC와 Containerd를 사용하도록 진화
  • Docker 컨테이너를 기반으로 파일 시스템, 네트워크 상호 연결, 프로세스 격리 등 추가 캡슐화가 수행되어 컨테이너 생성 및 유지 관리가 크게 단순화되어 Docker 기술이 더 가볍고 가상 머신 기술보다 빠릅니다

2. Docker의 장점

  • 시스템 리소스의 더 효율적인 사용
  • 더 빠른 시작 시간
  • 일관된 실행 환경
  • 지속적인 제공 및 배포
  • 더 쉬운 마이그레이션
  • 더 쉬운 유지 관리 및 확장

3. Docker와 가상 머신의 비교

2. Docker 설치

참조 기사 설치: Ubuntu에 Docker 엔진 설치 | Docker Documentation

3 . 컨테이너 작업

  • 시작: cDocker 실행:

  • -IT 상호 작용

실행

-P 포트 매핑

-V 디스크

docker 시작

  • 컨테이너 중지

docker stop

  • 컨테이너 프로세스 보기

docker ps

  • 컨테이너 세부정보 보기

docker 검사

  • 파일 복사 컨테이너에

docker cp file1 :/file_to_path

  • docker가 컨테이너를 종료하고 컨테이너를 닫지 않고 다음을 수행합니다. 도커 종료 컨테이너를 닫지만 종료

모든 docker 이미지 쿼리

  • docker Images

  • Docker 미러 웨어하우스

  • Docker 허브: https://허브 .docker.com개인 미러 웨어하우스 만들기: docker run -d -p 5000:5000 Registry

  • 4. Dockerfile 세부 설명

Dockerfile은 일반적으로 기본 이미지 정보, 유지 관리 정보, 이미지 작업 지침 및 컨테이너 시작 작업 지침

일반 명령
  • FROM: 기본 이미지를 지정하고 첫 번째 명령이어야 합니다.

형식:

           FROM ;image>

          FROM < ;이미지>:<태그>

         FROM @

예:

         FROM ubuntu

MAINTAINER: 유지 관리 정보

형식:

                                             MAINTAINER ;

MAINTAINER 리본

실행: 이미지 빌드 시 실행할 명령

형식:

셸 실행: RUN

exec 실행: RUN ["executable", "param1", "param2"]

예:

RUN apk 업데이트

RUN ["/etc/execfile", "arg1", "arg2"]

RUN apt-get update && apt-get install 이 두 명령은 항상 &&로 연결됩니다. 그렇지 않으면 apt-get 업데이트 빌드 계층이 캐시됩니다. 새 패키지 설치에 실패하게 됩니다

ADD: 컨테이너에 로컬 파일을 추가하면 tar 및 기타 유형이 자동으로 압축 해제되며 wget

형식과 유사하게 네트워크 리소스에 액세스할 수 있습니다.

ADD ... Dockerfile의 다중 단계(다단계 구성) -SparkDev -Blog Garden

복사 & LT & GT; & GT: 컨테이너를 빌드한 후 호출됩니다. 즉, 컨테이너가 시작될 때만 호출됩니다. 형식:

CMD ["executable", "param1", "param2"] (실행 가능한 실행 파일, 우선 순위)

CMD [" param1" , "Param2"] (Entrypoint 설정, Entrypoint를 직접 호출하여 매개변수 추가)

CMD 명령 Param1 Param2 (셸 내부 명령 실행)

예:

CMD ["EthTool", "-Help"]

CMD Echoooo "1111"

ENTRTPOINT: 실행 가능하도록 컨테이너를 구성합니다

.

형식:

ENTRYPOINT ["executable", "param1", "param2"](실행 파일, 우선순위)

ENTRYPOINT 명령 param1 param2(셸 내부 명령) 예:

ENTRYPOINT /httpserver

                      CMD [ - c]

LABAL: 이미지에 소스 데이터를 추가하는 데 사용됩니다

형식:

         LABEL = = ...

예:         LABEL multi.label1="value1" multi.label2="value2" other="value3"

ENV: 환경 변수 설정


형식:

      ENV ;value>

예:

    ENV MY_SERVICE_PORT=80 UDP_PORT=90

EXPOSE: 외부 상호 작용을 위한 포트 지정

형식:

    EXPOSE < 포트> [<포트>...]

예:

                                        using using       using using           use using ’ ’ s out through out using off ‐ ‐ ‐‐ ‐‐ 및 ​ to VOLUME gt;]

예:

볼륨 [" /data ", "/usr1/jenkins"]

USER: 컨테이너를 실행할 때 사용자 이름이나 UID를 지정하면 후속 RUN에서도 지정된 사용자가 사용됩니다.

형식:

USER user

USER user:group

USER uid USER uid:gid USER user:gid

USER uid:group

예:

USER www

ARG : 전달할 항목을 지정하는 데 사용됩니다.

형식:

ARG [=]

예:

ARG build_user=ribbon

5. Linux NameSpace

  • NamesSpace에 대한 자세한 설명:

Linux NameSpace_Frank_Abagnale의 블로그 - CSDN 블로그 이 기사에 대한 자세한 소개는 다음을 참조하세요.

  • NameSpace의 일반적인 작업

  • 현재 시스템의 네임스페이스 보기:

lsns -t

  • 프로세스의 네임스페이스 보기:

ls -la /proc/

  • 네임스페이스의 실행 명령 보기

nsenter -t -n

6. Linux Cgroups

  • 에 대한 자세한 설명: cgroups - 간략한 책을 참조할 수 있습니다. 이 기사에 대해 알아보겠습니다

Cgroups를 제어하여 CPU 리소스 제어

  • 시뮬레이션을 통해 Cgroup이 리소스를 제어하는 ​​효과에 더 익숙해지려면 먼저 cpudemo 폴더를 생성하세요

top을 실행하면 busyloop가 두 개의 CPU 리소스를 차지하는 것을 확인할 수 있습니다.

cgroup 프로세스 구성 그룹에 프로세스를 추가합니다.

CPU 할당량 설정

CPU 리소스 사용량이 200%부터인 것을 확인할 수 있습니다. 1%로 감소합니다

Cgroup 시뮬레이션 메모리 리소스 제한을 초과하면 OOM이 종료됩니다

  • /sys/fs/cgroup/memory 디렉터리에 memorydemo 폴더를 생성합니다

메모리 실행 프로그램을 소비하는 경우 watch를 사용하여 메모리 사용량을 쿼리합니다

프로세스 구성이 cgroups 구성 그룹에 들어갑니다.

최대 메모리 크기를 설정합니다.

프로그램이 OOM에 의해 종료될 때까지 기다립니다. dmesg는 다음과 같이 할 수 있습니다. 킬 정보를 보세요

참고: 자체 생성된 cgroup 폴더를 삭제하려면 cgroup-tools

를 사용해야 합니다. 7. Union FS

Docker에서 사용하는 기술은 다음과 같습니다. 모두 Linux 기술에서 파생되었으며 혁신적이지 않으며 Docker의 혁신은 파일 시스템입니다.

1. 개념:

  • 동일한 가상 파일 시스템 아래에 서로 다른 디렉터리를 마운트하는 파일 시스템
  • 각 구성원 디렉터리에 대해 읽기 전용, 읽기 쓰기 및 불가능 권한 설정 지원
  • 파일 시스템 계층화, 읽기 전용 권한 디렉터리는 다음과 같습니다. 여기서 수정은 점진적이며 읽기 전용 부분에는 영향을 미치지 않습니다. 일반적으로 Union FS의 목적은 여러 디스크를 동일한 디렉터리에 마운트하는 것입니다. 다른 하나는 읽기 전용 부분과 디렉터리를 통합하는 것입니다.
  • 2. Union FS
도커 이미지 디자인에는 레이어 개념이 도입되었습니다. 즉, 사용자가 이미지를 생성하는 모든 단계에서 추가 레이어인 레이어가 생성됩니다. . 애플리케이션 A와 애플리케이션 B가 있는 컨테이너가 동일한 우분투 운영 체제 계층과 Golang 환경 계층(읽기 전용 계층)을 공동으로 참조하고 각각 자체 애플리케이션 계층을 가지며 쓰기 가능하도록 rootfs(디렉토리)를 측정합니다. 층. 컨테이너를 시작할 때 해당 레이어를 컨테이너의 루트 파일 시스템으로 UnionFS를 통해 디렉터리에 마운트합니다.

3. 컨테이너 스토리지 드라이버

4. 효과를 더 잘 이해하기 위해 Union FS를 시뮬레이션합니다.


현재 버전의 Docker는 overlayFS 스토리지 드라이버를 사용하므로 overlay를 사용하여 정지합니다. 실험을 수행하기 위해 overlayfs는 하위 디렉터리, 상위 디렉터리 및 작업 디렉터리의 세 가지 디렉터리를 통해 구현됩니다. 이 과정에서 콘텐츠는 사용자에게 표시되지 않습니다. 마지막으로 조인트 마운팅이 완료된 후 사용자에게 표시되는 통합 보기를 병합된 디렉터리라고 합니다.

다음 명령을 실행합니다.

mkdir upper lower merged work
echo "lower" > lower/in_lower.txt
echo "from lower" > lower/in_both.txt
echo "from upper" > upper/in_both.txt
echo "upper" > upper/in_upper.txt
path=$(pwd)
mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

오버레이 스토리지 드라이버 파일 마운팅을 사용하면 효과를 볼 수 있습니다. 실험이 완료된 후 환경을 복원하려면 병합된 디렉터리를 먼저 마운트 해제한 다음 4개의 디렉터리를 삭제해야 합니다. 다른 디렉터리를 먼저 삭제하면 rm: '병합된/'을 제거할 수 없습니다: 장치 또는 리소스 사용 중이 나타날 수 있습니다. 병합된 디렉터리가 삭제되지 않게 됩니다. Docker 네트워크

docker의 내장 네트워크 모드 쿼리

docker run 실행할 네트워크 모드 선택

1) 호스트 모드: --net=host를 사용하여 지정 . 호스트와 net 세트를 공유합니다

2) 없음 모드: --net=none을 사용하여 지정합니다. 네트워크 구성은 직접 구성해야 합니다

3) 브리지 모드: --net=bridge를 사용하여 기본 설정을 지정합니다.

docker 네트워크 논리 다이어그램 브리지 및 NAT

4) 컨테이너 모드: --net=container:NAME_or_ID를 사용하여 지정합니다. 다른 컨테이너의 네트워크 구성을 사용하세요

네트워크 모드 다이어그램은 대략 아래와 같습니다

3. Docker 작동을 시뮬레이션하여 네트워크 브리지를 시작합니다

  • Create --net =none nginx

  • 네트워크 네임스페이스 생성

  • 네트워크 네임스페이스 링크 생성

  • 현재 생성된 브리지 장치를 확인하세요

  • veth 쌍 만들기

  • A 네트워크 구성 수행

  • B 네트워크 구성

nginx docker

에서 eth0 네트워크 장치를 생성합니다. eth0 IP 게이트웨이 구성

  • nginx가

  • 에 액세스할 수 있음 Windows도 액세스할 수 있도록 nat 구성

  • 사용 후 삭제 지정 nat 규칙

추천 학습: "docker 비디오 튜토리얼"

위 내용은 Docker 핵심 기술의 가장 체계적인 숙달(요약 공유)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제