Docker Engine 18.09 릴리스 노트

Docker Engine 18.09 릴리스 노트

Docker Engine 18.09의 변경 사항을 정리한 릴리스 노트예요. 이 버전부터 daemon, client, container runtime이 각각 별도의 패키지로 제공되기 때문에, 업데이트할 때는 모든 패키지를 함께 업데이트해야 해요. 예를 들어 Ubuntu에서는 아래 명령으로 설치할 수 있어요.

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

각 Linux 배포판에 맞는 자세한 설치 방법은 공식 설치 문서를 참고하세요.

출처: 공식문서

18.09.9

2019-09-03

Client

클라이언트 쪽에서는 Windows가 아닌 환경에서 Windows 절대 경로를 감지하던 문제를 고쳤어요. Windows에서 delegation.key 파일의 키를 로드하지 못하던 문제도 해결했고, bash와 zsh용 완성 스크립트도 업데이트했어요.

  • Windows absolute path detection on non-Windows 수정 docker/cli#1990
  • Windows에서 delegation.key 키 로드 거부 문제 수정 docker/cli#1968
  • bash/zsh 완성 스크립트 업데이트

Logging

journald 로그를 읽을 때 발생하던 문제를 수정했어요.

Networking

네트워킹 관련해서 몇 가지 문제를 고쳤어요. 네트워킹이 비활성화된 컨테이너에 네트워크를 연결할 때 패닉이 발생하지 않도록 막았고, 애플리케이션의 서비스 포트가 무작위로 사용 불가능해지던 문제를 해결했어요. 또 --config-only 네트워크와 --config-from 네트워크가 비정상 종료될 때 정리가 제대로 되지 않던 문제도 수정했어요.

Runtime

Go 1.11.13으로 업데이트했어요. XFS 디스크 쿼터를 사용할 때 엔진 패닉이 발생할 수 있는 잠재적 문제도 해결했어요.

  • Go 1.11.13 업데이트
  • XFS 디스크 쿼터 사용 시 엔진 패닉 가능성 수정 moby/moby#39644

Swarm

Swarm에서 grpc: received message larger than max 오류를 수정했어요. 여러 작업이 있는 노드를 제거할 수 없던 문제도 해결했어요.

18.09.8

2019-07-17

Runtime

디버그 모드에서 Docker Engine을 실행할 때 시크릿이 로그 파일에 노출되지 않도록 마스킹 처리했어요. CVE-2019-13509 취약점 관련인데, 디버그 모드에서 docker stack deploy로 외부 시크릿이 아닌 시크릿을 포함한 스택을 재배포하면 로그에 시크릿이 포함될 수 있었어요.

Client

롤백 구성에서 parallelismmax_failure_ratio 필드의 타입 보간 문제를 수정했어요.

Known Issue

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.7

2019-06-27

Builder

주석만 있는 Dockerfile을 빌드할 때 발생하던 패닉 오류를 수정했어요. GCR 인증 문제에 대한 우회책을 추가했고, Builder-next에서 GCR 토큰 캐시 구현의 버그도 고쳤어요.

Networking

--network-rm으로 네트워크를 제거하지 못하던 오류를 수정했어요.

Runtime

aufs와 레이어 스토어의 성능 최적화를 추가해서 대규모 병렬 컨테이너 생성/제거를 더 빠르게 처리할 수 있게 됐어요. containerd를 1.2.6으로 업데이트했고, CVE-2018-15664 심볼릭 링크 교환 공격을 디렉터리 트래버설과 함께 수정했어요. Windows에서 docker service create --limit-cpu 지원을 고쳤고, daemon의 mirrors 검증 문제도 해결했어요. 이제 Docker는 ID 맵에서 UID와 GID 범위 정렬을 더 이상 지원하지 않아요.

Logging

로거 플러그인에서 큰 로그 라인을 허용하도록 수정했어요.

Known Issue

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.6

2019-05-06

Builder

DOCKER_BUILDKIT=1일 때 여러 <src>를 가진 COPYADD가 캐시를 무효화하지 않도록 수정했어요.

Networking

