1

나는 도커 컨테이너 (docker network, docker link) 사이의 통신에 관한 많은 기사를 발견했다. 컨테이너를 실행하고 중지하는 것과 같이 다른 컨테이너에서 컨테이너를 제어하는 ​​것이 좋은 방법인지는 잘 모릅니다. 유일한 방법은 호스트에서 나머지 API를 사용하는 것입니다, 당신은 그것을 설명하는 좋은 기사가있어? 나머지 api에 관하여 나는 그것을 설명하는 너무 많은 기사를 발견했다, 그들의 대부분은 구식이다.다른 컨테이너에서 콘트롤하기

정확하게 말해서, 내장 코드를 실행하는 두 번째 컨테이너에 대해 다른 폴더에 빌드를 이동하고 이동시키는 jenkins 컨테이너가 있습니다. 근본적으로, 움직이기 전에 나는 컨테이너를 멈추고 그것을 다시 시작한 후에 원한다.

도움 주셔서 감사합니다.

+0

예는 다른 하나로부터 용기를 제어하는 ​​신 관행이 존재한다. 예제로 [portainer] (https://github.com/portainer/portainer)를 보겠습니다. 다른 컨테이너를 제어하고 관리하는 것은 app (또는 container)입니다. 소스 코드를보고 정확히 완료되었는지 확인할 수 있습니다. –

답변

3

컨테이너를 실행 및 중지하는 것과 같이 컨테이너를 제어하는 ​​것이 더 좋은지 알고 싶습니다.

"충분히 좋은"연습이며 많은 사람들이이 작업을 수행합니다. CoreOS의 /usr/bin/toolbox은 기본적으로 RancherOS와 같은 몇 가지 기능을 가지고 있습니다.

유일한 방법은 호스트의 나머지 API를 사용하는 것입니다 당신은 그것을 설명하는 좋은 기사가 있습니까?

아니요, 아닙니다. 도커의 소켓을 다른 도커 컨테이너에 마운트 한 다음 호스트에서 도커 명령을 컨테이너 내부에서 직접 실행할 수 있습니다. 이러한 행위는 "docker in docker", "dind", "nested containers"등으로 불립니다. 기존 컨테이너에서 docker (docker engine/daemon + client)의 완전한 버전을 실행하는 변형이 있습니다. 네가 여기서하고 싶은게 아니야.

요점은 일반적으로 도커 유닉스 소켓 - /var/run/docker.sock이 "제어 컨테이너", 즉 도커 데몬을 제어하는 ​​데 사용할 컨테이너 내에 노출/마운트되어있는 것과 같습니다. 그런 다음 docker 명령 줄 클라이언트를 설치하고 정상적으로 docker 명령을 사용합니다. docker ps, docker start/stop/run은 모두 예상대로 작동해야합니다.

[1]을 설정하는 것은 간단하지 않고 관련 보안 문제가 있지만 [2] [3], 많은 사람들이이를 수행하고 있습니다. 여기

당신의 참조입니다 :

[1] https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/, Solution 아래 섹션을 참조하십시오, 그 전에 모든 것을 당신이 을 수행 할 수 없습니다해야하는 것이다.

[2] https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container.html

[3] https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/

+0

좋은 설명을 해 주셔서 감사합니다. 그것은 혼자서 도커를 배우는 POC입니다. 그래서 나는 당신의 권고로서 안전을 존중할 것입니다. 도와 주셔서 감사합니다. 이것으로 jenkins docker plugin을 Shell이 ​​아닌 직접 사용할 것입니다. – Pred05

관련 문제