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#963docker 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)
네트워크 안정성과 관련된 수정 사항들이에요.
- 서비스에서 LB(Load Balancer) 엔드포인트를 정상적으로 제거하도록 했어요. docker/libnetwork#2112
- ServFail 응답이 오면 다른 외부 DNS 서버를 재시도하도록 했어요. docker/libnetwork#2121
- 브리지 네트워크 격리 규칙의 확장성(scalability)을 개선했어요. docker/libnetwork#2117
- 더 큰 사전 설정 속성 값을 허용하고 덮어쓰지 않도록 했어요. docker/libnetwork#2124
changeNodeState호출 시 동시 읽기/쓰기로 인한 panic을 방지했어요. docker/libnetwork#2136
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 ps의before및since필터가 동작하지 않던 문제를 수정했어요. 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#36077DockerNetworkInternalMode관련 문제를 수정했어요. 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.ContainerStatus에ExitCode와PID가 표시되지 않던 문제를 수정했어요. 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
ContainerConfig의Volumes속성 정의를 수정했어요. moby/moby#35946- moby와 의존성을 업데이트했어요. docker/cli#829
C.RWLayer사용 전 nil 확인을 추가했어요. moby/moby#36242TaskState에REMOVE와ORPHANED상태를 추가했어요. moby/moby#36146ContainerStatPath,CopyFromContainer,CopyToContainer메서드에서IsErrNotFound와IsErrNotImplemented를 사용한 오류 감지를 수정했어요. moby/moby#35979- integration/internal/container 헬퍼 패키지를 추가했어요. moby/moby#36266
- 정식 import 경로를 추가했어요. moby/moby#36194
- 통합 테스트에
container.Exec()을 추가/사용했어요. moby/moby#36326 --node-generic-resource플래그의 단수/복수 표기를 수정했어요. moby/moby#36125Daemon.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#33702 및 moby/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