Docker Engine 18.03 릴리스 노트

Docker Engine 18.03 릴리스 노트

Docker Engine 18.03 릴리스 노트를 함께 살펴볼게요. 이 버전은 2018년에 공개된 것으로, 클라이언트·런타임·네트워킹·스웜 모드 등 다양한 영역에서 개선과 버그 수정이 이루어졌어요. 크게 18.03.1-ce와 18.03.0-ce 두 가지 패치 버전으로 나뉘니, 각각의 변경 사항을 하나씩 확인해 볼게요.

출처: 공식문서

18.03.1-ce (2018-04-26)

클라이언트 (Client)

이번 패치에서는 클라이언트 쪽에서 발생하던 몇 가지 문제를 해결했어요.

  • compose 파일을 네트워크와 병합할 때 발생하던 오류를 수정했어요. docker/cli#983
  • docker stack deploy 명령으로 서비스를 재배포할 때, --force 옵션으로 업데이트된 서비스가 다시 배포되던 문제를 해결했어요. docker/cli#963
  • docker version 명령의 출력 정렬이 어긋나던 문제를 바로잡았어요. docker/cli#965

런타임 (Runtime)

런타임 영역에서는 보안과 안정성 관련 수정이 많았어요.

  • docker exec로 실행되는 프로세스에 AppArmor 프로파일이 적용되지 않던 문제를 수정했어요. moby/moby#36466
  • 플러그인의 마운트 슬라이스가 정렬되지 않도록 했어요. moby/moby#36711
  • 데몬/클러스터 구성 중 부분적인 attachment 항목을 처리하도록 했어요. moby/moby#36769
  • Golang 버전을 1.9.5로 올렸어요. moby/moby#36779 docker/cli#986
  • 데몬의 stats 수집 시 CPU 샘플링이 더 탄력적으로 동작하도록 개선했어요. moby/moby#36519
  • containerd를 1.0.3 릴리스로 업데이트했어요. moby/moby#36749
  • Windows에서 쓰기(write)가 실패할 때 레이어가 누수되던 문제를 수정했어요. moby/moby#36728
  • 컨테이너 마운트가 unbindable 상태가 되지 않도록 했어요. moby/moby#36768
  • 데몬 재시작 후 컨테이너를 export할 때 데몬이 panic에 빠지던 문제를 해결했어요. moby/moby#36586
  • 인증 오류(auth errors) 발생 시 digest 캐시가 제거되던 문제를 수정했어요. moby/moby#36509
  • 플러그인 컨테이너가 실패할 경우 제대로 제거되도록 했어요. moby/moby#36715
  • authz 플러그인 사용 시 시스템 메모리를 모두 사용하지 않도록 Copy 동작을 개선했어요. moby/moby#36595
  • libcontainerd 클라이언트의 일부 잠금(locking)을 완화했어요. moby/moby#36848
  • CVE-2018-8115 보안 이슈를 해결하기 위해 hcsshim을 v0.6.10으로 업데이트했어요.

스웜 모드 (Swarm Mode)

  • raft의 Election tick을 Heartbeat tick의 10배로 늘렸어요. moby/moby#36672

네트워킹 (Networking)

네트워크 안정성과 관련된 수정 사항들이에요.

18.03.0-ce (2018-03-21)

빌더 (Builder)

빌드 과정의 정확성과 성능을 개선한 변경 사항들이에요.

  • -buildmode=pie로 전환했어요. moby/moby#34369
  • Dockerfile이 빌드 컨텍스트 밖에 있어도 사용할 수 있게 했어요. docker/cli#886
  • tar 파일에서 빌드할 때 잘못된 캐시 히트가 발생하던 문제를 수정했어요. moby/moby#36329
  • 멀티 스테이지 빌드에서 파일이 다른 이미지로 새어 나가던 문제를 해결했어요. moby/moby#36338

클라이언트 (Client)

클라이언트 기능 개선과 버그 수정이 많이 포함되어 있어요.

  • compose 타입 types.Config의 마샬링을 단순화했어요. docker/cli#895
  • 배포 시 여러 compose 파일을 지원하도록 했어요. docker/cli#569
  • Kubernetes 스택 플래그가 동작하지 않던 문제를 수정했어요. docker/cli#831
  • Kubernetes용 스택 마샬링을 수정했어요. docker/cli#890
  • 서비스 env, 마운트, 라벨에 대한 bash 자동 완성을 수정하고 단순화했어요. docker/cli#682
  • docker psbeforesince 필터가 동작하지 않던 문제를 수정했어요. moby/moby#35938
  • --label-file 옵션의 이상한 동작을 수정했어요. docker/cli#838
  • 지원되지 않는 플랫폼에서 defaultCredentialStore() 컴파일 문제를 수정했어요. docker/cli#872
  • 이미지 관련 bash 자동 완성을 개선하고 수정했어요. docker/cli#717
  • 바인드 마운트에서 빈 소스가 있는지 확인하는 로직을 추가했어요. docker/cli#824
  • 클라이언트에서 환경 변수를 통한 TLS 설정이 동작하지 않던 문제를 수정했어요. moby/moby#36270
  • 레지스트리별 자격 증명 헬퍼가 설정된 경우 docker build가 더 빨리 실행되도록 했어요. docker/cli#840
  • zsh 자동 완성의 이벤트 필터에 disable, enable, install, remove를 추가했어요. docker/cli#372
  • inspect 호출에 빈 ID가 전달되면 오류를 발생시키도록 했어요. moby/moby#36144
  • k8s 컨트롤러용 버전을 마샬링하도록 했어요. docker/cli#891
  • 플러그인 백엔드와의 HTTP 클라이언트 통신에 0이 아닌 타임아웃을 설정했어요. docker/cli#883
  • --tls 옵션을 위한 DOCKER_TLS 환경 변수를 추가했어요. docker/cli#863
  • secrets/configs를 위한 --template-driver 옵션을 추가했어요. docker/cli#896
  • docker trust 명령을 experimental에서 정식 기능으로 옮겼어요. docker/cli#934 docker/cli#935 docker/cli#944

