Docker in Docker(dind)를 통해 모든 항목을 Sandbox화하면 편리합니다.
motivation
요즘은 거의 모든 프로젝트가 Docker나 Kubernetes 같은 컨테이너로 개발되고 있어요.
특히 프리랜서는 여러 가지 업무가 Docker 호스트의 컨테이너로 걸려 있다
큰 문제는 없었지만.
우선, 조개 껍질 등을 총괄한 것은 다음과 같다.
https://github.com/YukiMiyatake/util/tree/master/environment/docker_sandbox
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker dind 3c34f16aeaa0 19 hours ago 505MB
<none> <none> 31f248f7f9b6 19 hours ago 658MB
kgb_secret_project latest bc7c96ecde80 3 days ago 814MB
cia_secret_project latest 4b7b8690eb05 6 days ago 2.89GB
docker dind-alpine a4b37e66ffc7 7 days ago 230MB
rothschild_report latest 10 days ago 3.09GB
golang latest 54e71dcafb7c 2 weeks ago 803MB
ubuntu 16.04 5f2bf26e3524 3 weeks ago 123MB
ubuntu 18.04 775349758637 3 weeks ago 64.2MB
buildpack-deps stretch 81af74c34933 5 weeks ago 835MB
golang 1.12.7 be63d15101cb 4 months ago 814MB
docker 1.13.0-dind 7d6978320b24 2 years ago 99MB
이런 정보가 노출되면 생명이 위험해!!물론 사건마다 컴퓨터를 교체하고 많이 시작하고 사용자를 전환하며 사건마다 VM을 만들고 Docker
피하다
예를 들어 Windows에서 Hyper-V를 사용할 경우 VM을 만들 수 없습니다.
그러므로 현실의 회피 수단으로서
딘드 생각났어.
이른바
Docker는 OS를 거의 조작할 수 있지만 일부 조작은 할 수 없습니다
일반적으로 Docker는 컨테이너에서 Docker를 시작할 수 없습니다.$ docker run -it ubuntu:18.04 bash
root@d3da654e2a5f:/# docker
bash: docker: command not found
컨테이너 내에서 Docker를 사용하는 방법은 두 가지가 있는데 그것이 바로 dind와 dood이다
일반 Docker
호스트 PC의 Docker에서 모든 이미지 시작하기
모든 프로젝트의 컨테이너가 같은 Docker에 존재합니다 (형제자매)
불편하죠?
dind
항목마다 dind Docker를 시작해야 합니다 (privileged 로고가 있어야 합니다!)
각 항목의 Docker에 로그인하여 Docker 이미지를 만듭니다.
Docker 이미지는 친자관계에서 나오는 거예요.
$ docker run -it --privileged -v $('pwd'):/volume -w /volume -d docker:dind
root@e394f7876063:/volume# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@e394f7876063:/volume# docker run -it busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
0f8c40e1270f: Pull complete
Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
Status: Downloaded newer image for busybox:latest
/ # exit
root@e394f7876063:/volume# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@e394f7876063:/volume# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 020584afccce 3 weeks ago 1.22MB
다른 항목의 컨테이너가 보이지 않아 영향을 주지 않습니다
모든 프로젝트의 Sandbox 환경에서 완전히 성공했습니다!
dood
Docker Out of Docker
dind Docker를 시작합니다.
provilegid 로고, docker를 세울 수 없습니다.Volume을 사용하여 soc 파일 마운트
로그인 항목의 Docker 컨테이너, docker 명령을 사용하여 호스트 연결
여기에 만들어진 용기는 본체에서 만들어집니다 = 형제 관계
$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker:dind bash
root@b49f798ae8ca:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b49f798ae8ca docker:dind "bash" 6 seconds ago Up 5 seconds crazy_goodall
root@b49f798ae8ca:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker dind 3c34f16aeaa0 24 hours ago 505MB
<none> <none> 31f248f7f9b6 24 hours ago 658MB
ubuntu 16.04 5f2bf26e3524 3 weeks ago 123MB
ubuntu 18.04 775349758637 3 weeks ago 64.2MB
buildpack-deps stretch 81af74c34933 5 weeks ago 835MB
golang 1.12.7 be63d15101cb 4 months ago 814MB
docker 1.13.0-dind 7d6978320b24 2 years ago 99MB
(ホストのDockerイメージが見えている)
root@b49f798ae8ca:/# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
0f8c40e1270f: Pull complete
Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
root@b49f798ae8ca:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker dind 3c34f16aeaa0 24 hours ago 505MB
<none> <none> 31f248f7f9b6 24 hours ago 658MB
ubuntu 16.04 5f2bf26e3524 3 weeks ago 123MB
ubuntu 18.04 775349758637 3 weeks ago 64.2MB
busybox latest 020584afccce 3 weeks ago 1.22MB
buildpack-deps stretch 81af74c34933 5 weeks ago 835MB
golang 1.12.7 be63d15101cb 4 months ago 814MB
docker 1.13.0-dind 7d6978320b24 2 years ago 99MB
(ホストのDockerイメージに追加された)
일반적인 Docker 시동과 달리 Docker 컨테이너에서 형제 관계를 제작하고 이용할 수 있는 컨테이너
프로젝트마다 Docker 이미지가 분리되지 않기 때문에 이번 목적과 일치하지 않습니다
Dood은 CI, 상황에 따라 용기를 파괴하는 서비스에 적합합니다(일반적으로 Dind를 사용하지 않아도 됩니다)
자유자재로 운용하다.
먼저 Docker in Docker 개발자에 따라
딘드 쓸 때 진짜 딘드가 필요한가요? 다시 생각해볼게요.
대부분의 일은 od로 할 수 있어요.
dind는 Docker의 개발 용도입니다.
그래서 아마 제가 사용하는 딘드는 개발자도 사용하지 말라고 했을 거예요.
재미있어요. 한번 해볼게요.
실제 사용 방법
위에 스크립트 추가 등 더 좋은 환경 구축 중
두 번째 이미지 만들기
각 항목에 대한 dind Docker 이미지 만들기
딘드의 공식 이미지는 알피니지만 개발용 호스트로 사용하기 힘들다
ubuntu든 arch든 좋은 인상을 줘야 돼요.
위에 있는 Docker file과 wrapdocker는 좋아하는 OS의 이미지를 만들 수 있습니다.
용기의 제작
환경 변수로 용기 이름을 지정하려면direnv를 사용하십시오docker run -it --privileged --name $PROJECT_GROUP -v $('pwd'):/volume -w /volume -d docker:dind
docer_run.sh에 용기의 제작 예가 적혀 있어요.
디렉터리를 마운트하는 것은 일반적으로 매우 편리하다
스크립트에 dind 이미지를 직접 사용했습니다. 프로젝트에 사용할 도구와 언어 등을 Dokerfile로 쓰면 편리합니다
컨테이너의 실행
docker start $PROJECT_GROUP
docker exec -it $PROJECT_GROUP bash
컨테이너에 들어가다
평소대로 컨테이너를 만들어 개발하다
기타
프로젝트가 끝났을 때 부모님의 용기를 삭제하면 모두 깨끗해진다!
하지만 dind는 자동으로 volume를 만들기 때문에 volume도 삭제하세요(volum과 용기를 모두 클린으로 만드는 스크립트를 만들고 싶어요)
그리고 항상commiit가 용기를 인상적으로 구우면 안심이 돼요.
장점
모든 항목의 디렉터리와 용기는 분리되어 있기 때문에 만일 발생하는 상황을 걱정할 필요가 없다
만일 다른 항목의 수정의 영향을 받지 않는다면
폴더를 항목별로 Sandbox화할 수도 있기 때문에 이상한 일이 일어나기 어렵다
화면 캡처를 표시할 때 다른 서비스의 용기 목록을 표시하지 않습니다
여러 개의 마이크로 서비스 등 용기가 있는 서비스에서 모든 용기를 끄는 것은 매우 간단하다
결점
각 Sandbox는 OS 및 DB의 이미지를 Pull하므로 스토리지 용량 사용
Privilege 플래그가 필요합니다.
Reference
이 문제에 관하여(Docker in Docker(dind)를 통해 모든 항목을 Sandbox화하면 편리합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YukiMiyatake/items/2e68aa69a5ca3921d55d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ docker run -it ubuntu:18.04 bash
root@d3da654e2a5f:/# docker
bash: docker: command not found
$ docker run -it --privileged -v $('pwd'):/volume -w /volume -d docker:dind
root@e394f7876063:/volume# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@e394f7876063:/volume# docker run -it busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
0f8c40e1270f: Pull complete
Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
Status: Downloaded newer image for busybox:latest
/ # exit
root@e394f7876063:/volume# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@e394f7876063:/volume# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 020584afccce 3 weeks ago 1.22MB
$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker:dind bash
root@b49f798ae8ca:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b49f798ae8ca docker:dind "bash" 6 seconds ago Up 5 seconds crazy_goodall
root@b49f798ae8ca:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker dind 3c34f16aeaa0 24 hours ago 505MB
<none> <none> 31f248f7f9b6 24 hours ago 658MB
ubuntu 16.04 5f2bf26e3524 3 weeks ago 123MB
ubuntu 18.04 775349758637 3 weeks ago 64.2MB
buildpack-deps stretch 81af74c34933 5 weeks ago 835MB
golang 1.12.7 be63d15101cb 4 months ago 814MB
docker 1.13.0-dind 7d6978320b24 2 years ago 99MB
(ホストのDockerイメージが見えている)
root@b49f798ae8ca:/# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
0f8c40e1270f: Pull complete
Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
root@b49f798ae8ca:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker dind 3c34f16aeaa0 24 hours ago 505MB
<none> <none> 31f248f7f9b6 24 hours ago 658MB
ubuntu 16.04 5f2bf26e3524 3 weeks ago 123MB
ubuntu 18.04 775349758637 3 weeks ago 64.2MB
busybox latest 020584afccce 3 weeks ago 1.22MB
buildpack-deps stretch 81af74c34933 5 weeks ago 835MB
golang 1.12.7 be63d15101cb 4 months ago 814MB
docker 1.13.0-dind 7d6978320b24 2 years ago 99MB
(ホストのDockerイメージに追加された)
먼저 Docker in Docker 개발자에 따라
딘드 쓸 때 진짜 딘드가 필요한가요? 다시 생각해볼게요.
대부분의 일은 od로 할 수 있어요.
dind는 Docker의 개발 용도입니다.
그래서 아마 제가 사용하는 딘드는 개발자도 사용하지 말라고 했을 거예요.
재미있어요. 한번 해볼게요.
실제 사용 방법
위에 스크립트 추가 등 더 좋은 환경 구축 중
두 번째 이미지 만들기
각 항목에 대한 dind Docker 이미지 만들기
딘드의 공식 이미지는 알피니지만 개발용 호스트로 사용하기 힘들다
ubuntu든 arch든 좋은 인상을 줘야 돼요.
위에 있는 Docker file과 wrapdocker는 좋아하는 OS의 이미지를 만들 수 있습니다.
용기의 제작
환경 변수로 용기 이름을 지정하려면direnv를 사용하십시오
docker run -it --privileged --name $PROJECT_GROUP -v $('pwd'):/volume -w /volume -d docker:dind
docer_run.sh에 용기의 제작 예가 적혀 있어요.디렉터리를 마운트하는 것은 일반적으로 매우 편리하다
스크립트에 dind 이미지를 직접 사용했습니다. 프로젝트에 사용할 도구와 언어 등을 Dokerfile로 쓰면 편리합니다
컨테이너의 실행
docker start $PROJECT_GROUP
docker exec -it $PROJECT_GROUP bash
컨테이너에 들어가다평소대로 컨테이너를 만들어 개발하다
기타
프로젝트가 끝났을 때 부모님의 용기를 삭제하면 모두 깨끗해진다!
하지만 dind는 자동으로 volume를 만들기 때문에 volume도 삭제하세요(volum과 용기를 모두 클린으로 만드는 스크립트를 만들고 싶어요)
그리고 항상commiit가 용기를 인상적으로 구우면 안심이 돼요.
장점
모든 항목의 디렉터리와 용기는 분리되어 있기 때문에 만일 발생하는 상황을 걱정할 필요가 없다
만일 다른 항목의 수정의 영향을 받지 않는다면
폴더를 항목별로 Sandbox화할 수도 있기 때문에 이상한 일이 일어나기 어렵다
화면 캡처를 표시할 때 다른 서비스의 용기 목록을 표시하지 않습니다
여러 개의 마이크로 서비스 등 용기가 있는 서비스에서 모든 용기를 끄는 것은 매우 간단하다
결점
각 Sandbox는 OS 및 DB의 이미지를 Pull하므로 스토리지 용량 사용
Privilege 플래그가 필요합니다.
Reference
이 문제에 관하여(Docker in Docker(dind)를 통해 모든 항목을 Sandbox화하면 편리합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YukiMiyatake/items/2e68aa69a5ca3921d55d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)