에이전트가 닫힐 때 클러스터 프로바이더를 정리하도록 했어요. Windows에서는 사용자가 호스트 포트를 지정하지 않으면 임의의 호스트 포트를 선택하도록 변경했어요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.5

2019-04-11

Builder

DOCKER_BUILDKIT=1 docker build --squash .. 명령이 제대로 동작하도록 수정했어요.

Client

tty 초기 크기 오류를 수정했어요. dial-stdio 고루틴 누수 문제도 고쳤고, 배포 추적에 사용되는 스택 인포머의 셀렉터도 수정했어요.

Networking

systemd-resolved를 사용할 때 network=host가 잘못된 resolv.conf를 사용하던 문제를 수정했어요. Windows에서 부하가 걸릴 때 ARP 엔트리가 무작위로 손상되던 문제도 고쳤어요.

Runtime

재시작 정책이 있는 중지된 컨테이너를 Restarting 상태로 표시하도록 변경했어요. exec 실행 시 원래 프로세스 스펙을 사용하도록 수정했어요.

Swarm Mode

노드가 삭제될 때 작업 리소스가 누수되던 문제를 수정했어요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.4

2019-03-28

Builder

git ref 검증을 추가해서 CVE-2019-13139 취약점을 수정했어요. git ref가 플래그로 잘못 해석되지 않도록 했어요.

Runtime

파일 이름이 100자를 넘을 때 docker cp에서 발생하던 오류를 수정했어요. layer/layer_store에서 NewInputTarStream 리소스가 제대로 해제되도록 고쳤고, GetConfigs의 GRPC 한도를 늘렸어요. containerd를 1.2.5로 업데이트했어요.

Swarm Mode

Swarm에 노드를 조인할 때 nil 포인터 예외가 발생하던 문제를 수정했어요. HTTP 프록시가 설정된 경우 Swarm 노드가 마스터로 조인할 수 없던 문제도 해결했어요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.3

2019-02-28

Networking fixes

