Explain differences between Dockerfile approach to making container images and the nix approach to making container runtime compatible images, given that this is how you do it in nix:

```
Building and running Docker images — nix.dev documentation
We call the dockerTools.buildImage and pass in some parameters:

a name for our image

the config including the command Cmd that should be run inside the container once the image is started. Here we reference the GNU hello package from nixpkgs and run its executable in the container.

Save this in hello-docker.nix and build it:

$ nix-build hello-docker.nix
these derivations will be built:
 /nix/store/qpgdp0qpd8ddi1ld72w02zkmm7n87b92-docker-layer-hello-docker.drv
 /nix/store/m4xyfyviwbi38sfplq3xx54j6k7mccfb-runtime-deps.drv
 /nix/store/v0bvy9qxa79izc7s03fhpq5nqs2h4sr5-docker-image-hello-docker.tar.gz.drv
warning: unknown setting 'experimental-features'
building '/nix/store/qpgdp0qpd8ddi1ld72w02zkmm7n87b92-docker-layer-hello-docker.drv'...
No contents to add to layer.
Packing layer...
Computing layer checksum...
Finished building layer 'hello-docker'
building '/nix/store/m4xyfyviwbi38sfplq3xx54j6k7mccfb-runtime-deps.drv'...
building '/nix/store/v0bvy9qxa79izc7s03fhpq5nqs2h4sr5-docker-image-hello-docker.tar.gz.drv'...
Adding layer...
tar: Removing leading `/' from member names
Adding meta...
Cooking the image...
Finished.
/nix/store/y74sb4nrhxr975xs7h83izgm8z75x5fc-docker-image-hello-docker.tar.gz
The image tag (y74sb4nrhxr975xs7h83izgm8z75x5fc) refers to the Nix build hash and makes sure that the Docker image corresponds to our Nix build. The store path in the last line of the output references the Docker image.

Run the container
To work with the container, load this image into Docker’s image registry from the default result symlink created by nix-build:

$ docker load < result
Loaded image: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc
You can also use the store path to load the image in order to avoid depending on the presence of result:

$ docker load < /nix/store/y74sb4nrhxr975xs7h83izgm8z75x5fc-docker-image-hello-docker.tar.gz
Loaded image: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc
Even more conveniently, you can do everything in one command. The advantage of this approach is that nix-build will rebuild the image if there are any changes and pass the new store path to docker load:

$ docker load < $(nix-build hello-docker.nix)
Loaded image: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc
Now that you have loaded the image into Docker, you can run it:

$ docker run -t hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc
Hello, world!
Working with Docker images
A general introduction to working with Docker images is not part of this tutorial. The official Docker documentation is a much better place for that.

Note that when you build your Docker images with Nix, you will probably not write a Dockerfile as Nix replaces the Dockerfile functionality within the Docker ecosystem. Nonetheless, understanding the anatomy of a Dockerfile may still be useful to understand how Nix replaces each of its functions. Using the Docker CLI, Docker Compose, Docker Swarm or Docker Hub on the other hand may still be relevant, depending on your use case.

Next steps
More details on how to use dockerTools can be found in the reference documentation.

You might like to browse through more examples of Docker images built with Nix.

Take a look at Arion, a docker-compose wrapper with first-class support for Nix.

