RHEL 환경의 원시 "가상화"를 수행하고 싶습니다. 이는 하드코어 경로가 예를 들어 다음을 가리키는 여러 바이너리를 실행해야 하기 때문입니다. /etc/conf
목차. 실제로 동일한 디렉터리에 배치해야 하는 서로 다른 구성이 충돌하는 여러 가지 바이너리가 있습니다.
따라서 conf를 읽는 애플리케이션 A를 실행하고 싶고 /etc/conf
, conf를 읽는 애플리케이션 B를 실행하고 싶지만 실제로는 현재 항목을 "변경"하는 스크립트를 제공하여 현재 항목을 읽고 있다고 /mnt/etc/conf
"믿습니다". 읽을 디렉터리 위치를 제공하여 하나를 선택합니다 ./etc/conf
/
/mnt
이런 유형의 작업에는 fakechroot를 사용하여 수행할 수 있다고 생각했지만 더 이상 사용할 수 없습니다. 그렇죠? 이 기능을 제공하는 더 좋은 방법이 있습니까?
답변1
도커 컨테이너를 사용해 볼 수 있습니다. 가장 쉬운 방법(구문을 배울 필요가 없음 Dockerfile
)은 docker를 설치한 다음 docker run -it centos:<version>
(이 유틸리티는 RHEL 버전용으로 작성됨) 컨테이너 내부에서 모든 바이너리와 실행 파일을 설정하는 것입니다. 필요한 경우 셸/컨테이너를 종료하고 docker ps
컨테이너 ID 찾기를 사용하세요.
예를 들어:
[root@website ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f454cc1c71 centos:latest "/bin/bash" About an hour ago Up About an hour sick_davinci
그런 다음 다음 docker commit
을 사용하여 이미지를 저장합니다.
docker commit 42f454cc1c71 baseImage
firstUtil
그런 다음 (또는 무엇이든) 실행하십시오 .
docker run -it --rm -v /srv/configs/firstUtil:/etc/conf baseImage /path/to/firstUtil
그런 다음 다음을 실행하십시오 secondUtil
.
docker run -it --rm -v /srv/configs/secondUtil:/etc/conf baseImage /path/to/secondUtil
기타 등등
위의 각 docker run
명령에서는 설정한 이미지를 기반으로 컨테이너에서 명령을 실행한 다음, --rm
해당 명령이 종료되면 컨테이너가 제거됩니다. 각 명령 실행은 컨테이너에서 처음으로 실행되는 것이기 때문에 --rm
유틸리티가 뭔가를 수정하지 않는 한 유틸리티를 한 번 실행해도 다음 실행에 영향을 미치지 않도록 하는 것이 유용합니다 ./etc/conf
docker run
이러한 명령을 스크립트나 셸 별칭에 넣을 수 있습니다 (입력이 더 쉬운 경우).
기본적으로 Docker는 호스트의 방화벽 및 라우팅 테이블도 수정하려고 시도합니다.