docker RUN
가 Dockerfile에서 명령을 성공적으로 실행할 때마다 이미지 파일 시스템의 새 레이어 가 커밋됩니다. 편리하게 해당 레이어 ID를 이미지로 사용하여 새 컨테이너를 시작할 수 있습니다.
다음 Dockerfile을 가져옵니다.
FROM busybox
RUN echo 'foo' > /tmp/foo.txt
RUN echo 'bar' >> /tmp/foo.txt
그리고 그것을 빌드하십시오 :
$ docker build -t so-2622957 .
Sending build context to Docker daemon 47.62 kB
Step 1/3 : FROM busybox
---> 00f017a8c2a6
Step 2/3 : RUN echo 'foo' > /tmp/foo.txt
---> Running in 4dbd01ebf27f
---> 044e1532c690
Removing intermediate container 4dbd01ebf27f
Step 3/3 : RUN echo 'bar' >> /tmp/foo.txt
---> Running in 74d81cb9d2b1
---> 5bd8172529c1
Removing intermediate container 74d81cb9d2b1
Successfully built 5bd8172529c1
당신은 지금부터 새 컨테이너를 시작할 수 있습니다 00f017a8c2a6
, 044e1532c690
그리고 5bd8172529c1
:
$ docker run --rm 00f017a8c2a6 cat /tmp/foo.txt
cat: /tmp/foo.txt: No such file or directory
$ docker run --rm 044e1532c690 cat /tmp/foo.txt
foo
$ docker run --rm 5bd8172529c1 cat /tmp/foo.txt
foo
bar
물론 파일 시스템을 탐색하고 명령을 시도하기 위해 쉘을 시작하려고 할 수 있습니다.
$ docker run --rm -it 044e1532c690 sh
/ # ls -l /tmp
total 4
-rw-r--r-- 1 root root 4 Mar 9 19:09 foo.txt
/ # cat /tmp/foo.txt
foo
Dockerfile 명령 중 하나가 실패하면 이전 계층 의 ID 를 찾아 해당 ID에서 작성된 컨테이너에서 쉘을 실행해야합니다.
docker run --rm -it <id_last_working_layer> bash -il
컨테이너에 들어가면 :
- 실패한 명령을 시도하고 문제를 재현하십시오.
- 그런 다음 명령을 수정하고 테스트하십시오.
- 마지막으로 고정 명령으로 Dockerfile을 업데이트하십시오.
마지막 작업 계층에서 작업하는 대신 실패한 실제 계층에서 실제로 실험해야하는 경우 Drew의 답변을 참조하십시오 .
/var/lib/docker/aufs/diff/3afa404e[...]/.cpanm
이것들은 Docker의 내부에 관한 것입니다. 나는 그들을 엉망으로 만들지 않을 것입니다