대체 컨테이너 런타임
대체 컨테이너 런타임 (Alternative container runtimes)
Docker Engine은 컨테이너 생성, 시작, 중지를 포함한 컨테이너 수명주기 관리를 위해 containerd를 사용해요. 기본적으로 containerd는 runc를 컨테이너 런타임으로 사용해요.
출처: 문서
본문
어떤 런타임을 사용할 수 있나요? (What runtimes can I use?)
containerd shim API를 구현하는 어떤 런타임이든 사용할 수 있어요. 그런 런타임에는 containerd shim이 함께 제공되며, 추가 구성 없이 사용할 수 있어요. Use containerd shims 참고.
자체 containerd shim을 구현하는 런타임의 예시는:
runc의 드롭인 교체(drop-in replacement)로 설계된 런타임도 사용할 수 있어요. 그런 런타임은 런타임 바이너리를 호출하기 위해 runc containerd shim에 의존해요. 이런 런타임은 데몬 구성에 수동으로 등록해야 해요.
youki는 runc 드롭인 교체로 기능할 수 있는 런타임의 한 예시예요. 설정을 설명하는 youki 예시를 참고하세요.
containerd shim 사용 (Use containerd shims)
containerd shim을 사용하면 Docker 데몬의 구성을 바꾸지 않고도 대체 런타임을 사용할 수 있어요. containerd shim을 사용하려면 Docker 데몬이 실행되는 시스템의 PATH에 shim 바이너리를 설치해요.
docker run과 함께 shim을 사용하려면 --runtime 플래그의 값으로 런타임의 정규화된 이름을 지정해요:
$ docker run --runtime io.containerd.kata.v2 hello-world
PATH에 설치하지 않고 containerd shim 사용 (Use a containerd shim without installing on PATH)
PATH에 설치하지 않고 shim을 사용할 수 있는데, 이 경우 데몬 구성에 다음과 같이 shim을 등록해야 해요:
{
"runtimes": {
"foo": {
"runtimeType": "/path/to/containerd-shim-foobar-v1"
}
}
}
shim을 사용하려면 할당한 이름을 지정해요:
$ docker run --runtime foo hello-world
shim 구성 (Configure shims)
containerd shim에 대한 추가 구성을 전달해야 한다면 데몬 구성 파일의 runtimes 옵션을 사용할 수 있어요.
- 구성하려는 shim에 대한
runtimes항목을 추가해 데몬 구성 파일을 편집해요.runtimeType키에 런타임의 정규화된 이름 지정options키 아래에 런타임 구성 추가
{
"runtimes": {
"gvisor": {
"runtimeType": "io.containerd.runsc.v1",
"options": {
"TypeUrl": "io.containerd.runsc.v1.options",
"ConfigPath": "/etc/containerd/runsc.toml"
}
}
}
}
- 데몬의 구성을 리로드해요.
# systemctl reload docker
docker run의--runtime플래그로 사용자 지정 런타임을 사용해요.
$ docker run --runtime gvisor hello-world
containerd shim의 구성 옵션에 대한 자세한 내용은 Configure containerd shims를 참고하세요.
예시 (Examples)
다음 예시는 Docker Engine과 함께 대체 컨테이너 런타임을 설정하고 사용하는 방법을 보여줘요.
- youki
- Wasmtime
youki
youki는 Rust로 작성된 컨테이너 런타임이에요. youki는 runc보다 빠르고 메모리를 덜 사용한다고 주장하며, 리소스가 제한된 환경에 좋은 선택이에요.
youki는 runc의 드롭인 교체로 기능하며, 런타임 바이너리를 호출할 때 runc shim에 의존한다는 뜻이에요. runc 교체로 동작하는 런타임을 등록할 때는 런타임 실행 파일의 경로와 선택적으로 런타임 인자 집합을 구성해요. 자세한 내용은 Configure runc drop-in replacements를 참고하세요.
youki를 컨테이너 런타임으로 추가하려면:
-
youki와 그 의존성을 설치해요. 설치 지침은 공식 설정 가이드를 참고하세요.
-
기본적으로
/etc/docker/daemon.json에 있는 Docker 데몬 구성 파일을 편집해 youki를 Docker용 런타임으로 등록해요.path키는 youki를 설치한 위치의 경로를 지정해야 해요.
# cat > /etc/docker/daemon.json <<EOF
{
"runtimes": {
"youki": {
"path": "/usr/local/bin/youki"
}
}
}
EOF
- 데몬의 구성을 리로드해요.
# systemctl reload docker
이제 youki를 런타임으로 사용하는 컨테이너를 실행할 수 있어요.
$ docker run --rm --runtime youki hello-world
Wasmtime
사용 가능 여부: Experimental
Wasmtime은 Bytecode Alliance 프로젝트이자, Wasm 컨테이너를 실행할 수 있게 해주는 Wasm 런타임이에요. Docker로 Wasm 컨테이너를 실행하면 두 겹의 보안을 얻을 수 있어요. 컨테이너 격리의 모든 이점과 함께 Wasm 런타임 환경이 제공하는 추가 샌드박싱을 얻을 수 있어요.
Wasmtime을 컨테이너 런타임으로 추가하려면 다음 단계를 따라요:
- 데몬 구성 파일에서 containerd image store 기능을 켜요.
{
"features": {
"containerd-snapshotter": true
}
}
- Docker 데몬을 재시작해요.
# systemctl restart docker
PATH에 Wasmtime containerd shim을 설치해요. 다음 Dockerfile 명령은 Wasmtime 바이너리를 소스에서 빌드해./containerd-shim-wasmtime-v1로 내보내요.
$ docker build --output . - <<EOF
FROM rust:latest as build
RUN cargo install \
--git https://github.com/containerd/runwasi.git \
--bin containerd-shim-wasmtime-v1 \
--root /out \
containerd-shim-wasmtime
FROM scratch
COPY --from=build /out/bin /
EOF
바이너리를 PATH의 디렉토리에 넣어요.
$ mv ./containerd-shim-wasmtime-v1 /usr/local/bin
이제 Wasmtime을 런타임으로 사용하는 컨테이너를 실행할 수 있어요.
$ docker run --rm \
--runtime io.containerd.wasmtime.v1 \
--platform wasi/wasm32 \
michaelirwin244/wasm-example
관련 정보 (Related information)
- 컨테이너 런타임의 구성 옵션에 대해 더 알아보려면 Configure container runtimes를 참고하세요.
- 데몬이 기본으로 사용할 런타임을 구성할 수 있어요. Configure the default container runtime 참고.