컨테이너에서 컨테이너를 조작하다

왜 컨테이너에서 컨테이너를 조작합니까?
"컨테이너에서 컨테이너를 조작하고 싶어!"너는 이렇게 생각해 본 적이 없니?
다음은 제가 개발한 브라우저에서 프로그램을 실행할 수 있는 응용의 구조도입니다.Paiza란입출력처럼.

어?컨테이너(Golang)에서 컨테이너(Python) 방향으로 향하는 화살표.컨테이너(Golang)로 외부 명령을 두드려 정식 파이톤 Image에서 컨테이너를 시작합니다. 파이톤 파일을 실행해 결과를 얻으십시오.
그렇지 않아도 EC2에 Docker를 설치하고 호스트에서 Docker를 시작하는 게 낫지 않을까요?그렇게 생각할지도 몰라요.하지만 필자는 어떻게든 ECS에 전적으로 의뢰하고 싶습니다.EC2에 1부터 설치하지 않아도 되고 디자인도 간단하다고 생각했기 때문이다.(흥미로 Docker에서 Docker를 시작하려는 생각도 있다)
용기에서 용기를 조작하는 방법
Dind(Docker in Docker)와 Dooped(Docker outside of Docker) 두 가지 모드가 있습니다.자세히 한번 봅시다.
DinD(Docker in Docker)
Docker가 설치된 컨테이너를 사용하여 컨테이너 내에서 호스트와 분리하여 Docker 데몬을 이동합니다.
현재 가동 중인 컨테이너를 확인하세요.(이번을 이해할 수 있는 검증은 적어도 하나)
$ docker ps
docker가 설치된 용기를 백엔드에서 실행합니다.
$ docker run --privileged --name dind -d docker:dind
컨테이너에 들어가다.
$ docker exec -it dind sh
시동 중인 컨테이너를 확인하세요.아무것도 안 보일 거야.
$ docker ps
Dind에서 호스트의 Docker 및 다른 Docker를 사용할 수 있습니다.
DooD(Docker outside of Docker)
컨테이너 옆에서 호스트로의docker.sock(/var/run/docker.sock)을 마운트하면 컨테이너의 Docker 명령이 호스트 측면의 Docker 환경에서 실행됩니다.Docker가 설치된 컨테이너를 사용하여 Dind와 동일
아까처럼 시동 중인 컨테이너 확인(적어도 하나는 이번 검증을 이해할 수 있다)
$ docker ps
컨테이너를 가동하여 들어가다.이 때 호스트의 docker입니다.sock을 마운트합니다.
$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker sh
시동 중인 컨테이너를 확인하세요.호스트의 컨테이너 목록을 표시합니다.
$ docker ps
이렇게 하면 DooD에서 호스트 측면의 Docker 환경을 공유할 수 있습니다.
다단계 구성
그러면 컨테이너(Golang)에 Docker를 설치하지 않으면 컨테이너(Python)를 사용할 수 없다.결론적으로 이번에는 다무대 건설을 사용했다.
Dockerfile
FROM golang:latest AS builder

RUN mkdir /go/src/work

WORKDIR /go/src/work

COPY main.go .

RUN CGO_ENABLED=0 GOOS=linux go build main.go

FROM docker:latest

COPY --from=builder /go/src/work/main ./

EXPOSE 10000
경품(컨테이너실 마운트)
이 앱을 만들 때 컨테이너 간 마운트 기술을 사용했기 때문에 필기 대신 용기 간 마운트가 가능하다.샘플은 아래와 같다↓
$ docker run -it --volumes-from code python bash
그러나 여기서 주의해야 할 것은 ECS의 작업 정의에서 결정된 용기 이름이 아닌 것 같아서 용기 이름을 바꾸려면 다음과 같은 방법으로 이름을 변경할 수 있다.
$ docker rename <Container ID> code
참고 문헌

좋은 웹페이지 즐겨찾기