로깅 (Logging)

로그 드라이버 관련 개선 사항이에요.

  • AWS 로그에서 최대 크기 이벤트에 새 줄을 추가하지 않도록 했어요. moby/moby#36078
  • 플러그인이 로드된 후 로그 검증 로직이 실행되도록 이동했어요. moby/moby#36306
  • Splunk 로그 드라이버에서 프록시를 지원하도록 했어요. moby/moby#36220
  • 로그가 비어 있을 때 tail 동작이 잘못되던 문제를 수정했어요. moby/moby#36305

네트워킹 (Networking)

네트워킹 영역에서도 여러 안정성 개선이 있었어요.

  • libnetwork를 다시 vendoring했어요. moby/moby#36137
  • Memberlist 재vendor 시 종료 과정에서 발생하던 교착 상태(deadlock)를 수정했어요. docker/libnetwork#2040
  • 사용자가 지정한 ndots 옵션이 동작하지 않던 문제를 수정했어요. docker/libnetwork#2065
  • Windows에서 SandboxID 대신 ContainerID를 사용하도록 수정했어요. docker/libnetwork#2010
  • EndpointSettings가 nil이 아닌지 확인하도록 NetworkingConfig를 검증했어요. moby/moby#36077
  • DockerNetworkInternalMode 관련 문제를 수정했어요. moby/moby#36298
  • attachable 네트워크 연결 과정에서 발생하던 경쟁 조건(race)을 수정했어요. moby/moby#36191
  • AArch64에서 InspectNetwork 호출 시 타임아웃이 발생하던 문제를 수정했어요. moby/moby#36257
  • 부분적인 overlay ID에 대한 상세 정보가 누락되던 문제를 수정했어요. moby/moby#35989
  • 네트워크 이름 중복 문제를 해결하기 위해 FindNetwork를 업데이트했어요. moby/moby#30897
  • ingress 네트워크에 attach하는 것을 허용하지 않도록 했어요. docker/swarmkit#2523
  • ingress 네트워크가 암시적으로 제거되지 않도록 했어요. moby/moby#36538
  • Windows에서 stale HNS 엔드포인트가 남는 문제를 수정했어요. moby/moby#36603
  • 중복 IP 주소와 관련된 IPAM 문제를 수정했어요. docker/libnetwork#2104 docker/libnetwork#2105

런타임 (Runtime)