Build docker images on a CI with Github Actions.
```
컨테이너 이미지를 만드는 도커파일 접근 방식과 컨테이너 런타임 호환 이미지를 만드는 nix 접근 방식의 명백한 차이점을 설명합니다:```Docker 이미지 빌드 및 실행 - nix.dev 문서dockerTools.buildImage를 호출하고 몇 가지 매개변수를 전달합니다:이미지의 이름이미지가 시작되면 컨테이너 내부에서 실행해야 하는 명령 Cmd를 포함한 구성. 여기서는 nixpkgs의 GNU hello 패키지를 참조하고 컨테이너에서 해당 실행 파일을 실행합니다.이를 hello-docker.nix에 저장하고 빌드합니다:nix-build hello-docker.nix다음과 같이 빌드됩니다: /nix/store/qpgdp0qpd8ddi1ld72w02zkmm7n87b92-docker-layer-hello-docker.drv /nix/store/m4xyfyviwbi38sfplq3xx54j6k7mccfb-runtime-deps.drv /nix/store/v0bvy9qxa79izc7s03fhpq5nqs2h4sr5-docker-image-hello-docker.tar.gz.drv경고: 알 수 없는 설정 '실험적 기능'빌드 '/nix/store/qpgdp0qpd8ddi1ld72w02zkmm7n87b92-docker-layer-hello-docker.drv'...레이어에 추가할 콘텐츠가 없습니다.패킹 레이어...레이어 체크섬 계산 중...레이어 'hello-docker' 빌드 완료빌드하는 중 '/nix/store/m4xyfyviwbi38sfplq3xx54j6k7mccfb-runtime-deps.drv'...빌드 '/nix/store/v0bvy9qxa79izc7s03fhpq5nqs2h4sr5-docker-image-hello-docker.tar.gz.drv'...레이어 추가 중...tar: 멤버 이름에서 선행 `/' 제거하기메타 추가하기...이미지 쿠킹 중...Finished./nix/store/y74sb4nrhxr975xs7h83izgm8z75x5fc-docker-image-hello-docker.tar.gz이미지 태그(y74sb4nrhxr975xs7h83izgm8z75x5fc)는 Nix 빌드 해시를 참조하며 Docker 이미지가 Nix 빌드에 해당하는지 확인합니다. 출력의 마지막 줄에 있는 저장 경로가 Docker 이미지를 참조합니다.컨테이너 실행컨테이너로 작업하려면 nix-build로 생성된 기본 결과 심볼 링크에서 이 이미지를 Docker의 이미지 레지스트리로 로드합니다:$ docker load < 결과로드된 이미지: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc결과의 존재 여부에 따라 달라지는 것을 피하기 위해 저장 경로를 사용하여 이미지를 로드할 수도 있습니다:$ docker load < /nix/store/y74sb4nrhxr975xs7h83izgm8z75x5fc-docker-image-hello-docker.tar.gz로드된 이미지: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc더 편리하게는 하나의 명령으로 모든 작업을 수행할 수 있습니다. 이 접근 방식의 장점은 변경 사항이 있는 경우 nix-build가 이미지를 다시 빌드하고 새 저장소 경로를 docker load에 전달한다는 것입니다:$ docker load < $(nix-build hello-docker.nix)로드된 이미지: hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc이제 이미지를 Docker에 로드했으므로 실행할 수 있습니다:$ docker run -t hello-docker:y74sb4nrhxr975xs7h83izgm8z75x5fc안녕하세요, 여러분!Docker 이미지로 작업하기이 튜토리얼에서는 Docker 이미지 작업에 대한 일반적인 소개는 다루지 않습니다. 공식 Docker 문서에서 훨씬 더 자세한 내용을 확인할 수 있습니다.Nix를 사용하여 Docker 이미지를 빌드하는 경우, Nix가 Docker 에코시스템 내의 Docker파일 기능을 대체하므로 Docker파일을 작성하지 않을 수 있습니다. 그럼에도 불구하고 Docker파일의 구조를 이해하면 Nix가 각 기능을 어떻게 대체하는지 이해하는 데 여전히 유용할 수 있습니다. 반면에 사용 사례에 따라 Docker CLI, Docker Compose, Docker Swarm 또는 Docker Hub를 사용하는 것이 여전히 적절할 수 있습니다.다음 단계dockerTools 사용 방법에 대한 자세한 내용은 참조 문서에서 확인할 수 있습니다.Nix로 빌드된 Docker 이미지의 더 많은 예제를 찾아볼 수도 있습니다.Nix를 최고 수준으로 지원하는 도커 컴포즈 래퍼인 Arion을 살펴보세요.Github Actions를 사용하여 CI에 도커 이미지를 빌드하세요.```