Windows에서 네트워크 ID 재생성을 피해서 네트워크 참조가 깨지지 않도록 했어요. 독립 컨테이너에서 네트워크를 지정할 때 --restart always 플래그가 동작하지 않던 문제를 수정했어요. 매니저가 오버레이 네트워크에 연결되어 있지 않을 때 networkdb의 IPAM 상태와 관련된 문제도 고쳤어요.

  • Windows 네트워크 ID 재생성 방지 docker/engine#149
  • Windows --restart always 플래그 문제 수정 (docker/escalation#1037)
  • networkdb IPAM 상태 문제 수정 (docker/escalation#1049)

Runtime fixes and updates

Go 1.10.8로 업데이트했어요. 컨테이너 이름 생성기의 이름 목록을 수정했어요. 기존 폴더를 복사할 때 대상 파일시스템이 xattr를 지원하지 않으면 xattr 설정 오류를 무시하도록 했어요. Graphdriver에서 'character-device' 비트가 설정된 경우 'device' 모드를 감지하지 못하던 문제를 수정했어요. containerd 연결 실패 시 nil 포인터 역참조가 발생하던 문제를 고쳤고, 시작 실패 시 오래된 containerd 객체를 삭제하도록 했어요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.2

2019-02-11

Security fixes

보안 취약점을 해결하기 위해 runc를 업데이트했어요. 특수하게 조작된 컨테이너가 호스트에서 관리자 권한을 얻을 수 있는 치명적인 취약점(CVE-2019-5736)을 수정했어요. Ubuntu 14.04에서 3.13 커널을 사용하는 고객은 지원되는 Ubuntu 4.x 커널로 업그레이드해야 해요. 자세한 내용은 Docker 블로그 포스트를 참고하세요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.1

2019-01-09

Important notes about this release

18.09 이전 버전에서는 containerd를 Docker Engine 데몬이 관리했어요. 그런데 18.09부터는 systemd가 containerd를 관리해요. 따라서 docker.service의 systemd 설정에서 마운트 관련 설정(예: MountFlags=slave)을 변경하면 Docker Engine 데몬과 containerd 사이의 상호작용이 깨져서 컨테이너를 시작할 수 없게 돼요. 다음 명령으로 현재 MountFlags 값을 확인할 수 있어요.

$ sudo systemctl show --property=MountFlags docker.service
MountFlags=

만약 이 명령이 MountFlags에 비어 있지 않은 값을 출력한다면 설정을 업데이트하고 docker 서비스를 재시작해야 해요.

Security fixes

Go 언어를 1.10.6으로 업그레이드해서 CVE-2018-16873, CVE-2018-16874, CVE-2018-16875를 해결했어요. authz 플러그인에서 0 길이 콘텐츠와 경로 검증 문제를 수정했고, 마스킹된 경로에 /proc/asound를 추가했어요.

Improvements

BuildKit 0.3.3으로 업데이트했어요. containerd 1.2.2로 업데이트했고, 더 이상 사용되지 않는 레거시 overlay 및 devicemapper 스토리지 드라이버 사용에 대한 경고를 추가했어요. prune 명령에서 빌드 캐시 정리 전에 이미지 정리를 먼저 수행하도록 변경했어요. 실험적인 CLI 명령(manifest)에 대한 bash 완성 스크립트를 추가했고, Windows 10에서 프로세스 격리를 허용했어요.

Fixes

RHEL/CentOS에서 runc의 kmem accounting을 비활성화했어요. 비효율적인 네트워킹 구성을 수정했고, docker system prune이 until 필터를 받지 못하던 문제를 고쳤어요. containerd에서 자격 증명이 설정되지 않은 경우를 방지했어요. Debian에서 iptables 호환성 문제를 수정했고, docker host의 기본 스키마를 tcp로 설정하는 문제를 고쳤어요. service update --force의 bash 완성 스크립트를 수정했어요. Windows에서 정리 중 DetachVhd를 시도하도록 했어요. API에서 잘못된 JSON을 처리할 때 400 상태를 반환하도록 했고, API < 1.39에서 기본 주소 풀을 무시하도록 했어요. swagger에 누락된 기본 주소 풀 필드를 추가했어요. awslogs에서 UTF-8 정규화를 한도에 반영했어요. HTTP 오류 응답에서 1MB 이상 읽는 것을 금지했어요. apparmor에서 docker kill의 신호 수신을 허용했어요. overlay2에서 가능하면 index=off를 사용하도록 해서 마운트 시 EBUSY 오류를 수정했어요.

Packaging

docker.service에 docker.socket 요구 사항을 추가했어요. RHEL 계열 배포판에 소켓 활성화를 추가했고, RPM 패키지에 libseccomp 요구 사항을 추가했어요.

Known Issues

18.09.0에서 18.09.1로 업그레이드할 때 Ubuntu에서 containerd가 올바른 버전으로 업그레이드되지 않는 문제가 있어요. 그리고 업그레이드 프로세스에 중요한 변경 사항이 있어서, 제대로 따르지 않으면 Swarm에서 실행 중인 애플리케이션 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

18.09.0

2018-11-08

Important notes about this release

18.09 이전 버전에서는 containerd를 Docker Engine 데몬이 관리했어요. 그런데 18.09부터는 systemd가 containerd를 관리해요. 따라서 docker.service의 systemd 설정에서 마운트 관련 설정(예: MountFlags=slave)을 변경하면 Docker Engine 데몬과 containerd 사이의 상호작용이 깨져서 컨테이너를 시작할 수 없게 돼요. 다음 명령으로 현재 MountFlags 값을 확인할 수 있어요.

$ sudo systemctl show --property=MountFlags docker.service
MountFlags=

만약 이 명령이 MountFlags에 비어 있지 않은 값을 출력한다면 설정을 업데이트하고 docker 서비스를 재시작해야 해요.

New features

API 버전을 1.39로 업데이트했어요. SSH를 이용한 원격 연결을 지원하게 됐어요. Builder API에 prune 옵션을 추가했고, /info 엔드포인트에 'Warnings'를 추가해서 탐지를 데몬으로 옮겼어요. 이제 실험 모드를 활성화하지 않아도 BuildKit 빌드를 실행할 수 있어요. BuildKit은 daemon.json의 옵션으로 구성할 수 있어요. BuildKit 사용 시 --secret 플래그로 빌드 타임 시크릿을 지원하고, SSH 에이전트 소켓 포워더(docker build --ssh $SSHMOUNTID=$SSH_AUTH_SOCK)도 지원해요. Windows에서 ADDCOPY 명령에 --chown 플래그를 지원하게 됐어요. BuildKit 빌드 캐시를 정리하는 builder prune 하위 명령을 추가했어요. BuildKit 빌드 캐시에 대한 가비지 컬렉션 정책을 구성할 수 있게 됐고, BuildKit 사용 시 docker build --pull ...을 지원해요. 또한 BuildKit에서 'registry-mirrors'와 'insecure-registries'를 지원하고, net 모드와 bridge를 활성화했어요. containerd 위에서 특권 컨테이너로 실행되는 Docker Engine의 수명 주기를 관리하고 Docker Engine Enterprise로 업그레이드할 수 있는 docker engine 하위 명령을 추가했어요. docker info 출력에 제품 라이선스를 노출하고, 데몬이 생성한 경고도 표시하도록 했어요. 'local' 로그 드라이버를 추가했고, Amazon CloudWatch에 awslogs-endpoint 로깅 옵션을 추가했어요. 전역 기본 주소 풀을 지원하게 됐고, containerd 로그 레벨을 dockerd와 동일하게 설정했어요. cri-containerd에 대한 구성 옵션을 추가했고, containerd 클라이언트를 v1.2.0-rc.1로 업데이트했어요. POST /session 엔드포인트를 실험 모드에서 정식으로 옮겼어요.

Improvements

/info 응답에서 '<unknown>'을 반환하지 않도록 했어요. BuildKit에서 --console=[auto,false,true]--progress=[auto,plain,tty]로 변경했어요. BuildKit의 ExportedProduct 변수를 설정해서 향후 유용한 오류를 표시할 수 있게 했어요. 이 옵션을 지원하지 않는 데몬에 연결하면 --data-path-addr 플래그를 숨기도록 했어요. BuildKit이 활성화된 경우에만 BuildKit 관련 플래그를 표시해요. 버전 출력 정렬을 개선했고, 플러그인 이름과 네트워크를 자연스러운 순서로 정렬하도록 했어요. bash와 zsh 완성 스크립트를 업데이트했어요. 로그 레벨을 containerd로 전달하도록 했어요. 동서 방향 오버레이 로드 밸런싱에서 직접 서버 반환(DSR)을 사용하도록 했어요. Builder에서 buildkit 사용 시 브리지 네트워킹을 임시로 비활성화했어요. 노드 연결이 준비될 때까지 작업 시작을 차단하도록 했어요. 제공된 외부 CA 인증서를 swarm의 외부 CA 객체로 전파하도록 했어요. 지원 플랫폼에서 Ubuntu 14.04 'Trusty Tahr'와 Debian 8 'Jessie'를 제거했어요. containerd와 runc 바이너리에서 'docker-' 접두사를 제거했어요. 'engine', 'cli', 'containerd'를 별도 패키지로 분리하고 containerd를 별도의 systemd 서비스로 실행하도록 했어요. Go 1.10.4로 바이너리를 빌드했고, 버전 문자열에서 -ce 접미사를 제거했어요.

Fixes

BuildKit 상태 요청을 취소하지 않도록 수정했어요. docker build 중 빌드 인자가 누락되어도 오류가 표시되지 않던 문제를 고쳤어요. 8GB 파일을 추가할 때 'unexpected EOF' 오류가 발생하던 문제를 수정했어요. LCOW에서 COPY/ADD 시 플랫폼이 채워지도록 보장했어요. 호스트 포트 범위를 단일 컨테이너 포트에 매핑할 때 발생하던 문제를 수정했어요. trust inspect의 오타 'AdminstrativeKeys'를 수정했어요. 환경 파일 파싱에서 존재하지 않는 변수나 이름 없는 변수를 가져올 때의 문제를 고쳤어요. docker image prune 실행 시 많은 수의 댕글링 이미지가 있을 때 발생할 수 있는 'out of memory exception'을 수정했어요. Windows의 ConEmu와 ConsoleZ에서 파이프 처리를 수정했어요. Windows에서 HNS가 관리하지 않는 Hyper-V 네트워크를 사용할 때 시작 시간이 길어지던 문제를 해결했어요. 설정 파일과 CLI 양쪽에 'runtimes' 옵션이 정의되어 있으면 데몬이 시작되지 않던 문제를 수정했어요. /etc/docker 디렉터리의 권한을 완화해서 docker manifest inspect 사용 시 'permission denied' 오류가 발생하지 않도록 했어요. cpuset-cpuscpuset-mems에 큰 숫자를 사용할 때 발생할 수 있는 서비스 거부 문제를 수정했어요. LCOW에서 docker import--platform을 추가했고, Windows에서 기본적으로 LinuxMetadata를 지원하도록 했어요. 명령줄 길이 제한을 피하기 위해 짧은 컨테이너 경로로 마운트하도록 했고, 빌더가 잘못된 캐시 레이어를 사용하던 문제를 수정했어요. --follow 사용 시 json-log 파일 디스크립터가 누수되던 문제를 고쳤어요. kqueue에서 watcher를 닫을 때 발생할 수 있는 교착 상태를 수정했어요. Windows의 파일 캐싱 문제를 해결하기 위해 폴러 기반 watcher를 사용하도록 했어요. systemd-resolved 환경을 처리해서 네트워킹 레이어에 적절한 resolv.conf를 제공하도록 했어요. TLS 1.2 미만 지원을 제거했어요. Seccomp 기본 프로파일에서 CAP_SYS_NICE와 관련된 syscall을 화이트리스트에 추가했고, syslog syscall을 CAP_SYS_ADMIN 또는 CAP_SYSLOG로 게이트하도록 변경했어요. SELinux가 활성화된 시스템에서 Mounts API로 지정된 로컬 볼륨의 재라벨링 문제를 수정했어요. REST API가 안전하지 않은 연결을 통해 접근 가능할 때 경고를 추가했어요. 시스템 정보에 표시될 때 URL에서 프록시 자격 증명을 마스킹하도록 했어요. btrfs의 마운트 전파 문제를 수정했고, 노드 할당 시 nil 포인터 역참조를 수정했어요.

Known Issues

업그레이드 프로세스에 중요한 변경 사항이 있어요. 제대로 따르지 않으면 업그레이드 중 Swarm에서 실행 중인 애플리케이션의 가용성에 영향을 줄 수 있어요. 이 제약은 18.09 이전 버전에서 18.09 이상으로 업그레이드할 때 모두 적용돼요.

또한 boot2docker ISO v18.09.0을 사용할 때 가상 머신의 노드에서 연결이 거부되는 문제가 있어요. VirtualBox로 생성한 docker-machine VM에서 Swarm 포트를 게시하면 응답하지 않아요. macOS와 Windows 10에서 docker-machine 0.15와 0.16을 사용할 때 발생해요. docker run -d -p 4000:80 nginx는 호스트 브라우저에서 접근 가능하지만, docker service create -p 5000:80 nginx는 curl/chrome에서 연결이 거부돼요. docker-machine으로 18.09.0 클라우드 VM을 프로비저닝할 때는 이 문제가 나타나지 않아요. 해결 방법으로는 boot2docker에 의존하지 않는 클라우드 VM을 사용하거나, docker run은 영향이 없으니 그대로 사용하거나, Swarm의 경우 VIRTUALBOX_BOOT2DOCKER_URL=https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso로 설정하면 돼요. 이 문제는 18.09.1에서 해결됐어요.

Deprecation Notices

Docker는 Device Mapper를 스토리지 드라이버로 지원하는 것을 더 이상 권장하지 않아요. 당분간은 계속 지원하지만, 향후 릴리스에서 제거될 예정이에요. 이제 Overlay2 스토리지 드라이버가 Docker Engine 구현의 기본값이에요. 더 이상 사용되지 않는 플래그와 API 목록은 deprecation 정보에서 확인할 수 있고, 제거 예정 날짜도 나와 있어요.

End of Life Notification

이 릴리스에서는 TLS 1.2 미만 지원, Ubuntu 14.04 'Trusty Tahr', Debian 8 'Jessie'에 대한 지원도 제거했어요.

더 알아보기 (Learn more)