런타임 영역은 이번 릴리스에서 가장 많은 변경이 이루어진 부분이에요. 안정성, 보안, 성능 개선이 골고루 포함되어 있어요.

  • Windows에서 HotAdd를 활성화했어요. moby/moby#35414
  • LCOW: Graphdriver의 hotRemoveVHDs에서 발생하던 교착 상태를 수정했어요. moby/moby#36114
  • LCOW: 레이어가 하나뿐이면 일반 마운트를 사용하도록 했어요. moby/moby#36052
  • 임시 환경 변수 LCOW_API_PLATFORM_IF_OMITTED를 제거했어요. moby/moby#36269
  • Microsoft/opengcs를 v0.3.6으로 재vendor했어요. moby/moby#36108
  • Task.Status.ContainerStatusExitCodePID가 표시되지 않던 문제를 수정했어요. moby/moby#36150
  • 플러그인 스캐너가 너무 깊이 들어가던 문제를 수정했어요. moby/moby#36119
  • graphdriver 홈을 private 마운트로 만들지 않도록 했어요. moby/moby#36047
  • zfs/btrfs 정리 시 재귀적 언마운트를 하지 않도록 했어요. moby/moby#36237
  • 레이어가 존재하지 않으면 이미지를 복원하지 않도록 했어요. moby/moby#36304
  • 템플릿 기반 configs/secrets의 최소 API 버전을 조정했어요. moby/moby#36366
  • containerd를 1.0.2로 업데이트했어요. (cfd04396dc68220d1cecbe686a6cc3aa5ce3667c) moby/moby#36308
  • Golang을 1.9.4로 업데이트했어요. moby/moby#36243
  • 종료 시 데몬 루트가 언마운트되도록 했어요. moby/moby#36107
  • runc를 6c55f98695e902427906eed2c799e566e3d3dfb5로 업데이트했어요. moby/moby#36222
  • 데몬 재시작 시 컨테이너 정리 과정의 문제를 수정했어요. moby/moby#36249
  • SCTP 포트 매핑을 지원하도록 API를 v1.37로 올렸어요. moby/moby#33922
  • SCTP 포트 매핑을 지원했어요. docker/cli#278
  • ContainerConfigVolumes 속성 정의를 수정했어요. moby/moby#35946
  • moby와 의존성을 업데이트했어요. docker/cli#829
  • C.RWLayer 사용 전 nil 확인을 추가했어요. moby/moby#36242
  • TaskStateREMOVEORPHANED 상태를 추가했어요. moby/moby#36146
  • ContainerStatPath, CopyFromContainer, CopyToContainer 메서드에서 IsErrNotFoundIsErrNotImplemented를 사용한 오류 감지를 수정했어요. moby/moby#35979
  • integration/internal/container 헬퍼 패키지를 추가했어요. moby/moby#36266
  • 정식 import 경로를 추가했어요. moby/moby#36194
  • 통합 테스트에 container.Exec()을 추가/사용했어요. moby/moby#36326
  • --node-generic-resource 플래그의 단수/복수 표기를 수정했어요. moby/moby#36125
  • Daemon.cleanupContainer에서 컨테이너의 RWLayer를 해제할 때 nullify하도록 했어요. moby/moby#36160
  • 데몬이 --oom-kill-disable 옵션을 containerd에 전달하도록 했어요. moby/moby#36201
  • 바인딩 포트가 있고 네트워크 모드가 host일 때 경고 메시지를 표시하도록 했어요. moby/moby#35510
  • containerd가 재시작되면 containerd 원격(remotes)을 새로 고치도록 했어요. moby/moby#36173
  • 데몬 루트가 shared propagation을 사용하도록 설정했어요. moby/moby#36096
  • 재귀적 언마운트를 최적화했어요. moby/moby#34379
  • 플러그인 마운트를 런타임에서 수행하도록 했어요. moby/moby#35829
  • Graphdriver의 RefCounter 메모리 누수를 수정했어요. moby/moby#36256
  • 볼륨 복사에 continuity fs 패키지를 사용하도록 했어요. moby/moby#36290
  • reexec에 proc/exe를 사용하도록 했어요. moby/moby#36124
  • 템플릿 기반 secrets와 configs를 위한 API 지원을 추가했어요. moby/moby#33702moby/moby#36366
  • 데몬 루트의 마운트에 rslave propagation을 사용하도록 했어요. moby/moby#36055
  • 마스킹된 경로에 /proc/keys를 추가했어요. moby/moby#36368
  • Runc를 1.0.0-rc5로 업데이트했어요. moby/moby#36449
  • 빅엔디안 아키텍처에서 runc exec가 동작하지 않던 문제를 수정했어요. moby/moby#36449
  • 마운트 네임스페이스가 제공되지 않으면 chroot를 사용하도록 했어요. moby/moby#36449
  • cAdvisor가 systemd slice 확장을 사용할 수 있도록 수정했어요. moby/moby#36449
  • 잘못된 uid/gid로 마운트되던 디바이스 문제를 수정했어요. moby/moby#36449
  • IPC private 마운트가 있는 읽기 전용 컨테이너에서 /dev/shm이 읽기 전용으로 마운트되던 문제를 수정했어요. moby/moby#36526

스웜 모드 (Swarm Mode)

스웜 오케스트레이션의 안정성과 보안을 강화하는 변경들이에요.

  • EC Private Key를 PKCS#8 PEM으로 교체했어요. docker/swarmkit#2246
  • EndpointSpec에서 IP 중복 문제를 수정했어요. docker/swarmkit#2505
  • SCTP 포트 매핑을 지원하도록 했어요. docker/swarmkit#2298
  • 배치 제약 조건만 변경되고 할당된 노드가 그 조건을 만족하는 경우에는 태스크를 다시 스케줄링하지 않도록 했어요. docker/swarmkit#2496
  • 태스크 리퍼의 stopChan이 두 번 이상 닫히지 않도록 했어요. docker/swarmkit#2491
  • 동기화 관련 수정을 했어요. docker/swarmkit#2495
  • 스트리밍이 구현되지 않은 경우 메시지 전송 재시도를 알리는 로그 메시지를 추가했어요. docker/swarmkit#2483
  • 디스패처의 세션, 노드 이벤트, 하트비트에 대한 디버그 로그를 추가했어요. docker/swarmkit#2486
  • bash 자동 완성 이벤트 타입 필터에 swarm 타입을 추가했어요. docker/cli#888
  • swarm 범위의 네트워크를 network inspect로 확인할 때 생성 시간(Created time)이 표시되지 않던 문제를 수정했어요. moby/moby#36095

더 알아보기 (Learn more)