🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

블로그

turborepo는 가지치기가 필요해

서론요즘 핫하고 핫한 모노레포 빌드 시스템이 있습니다. 이름하야 터보레포(turborepo), 무려 Nextjs를 만들고 있는 Vercel에서 제작했습니다.Nextjs를 무진장 사랑하는 저는 반드시 찍어 먹어봐야 되겠다고 생각을 했습니다. 그래서 간단한 앱을 만들어 빌드까지 해보기로 했죠!오늘의 주제는 바로 그 빌드와 관련 있습니다. 재밌는 부분을 찾았거든요!간단하게 말씀드리자면, 터보레포는 가지치기가 필요합니다. 엥?도커는 빠른 최적화를 원해요갑자기 가지치기라니, 이게 무슨 말일까요? 터보레포가 드디어 그 사악한 속을 드러내고 우리의 소중한 코드를 잘라내 버리겠다는 의미일까요? 다행히도 그건 아닙니다.터보레포의 가지치기에 대해 말하기에 앞서 우리는 도커가 어떻게 nodejs 환경에서 이미지를 만들어 내는지 살펴봐야 합니다. => [separator 2/4] RUN pnpm add turbo 17.1s => [installer 2/5] COPY .gitignore .gitignore 0.0s => [separator 3/4] COPY . . 0.4s => [separator 4/4] RUN pnpm turbo prune --scope=api --docker 1.0s => [installer 3/5] COPY --from=separator /app/out/json/ . 0.0s => [installer 4/5] COPY --from=separator /app/out/pnpm-lock.yaml ./pnpm-lock.yaml 0.0s => [installer 5/5] RUN pnpm install 16.1s => [builder 2/4] COPY --from=installer /app . 6.5s => [builder 3/4] COPY --from=separator /app/out/full . 0.0s => [builder 4/4] RUN pnpm turbo run build --filter=api 7.2s => [runner 2/2] COPY --from=builder /app . 7.5s => CACHED [separator 2/4] RUN pnpm add turbo 0.0s => CACHED [separator 3/4] COPY . . 0.0s => CACHED [separator 4/4] RUN pnpm turbo prune --scope=api --docker 0.0s => CACHED [installer 3/5] COPY --from=separator /app/out/json/ . 0.0s => CACHED [installer 4/5] COPY --from=separator /app/out/pnpm-lock.yaml ./pnpm-lock.yaml 0.0s => CACHED [installer 5/5] RUN pnpm install 0.0s => CACHED [builder 2/4] COPY --from=installer /app . 0.0s => CACHED [builder 3/4] COPY --from=separator /app/out/full . 0.0s => CACHED [builder 4/4] RUN pnpm turbo run build --filter=api 0.0s => CACHED [runner 2/2] COPY --from=builder /app . 0.0s도커는 package.json와 락파일(lockfile)을 전의 빌드와 비교해 변화가 있을 때 비로소 패키지를 설치합니다. 변화가 없다면 이전의 캐시된 결과를 그대로 가져다 쓰는 것이죠. 위의 로그가 그 예시 중 하나입니다.첫번째는 package.json이 변경된 후 빌드된 이미지의 로그입니다. 옆의 시간을 확인해 보세요. 두번째는 첫번째 빌드 이후 package.json을 변경하지 않고 빌드한 이미지의 로그입니다. CACHED라고 나와 있는 것이 보이나요? 다시 한 번 시간을 확인해 보세요. 0.0s, 압도적 시간! 바로 도커가 이 전에 캐시된 것을 그대로 가져와 사용했기 때문에 가능했던 일입니다.천방지축 어리둥절 빙글빙글 돌아가는 터포레포 디펜던시이 좋은 방법을 터포레포에서도 사용해야 되겠죠. 그런데요, 문제가 하나 있습니다. 터보레포는 바로 모노레포 빌드 시스템이라는 겁니다!모노레포, 즉 터보레포는 락파일을 전역으로 관리합니다. A, B 워크스페이스가 있을 때 B 워크스페이스에서 디펜던시가 변경된다면 그 사항이 그대로 락파일에 반영되는 것이죠. 이 때 디펜던시가 변경되지 않은 A 워크스페이스를 도커로 빌드한다면요? 아차차, 도커는 락파일이 변경된 것을 보고 새로 디펜던시들을 설치하기 시작합니다. 락파일! 락파일이 도커를 완벽하게 속여 먹인 겁니다!대체 이 문제를 어떻게 해결해야 할까요, 맞습니다. 가지치기가 등장할 시간입니다.가지치기된 모노레포터포레포도 진작에 이 문제를 파악하고 있었습니다:a. 터포레포는 락파일을 전역으로 관리하기 때문에 효율적인 도커 빌드가 불가능하다b. 그럼 빌드할 워크스페이스만 똑때서 락파일을 만든다음 도커에게 주면 되는 거 아닌가a. 헐b. ?이렇게 turbo prune가 탄생합니다. 그 이름에서도 보여지듯이 이 명령어의 기능은 간단합니다. 바로 특정 워크스페이스의 가지치기된 모노레포를 만들어 주는 것이죠!. ├── apps/ │ ├── a-workspace/ // example-package-1만 사용 │ │ ├── package.json │ │ └── src/ │ └── b-workspace/ // example-package-1, 2 둘 다 사용 │ ├── package.json │ └── src/ ├── packages/ │ ├── example-package-1/ │ │ ├── index.ts │ │ └── package.json │ └── example-package-2/ │ ├── index.ts │ └── package.json └── pnpm-lock.yaml예제 앱의 디렉토리 구조입니다. a-workspace는 example-package-1 패키지만 사용하고 있고 a-workspace는 1, 2 둘 다 사용하고 있네요. 그렇다면 turbo prune을 사용해 a-workspace만 빼내봅시다.turbo prune --scope="a-workspace"이 명령어를 실행한다면:. ├── apps/ │ └── a-workspaces/ // example-package-1만 사용 │ ├── package.json │ └── src/ ├── packages/ │ └── example-package-1/ │ ├── index.ts │ └── package.json └── pnpm-lock.yamlA 워크스페이스의 가지치기된 모노레포를 만들어 줍니다. 물론 가지치기된 락파일도 같이요! 이 락파일은 오직 A 워크스페이스의 디펜던시만을 담고 있어 B 워크스페이스의 디펜던시가 변경된다고 하더라도 영향을 받지 않습니다.이 가지치기된 모노레포를 도커로 빌드하게 된다면 더 이상 락파일에 머리를 감싸매지 않아도 됩니다!TMI도움이 됐나요?다행입니다! 오늘도 좋은 하루 보내세요!References[Best practices for writing Dockerfiles | Docker Docs](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds)[\`turbo prune\` – Turborepo](https://turbo.build/repo/docs/reference/command-line-reference/prune)[Deploying with Docker – Turborepo](https://turbo.build/repo/docs/handbook/deploying-with-docker)

프론트엔드turborepodocker

David

[인프런 워밍업 클럽 4기 - DevOps] 미션 5

사전 준비사항# 도커 파일 및 App 소스 다운로드 curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/etc/docker/Dockerfile curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/etc/docker/hello.js [root@cicd-server ~]# ls Dockerfile hello.js전체 실습 명령어docker build -t golreas/hello:1.0.0 .[+] Building 12.1s (8/8) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 154B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/node:slim 2.3s => [auth] library/node:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.0s => => transferring context: 272B 0.0s => [1/2] FROM docker.io/library/node:slim@sha256:b30c143a092c7dced8e17ad67a8783c03234d4844ee84c39090c9780491aaf89 9.5s => => resolve docker.io/library/node:slim@sha256:b30c143a092c7dced8e17ad67a8783c03234d4844ee84c39090c9780491aaf89 0.0s => => sha256:85878ac12a824d35ede83635c5aa0a6b4c83fe0b8fa5fb125e1fc839a5af01a7 6.59kB / 6.59kB 0.0s => => sha256:34ef2a75627f6089e01995bfd3b3786509bbdc7cfb4dbc804b642e195340dbc9 28.08MB / 28.08MB 7.8s => => sha256:00b6bc59183634774862a1f5d9fa777966ffdd8b4edd6fe07006671358dfc249 3.31kB / 3.31kB 0.5s => => sha256:7293ae927b976710c33b54ae3957471f36b9e1150408853c3dfbd7baff3f59d1 50.52MB / 50.52MB 7.6s => => sha256:b30c143a092c7dced8e17ad67a8783c03234d4844ee84c39090c9780491aaf89 5.20kB / 5.20kB 0.0s => => sha256:af442a7998c3f3a985309cfa7b709ea8d3f1911ea19a598f1f1a2e158273c73e 1.93kB / 1.93kB 0.0s => => sha256:148b7926ba2143f7dbd1efaab45bd08b5fde13f01510d1319ee7cd0aa781f8d0 1.71MB / 1.71MB 1.9s => => sha256:0a5428d7ed1bdde6d0638d39b519fcd3307eb60e70ba9f220d1066b39a71de93 447B / 447B 2.1s => => extracting sha256:34ef2a75627f6089e01995bfd3b3786509bbdc7cfb4dbc804b642e195340dbc9 0.6s => => extracting sha256:00b6bc59183634774862a1f5d9fa777966ffdd8b4edd6fe07006671358dfc249 0.0s => => extracting sha256:7293ae927b976710c33b54ae3957471f36b9e1150408853c3dfbd7baff3f59d1 0.7s => => extracting sha256:148b7926ba2143f7dbd1efaab45bd08b5fde13f01510d1319ee7cd0aa781f8d0 0.1s => => extracting sha256:0a5428d7ed1bdde6d0638d39b519fcd3307eb60e70ba9f220d1066b39a71de93 0.0s => [2/2] COPY hello.js . 0.2s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:f8812cc66e7be6bd8a78ca25a7701407a6aa40bf06d11ca572f61d63c91944a6 0.0s => => naming to docker.io/golreas/hello:1.0.0$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 1.0.0 f8812cc66e7b 48 seconds ago 249MB golreas/api-tester v1.0.0 9438a37e6182 3 hours ago 520MB# docker login -u golreas Password: WARNING! Your password will be stored unencrypted in /var/lib/jenkins/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [jenkins@cicd-server ~]$ docker push golreas/hello:1.0.0 The push refers to repository [docker.io/golreas/hello] 84cd54ae51c5: Pushed a04dc377afe1: Mounted from library/node 1b2a793e9797: Mounted from library/node 0fa9dab4f369: Mounted from library/node abb3903f11f9: Mounted from library/node 6edfb9bfff29: Mounted from library/node 1.0.0: digest: sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 size: 1574 docker rmi golreas/hello:1.0.0 Untagged: golreas/hello:1.0.0 [jenkins@cicd-server ~] docker pull golreas/hello:1.0.0 1.0.0: Pulling from golreas/hello Digest: sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 Status: Downloaded newer image for golreas/hello:1.0.0 docker.io/golreas/hello:1.0.0 docker save -o file.tar golreas/hello:1.0.0 [jenkins@cicd-server ~]$ docker load -i file.tar Loaded image: golreas/hello:1.0.0 빌드$ docker build -t golreas/hello:1.0.0 . [+] Building 1.7s (8/8) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 154B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/node:slim 1.7s => [auth] library/node:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.0s => => transferring context: 87B 0.0s => [1/2] FROM docker.io/library/node:slim@sha256:b30c143a092c7dced8e17ad67a8783c03234d4844ee84c39090c9780491aaf89 0.0s => CACHED [2/2] COPY hello.js . 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:f8812cc66e7be6bd8a78ca25a7701407a6aa40bf06d11ca572f61d63c91944a6 0.0s => => naming to docker.io/golreas/hello:1.0.0이미지 리스트 조회$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 1.0.0 f8812cc66e7b 10 minutes ago 249MB golreas/api-tester v1.0.0 9438a37e6182 3 hours ago 520MB태그변경docker tag golreas/hello:1.0.0 golreas/hello:2.0.0 $ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 1.0.0 f8812cc66e7b 13 minutes ago 249MB golreas/hello 2.0.0 f8812cc66e7b 13 minutes ago 249MB golreas/api-tester v1.0.0 9438a37e6182 4 hours ago 520MB로그인docker login -u golreas Password: WARNING! Your password will be stored unencrypted in /var/lib/jenkins/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded이미지 업로드docker push golreas/hello:1.0.0 The push refers to repository [docker.io/golreas/hello] 84cd54ae51c5: Layer already exists a04dc377afe1: Layer already exists 1b2a793e9797: Layer already exists 0fa9dab4f369: Layer already exists abb3903f11f9: Layer already exists 6edfb9bfff29: Layer already exists 1.0.0: digest: sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 size: 1574이미지 다운로드docker pull golreas/hello:1.0.0 1.0.0: Pulling from golreas/hello Digest: sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 Status: Image is up to date for golreas/hello:1.0.0 docker.io/golreas/hello:1.0.0이미지 -> 파일로 변환docker save -o file.tar golreas/hello:1.0.0 [jenkins@cicd-server ~]$ ls -l file.tar -rw-------. 1 jenkins jenkins 255018496 Jun 15 00:37 file.tar이미지 삭제docker rmi golreas/hello:1.0.0 Untagged: golreas/hello:1.0.0파일 -> 이미지로 변환docker load -i file.tar Loaded image: golreas/hello:1.0.0 [jenkins@cicd-server ~]$ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 1.0.0 f8812cc66e7b 19 minutes ago 249MB golreas/hello 2.0.0 f8812cc66e7b 19 minutes ago 249MB golreas/api-tester v1.0.0 9438a37e6182 4 hours ago 520MB정리docker rmi golreas/hello:1.0.0 Untagged: golreas/hello:1.0.0 [jenkins@cicd-server ~]$ rm file.tar Containerdctr ns list NAME LABELS k8s.io특정 네임스페이스 내 이미지 조회ctr -n k8s.io image list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/1pro/api-tester:v1.0.0 application/vnd.oci.image.index.v1+json sha256:6b38dd347b66c7f14c393280a040831a72b4a93fd5beddc011ee852c26f35058 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/api-tester:v2.0.0 application/vnd.oci.image.index.v1+json sha256:eed09de27648c5e13a7978069e1af63908bf4c6fd023d73de993e8b6abf556b4 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/api-tester@sha256:6b38dd347b66c7f14c393280a040831a72b4a93fd5beddc011ee852c26f35058 application/vnd.oci.image.index.v1+json sha256:6b38dd347b66c7f14c393280a040831a72b4a93fd5beddc011ee852c26f35058 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/api-tester@sha256:eed09de27648c5e13a7978069e1af63908bf4c6fd023d73de993e8b6abf556b4 application/vnd.oci.image.index.v1+json sha256:eed09de27648c5e13a7978069e1af63908bf4c6fd023d73de993e8b6abf556b4 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app-error:latest application/vnd.oci.image.index.v1+json sha256:cb23f9634d689a4fd2c34c2132f26ddc2361f15bc6320f9682304e3503ca0056 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app-error@sha256:cb23f9634d689a4fd2c34c2132f26ddc2361f15bc6320f9682304e3503ca0056 application/vnd.oci.image.index.v1+json sha256:cb23f9634d689a4fd2c34c2132f26ddc2361f15bc6320f9682304e3503ca0056 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app-update:latest application/vnd.oci.image.index.v1+json sha256:37b78640822e2563ecab155f691a2eef977472745ea09f6013e0e7f5402d64a9 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app-update@sha256:37b78640822e2563ecab155f691a2eef977472745ea09f6013e0e7f5402d64a9 application/vnd.oci.image.index.v1+json sha256:37b78640822e2563ecab155f691a2eef977472745ea09f6013e0e7f5402d64a9 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app:latest application/vnd.oci.image.index.v1+json sha256:9d81d340d25b6bf7ec48e742cc149c170cdf8c94263da540a7d7034be476bd6b 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/1pro/app@sha256:9d81d340d25b6bf7ec48e742cc149c170cdf8c94263da540a7d7034be476bd6b application/vnd.oci.image.index.v1+json sha256:9d81d340d25b6bf7ec48e742cc149c170cdf8c94263da540a7d7034be476bd6b 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed docker.io/calico/apiserver:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:c520f71091cd09a9c9628a4e010f6fbc6118da9573af46af5b3f4c3ed8d463dc 34.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/apiserver@sha256:c520f71091cd09a9c9628a4e010f6fbc6118da9573af46af5b3f4c3ed8d463dc application/vnd.docker.distribution.manifest.list.v2+json sha256:c520f71091cd09a9c9628a4e010f6fbc6118da9573af46af5b3f4c3ed8d463dc 34.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/cni:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:7c5895c5d6ed3266bcd405fbcdbb078ca484688673c3479f0f18bf072d58c242 82.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/cni@sha256:7c5895c5d6ed3266bcd405fbcdbb078ca484688673c3479f0f18bf072d58c242 application/vnd.docker.distribution.manifest.list.v2+json sha256:7c5895c5d6ed3266bcd405fbcdbb078ca484688673c3479f0f18bf072d58c242 82.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/csi:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:0ab0fafee845c82c1a31bc2a3d5df29768626d570fbbead4813ad0da4a4ebf4b 9.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/csi@sha256:0ab0fafee845c82c1a31bc2a3d5df29768626d570fbbead4813ad0da4a4ebf4b application/vnd.docker.distribution.manifest.list.v2+json sha256:0ab0fafee845c82c1a31bc2a3d5df29768626d570fbbead4813ad0da4a4ebf4b 9.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/kube-controllers:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:5fce14b4dfcd63f1a4663176be4f236600b410cd896d054f56291c566292c86e 28.0 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/kube-controllers@sha256:5fce14b4dfcd63f1a4663176be4f236600b410cd896d054f56291c566292c86e application/vnd.docker.distribution.manifest.list.v2+json sha256:5fce14b4dfcd63f1a4663176be4f236600b410cd896d054f56291c566292c86e 28.0 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/node-driver-registrar:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:77db9df0ecd41c514d8dcab3b2681091f98f8d70e29a03df12c086a4e032639b 11.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/node-driver-registrar@sha256:77db9df0ecd41c514d8dcab3b2681091f98f8d70e29a03df12c086a4e032639b application/vnd.docker.distribution.manifest.list.v2+json sha256:77db9df0ecd41c514d8dcab3b2681091f98f8d70e29a03df12c086a4e032639b 11.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/node:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:a8b77a5f27b167501465f7f5fb7601c44af4df8dccd1c7201363bbb301d1fe40 83.6 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/node@sha256:a8b77a5f27b167501465f7f5fb7601c44af4df8dccd1c7201363bbb301d1fe40 application/vnd.docker.distribution.manifest.list.v2+json sha256:a8b77a5f27b167501465f7f5fb7601c44af4df8dccd1c7201363bbb301d1fe40 83.6 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/pod2daemon-flexvol:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:cf169a0c328a5b4f2dc96b224c3cf6dbc2c8269c6ecafac54bc1de00102b665e 5.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/pod2daemon-flexvol@sha256:cf169a0c328a5b4f2dc96b224c3cf6dbc2c8269c6ecafac54bc1de00102b665e application/vnd.docker.distribution.manifest.list.v2+json sha256:cf169a0c328a5b4f2dc96b224c3cf6dbc2c8269c6ecafac54bc1de00102b665e 5.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/typha:v3.26.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:ebe99272d38ff65255c1fba33c17d10f588b612625b19c68fe5aeed0f134fa74 24.7 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/calico/typha@sha256:ebe99272d38ff65255c1fba33c17d10f588b612625b19c68fe5aeed0f134fa74 application/vnd.docker.distribution.manifest.list.v2+json sha256:ebe99272d38ff65255c1fba33c17d10f588b612625b19c68fe5aeed0f134fa74 24.7 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/grafana/grafana:9.5.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:39c849cebccccb22c0a5194f07c535669386190e029aa440ad535226974a5809 78.2 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/grafana/grafana@sha256:39c849cebccccb22c0a5194f07c535669386190e029aa440ad535226974a5809 application/vnd.docker.distribution.manifest.list.v2+json sha256:39c849cebccccb22c0a5194f07c535669386190e029aa440ad535226974a5809 78.2 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/grafana/loki:2.6.1 application/vnd.docker.distribution.manifest.list.v2+json sha256:1ee60f980950b00e505bd564b40f720132a0653b110e993043bb5940673d060a 17.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/grafana/loki@sha256:1ee60f980950b00e505bd564b40f720132a0653b110e993043bb5940673d060a application/vnd.docker.distribution.manifest.list.v2+json sha256:1ee60f980950b00e505bd564b40f720132a0653b110e993043bb5940673d060a 17.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/grafana/promtail:2.7.4 application/vnd.docker.distribution.manifest.list.v2+json sha256:db66221bcc9510f3101121d42354b19c83cb810c5480e4936eb75c43443656f4 65.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/grafana/promtail@sha256:db66221bcc9510f3101121d42354b19c83cb810c5480e4936eb75c43443656f4 application/vnd.docker.distribution.manifest.list.v2+json sha256:db66221bcc9510f3101121d42354b19c83cb810c5480e4936eb75c43443656f4 65.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed docker.io/kubernetesui/dashboard:v2.7.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 70.7 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/kubernetesui/dashboard@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 application/vnd.docker.distribution.manifest.list.v2+json sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 70.7 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/kubernetesui/metrics-scraper:v1.0.8 application/vnd.docker.distribution.manifest.list.v2+json sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c 17.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed docker.io/kubernetesui/metrics-scraper@sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c application/vnd.docker.distribution.manifest.list.v2+json sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c 17.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/brancz/kube-rbac-proxy:v0.14.1 application/vnd.docker.distribution.manifest.list.v2+json sha256:58d91a5faaf8f8222f8aa6c0a170826bbabcc60eedab71afd2326548cde84171 21.9 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/brancz/kube-rbac-proxy@sha256:58d91a5faaf8f8222f8aa6c0a170826bbabcc60eedab71afd2326548cde84171 application/vnd.docker.distribution.manifest.list.v2+json sha256:58d91a5faaf8f8222f8aa6c0a170826bbabcc60eedab71afd2326548cde84171 21.9 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus-operator/prometheus-config-reloader:v0.65.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:18632ea5cff38cda5b08054057297e527dcfc144a5f195c1c836a0805a9bbad1 4.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus-operator/prometheus-config-reloader@sha256:18632ea5cff38cda5b08054057297e527dcfc144a5f195c1c836a0805a9bbad1 application/vnd.docker.distribution.manifest.list.v2+json sha256:18632ea5cff38cda5b08054057297e527dcfc144a5f195c1c836a0805a9bbad1 4.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus-operator/prometheus-operator:v0.65.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:5c3da991d54f5ff9b84e5a1fb55110b4de7fcd00723367eff6f90392ad01e79b 14.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus-operator/prometheus-operator@sha256:5c3da991d54f5ff9b84e5a1fb55110b4de7fcd00723367eff6f90392ad01e79b application/vnd.docker.distribution.manifest.list.v2+json sha256:5c3da991d54f5ff9b84e5a1fb55110b4de7fcd00723367eff6f90392ad01e79b 14.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus/node-exporter:v1.6.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:d2e48098c364e61ee62d9016eed863b66331d87cf67146f2068b70ed9d9b4f98 10.5 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus/node-exporter@sha256:d2e48098c364e61ee62d9016eed863b66331d87cf67146f2068b70ed9d9b4f98 application/vnd.docker.distribution.manifest.list.v2+json sha256:d2e48098c364e61ee62d9016eed863b66331d87cf67146f2068b70ed9d9b4f98 10.5 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus/prometheus:v2.44.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:0f0b7feb6f02620df7d493ad7437b6ee95b6d16d8d18799f3607124e501444b1 83.4 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/prometheus/prometheus@sha256:0f0b7feb6f02620df7d493ad7437b6ee95b6d16d8d18799f3607124e501444b1 application/vnd.docker.distribution.manifest.list.v2+json sha256:0f0b7feb6f02620df7d493ad7437b6ee95b6d16d8d18799f3607124e501444b1 83.4 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/tigera/operator:v1.30.9 application/vnd.docker.distribution.manifest.list.v2+json sha256:431f037ff18b5c867d01312e42671effc55602421aeed25dd3f6109f70596b4a 18.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed quay.io/tigera/operator@sha256:431f037ff18b5c867d01312e42671effc55602421aeed25dd3f6109f70596b4a application/vnd.docker.distribution.manifest.list.v2+json sha256:431f037ff18b5c867d01312e42671effc55602421aeed25dd3f6109f70596b4a 18.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/coredns/coredns:v1.10.1 application/vnd.docker.distribution.manifest.list.v2+json sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e 13.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/coredns/coredns@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e application/vnd.docker.distribution.manifest.list.v2+json sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e 13.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/etcd:3.5.7-0 application/vnd.docker.distribution.manifest.list.v2+json sha256:51eae8381dcb1078289fa7b4f3df2630cdc18d09fb56f8e56b41c40e191d6c83 76.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/etcd@sha256:51eae8381dcb1078289fa7b4f3df2630cdc18d09fb56f8e56b41c40e191d6c83 application/vnd.docker.distribution.manifest.list.v2+json sha256:51eae8381dcb1078289fa7b4f3df2630cdc18d09fb56f8e56b41c40e191d6c83 76.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/kube-apiserver:v1.27.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:94e48585629fde3c1d06c6ae8f62885d3052f12a1072ffd97611296525eff5b9 29.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-apiserver@sha256:94e48585629fde3c1d06c6ae8f62885d3052f12a1072ffd97611296525eff5b9 application/vnd.docker.distribution.manifest.list.v2+json sha256:94e48585629fde3c1d06c6ae8f62885d3052f12a1072ffd97611296525eff5b9 29.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-controller-manager:v1.27.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:b0990ef7c9ce9edd0f57355a7e4cb43a71e864bfd2cd55bc68e4998e00213b56 26.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-controller-manager@sha256:b0990ef7c9ce9edd0f57355a7e4cb43a71e864bfd2cd55bc68e4998e00213b56 application/vnd.docker.distribution.manifest.list.v2+json sha256:b0990ef7c9ce9edd0f57355a7e4cb43a71e864bfd2cd55bc68e4998e00213b56 26.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-proxy:v1.27.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:1e4f13f5f5c215813fb9c9c6f56da1c0354363f2a69bd12732658f79d585864f 20.4 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-proxy@sha256:1e4f13f5f5c215813fb9c9c6f56da1c0354363f2a69bd12732658f79d585864f application/vnd.docker.distribution.manifest.list.v2+json sha256:1e4f13f5f5c215813fb9c9c6f56da1c0354363f2a69bd12732658f79d585864f 20.4 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-scheduler:v1.27.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:89e8c591cc58bd0e8651dddee3de290399b1ae5ad14779afe84779083fe05177 15.8 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-scheduler@sha256:89e8c591cc58bd0e8651dddee3de290399b1ae5ad14779afe84779083fe05177 application/vnd.docker.distribution.manifest.list.v2+json sha256:89e8c591cc58bd0e8651dddee3de290399b1ae5ad14779afe84779083fe05177 15.8 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:5ac2e67a862cd3baa0eb4fd7683d54928fd76ea3a61cde50508922c956901d8c 11.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/kube-state-metrics/kube-state-metrics@sha256:5ac2e67a862cd3baa0eb4fd7683d54928fd76ea3a61cde50508922c956901d8c application/vnd.docker.distribution.manifest.list.v2+json sha256:5ac2e67a862cd3baa0eb4fd7683d54928fd76ea3a61cde50508922c956901d8c 11.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/metrics-server/metrics-server:v0.6.3 application/vnd.docker.distribution.manifest.list.v2+json sha256:c60778fa1c44d0c5a0c4530ebe83f9243ee6fc02f4c3dc59226c201931350b10 26.7 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/metrics-server/metrics-server@sha256:c60778fa1c44d0c5a0c4530ebe83f9243ee6fc02f4c3dc59226c201931350b10 application/vnd.docker.distribution.manifest.list.v2+json sha256:c60778fa1c44d0c5a0c4530ebe83f9243ee6fc02f4c3dc59226c201931350b10 26.7 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/pause:3.6 application/vnd.docker.distribution.manifest.list.v2+json sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db 247.6 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/pause:3.9 application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 261.8 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/pause@sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db application/vnd.docker.distribution.manifest.list.v2+json sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db 247.6 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/pause@sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 261.8 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.10.0 application/vnd.docker.distribution.manifest.list.v2+json sha256:2f34cb3a04a0fee6034f4d63ce3ee7786c0f762dc9f3bf196c70e894dd92edd1 26.4 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed registry.k8s.io/prometheus-adapter/prometheus-adapter@sha256:2f34cb3a04a0fee6034f4d63ce3ee7786c0f762dc9f3bf196c70e894dd92edd1 application/vnd.docker.distribution.manifest.list.v2+json sha256:2f34cb3a04a0fee6034f4d63ce3ee7786c0f762dc9f3bf196c70e894dd92edd1 26.4 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:031fce34fb773858da957c7d5d550cdd5050d11a61b81ce637f5c8e757cd9569 application/vnd.docker.distribution.manifest.list.v2+json sha256:77db9df0ecd41c514d8dcab3b2681091f98f8d70e29a03df12c086a4e032639b 11.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:20b332c9a70d8516d849d1ac23eff5800cbb2f263d379f0ec11ee908db6b25a8 application/vnd.docker.distribution.manifest.list.v2+json sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93 70.7 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:24bc64e911039ecf00e263be2161797c758b7d82403ca5516ab64047a477f737 application/vnd.docker.distribution.manifest.list.v2+json sha256:51eae8381dcb1078289fa7b4f3df2630cdc18d09fb56f8e56b41c40e191d6c83 76.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed sha256:29921a084542255eb81a1a660a603b1a24636d88b202f9010daae75fa32754c0 application/vnd.docker.distribution.manifest.list.v2+json sha256:1e4f13f5f5c215813fb9c9c6f56da1c0354363f2a69bd12732658f79d585864f 20.4 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:2d68052f05879837d499699bebc3039f71b65c486fce80da7b120e134ba3181c application/vnd.docker.distribution.manifest.list.v2+json sha256:1ee60f980950b00e505bd564b40f720132a0653b110e993043bb5940673d060a 17.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed sha256:2e8b6dfeda0f17c6856f93d62f115266ce424ec2ddc8c6e5c06af3664d8e66a9 application/vnd.docker.distribution.manifest.list.v2+json sha256:5fce14b4dfcd63f1a4663176be4f236600b410cd896d054f56291c566292c86e 28.0 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:2ee705380c3c59a538b853cbe9ae9886ebbd0001a4cea4add5adeea48e5f48d4 application/vnd.docker.distribution.manifest.list.v2+json sha256:b0990ef7c9ce9edd0f57355a7e4cb43a71e864bfd2cd55bc68e4998e00213b56 26.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:305d7ed1dae2877c3a80d434c5fb9f1aac1aa3d2431c36130a3fcd1970e93840 application/vnd.docker.distribution.manifest.list.v2+json sha256:89e8c591cc58bd0e8651dddee3de290399b1ae5ad14779afe84779083fe05177 15.8 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:320d6bd226c920f6876939f87cf5d81ea00de92d4e20d226ca73562c1a1a88f6 application/vnd.oci.image.index.v1+json sha256:6b38dd347b66c7f14c393280a040831a72b4a93fd5beddc011ee852c26f35058 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed sha256:4287d3e56fdcbd36285cac0097cc79633be15d5d3ea7404ee3dd810da4804747 application/vnd.docker.distribution.manifest.list.v2+json sha256:7c5895c5d6ed3266bcd405fbcdbb078ca484688673c3479f0f18bf072d58c242 82.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:4c70d5849a8e83d95ed06d935963781239e22ce0e201cf5947149cf65c22e253 application/vnd.docker.distribution.manifest.list.v2+json sha256:39c849cebccccb22c0a5194f07c535669386190e029aa440ad535226974a5809 78.2 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed sha256:533bb34ce453f380f28c5c78664c7184ce2ef060c3be66da472cdf1b7fd7200c application/vnd.docker.distribution.manifest.list.v2+json sha256:0f0b7feb6f02620df7d493ad7437b6ee95b6d16d8d18799f3607124e501444b1 83.4 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:6a33998eca8a7ef8cbb574892c6f07420668b90164886cd09a54192a0bef91a2 application/vnd.docker.distribution.manifest.list.v2+json sha256:d2e48098c364e61ee62d9016eed863b66331d87cf67146f2068b70ed9d9b4f98 10.5 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:72c9df6be7f1b997e4a31b5cb9aa7262e5278905af97e6a69e341e3f0f9bbaae application/vnd.docker.distribution.manifest.list.v2+json sha256:94e48585629fde3c1d06c6ae8f62885d3052f12a1072ffd97611296525eff5b9 29.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:7d46a07936af93fcce097459055f93ab07331509aa55f4a2a90d95a3ace1850e application/vnd.docker.distribution.manifest.list.v2+json sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db 247.6 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed sha256:829e9de338bd5fdd3f16f68f83a9fb288fbc8453e881e5d5cfd0f6f2ff72b43e application/vnd.docker.distribution.manifest.list.v2+json sha256:7031c1b283388d2c2e09b57badb803c05ebed362dc88d84b480cc47f72a21097 261.8 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64 io.cri-containerd.image=managed sha256:8665dd71a6e2c4c0947daaae0dc78274b869aaa50860191480c328e2cb359f49 application/vnd.oci.image.index.v1+json sha256:cb23f9634d689a4fd2c34c2132f26ddc2361f15bc6320f9682304e3503ca0056 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed sha256:8779573e497ae7fe07a121a96f3b60d262869c1803a14459e9d203ccbabbd77d application/vnd.docker.distribution.manifest.list.v2+json sha256:431f037ff18b5c867d01312e42671effc55602421aeed25dd3f6109f70596b4a 18.0 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:8e22bf689cda7eb34081c7bed8d3c97fac366b3d9b60c829a6719249f4684cd8 application/vnd.docker.distribution.manifest.list.v2+json sha256:c60778fa1c44d0c5a0c4530ebe83f9243ee6fc02f4c3dc59226c201931350b10 26.7 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:97e04611ad43405a2e5863ae17c6f1bc9181bdefdaa78627c432ef754a4eb108 application/vnd.docker.distribution.manifest.list.v2+json sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e 13.9 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/mips64le,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:9e03e9fd536c2fc127937e4346c4bc08918fc700a35e687f1e440525a76937e7 application/vnd.docker.distribution.manifest.list.v2+json sha256:5ac2e67a862cd3baa0eb4fd7683d54928fd76ea3a61cde50508922c956901d8c 11.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:a422e0e982356f6c1cf0e5bb7b733363caae3992a07c99951fbcc73e58ed656a application/vnd.docker.distribution.manifest.list.v2+json sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c 17.5 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:abd2f13a5030c85c80dfa7b02f886470991f63f2bcf028f726e469ada5b493f6 application/vnd.oci.image.index.v1+json sha256:eed09de27648c5e13a7978069e1af63908bf4c6fd023d73de993e8b6abf556b4 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed sha256:b15a8d2801f74e271b79a7a4eef64daec0de7e18be96506b34343e4d23ae639f application/vnd.docker.distribution.manifest.list.v2+json sha256:5c3da991d54f5ff9b84e5a1fb55110b4de7fcd00723367eff6f90392ad01e79b 14.7 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:b4203935a9aeef74bbacbc7aea95f4dd36b20c61acdb93eae4f7f74cd39addbd application/vnd.docker.distribution.manifest.list.v2+json sha256:db66221bcc9510f3101121d42354b19c83cb810c5480e4936eb75c43443656f4 65.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8 io.cri-containerd.image=managed sha256:bd0140db083c4da0da65d29eac4301b34ad202134b1ef869e17ec747e1618682 application/vnd.docker.distribution.manifest.list.v2+json sha256:0ab0fafee845c82c1a31bc2a3d5df29768626d570fbbead4813ad0da4a4ebf4b 9.2 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:c727f7a87f98196c6b36fb4eb982eb1a290cb625d8239b9d0424d9f5207997e1 application/vnd.docker.distribution.manifest.list.v2+json sha256:2f34cb3a04a0fee6034f4d63ce3ee7786c0f762dc9f3bf196c70e894dd92edd1 26.4 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:d205b93c448bf3230bd9514e6d5ea32f951552c96b3693c52e5b6aaab280d2d1 application/vnd.docker.distribution.manifest.list.v2+json sha256:18632ea5cff38cda5b08054057297e527dcfc144a5f195c1c836a0805a9bbad1 4.8 MiB linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:e7f0172bd993412f6bb3e21e3edd2169d0fd92b7bb73242ee35379237625a55d application/vnd.docker.distribution.manifest.list.v2+json sha256:ebe99272d38ff65255c1fba33c17d10f588b612625b19c68fe5aeed0f134fa74 24.7 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:e81374a898b7f557718b66b4894ac3e03b90b4cb65d958ff3a35b9863f2d6ad6 application/vnd.oci.image.index.v1+json sha256:37b78640822e2563ecab155f691a2eef977472745ea09f6013e0e7f5402d64a9 247.8 MiB linux/amd64,linux/arm64,unknown/unknown io.cri-containerd.image=managed sha256:ee12b694a0f4824f5fca50ffcc95ec8c249245d8bea015944a6ca84a52ac891f application/vnd.docker.distribution.manifest.list.v2+json sha256:58d91a5faaf8f8222f8aa6c0a170826bbabcc60eedab71afd2326548cde84171 21.9 MiB linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:f410b4e37f09ec3e3aef93952fe5d161396c66754a852be2a0bc8a82de17f02b application/vnd.docker.distribution.manifest.list.v2+json sha256:a8b77a5f27b167501465f7f5fb7601c44af4df8dccd1c7201363bbb301d1fe40 83.6 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:f4937dd361b91d8b0cd79a3c0686998c912dfe874ce596de3d91357b19418e5c application/vnd.docker.distribution.manifest.list.v2+json sha256:cf169a0c328a5b4f2dc96b224c3cf6dbc2c8269c6ecafac54bc1de00102b665e 5.4 MiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed sha256:f9c81e42abf4293510c4cfb40720912b248ff343d94268794c74c37b58693e9a application/vnd.docker.distribution.manifest.list.v2+json sha256:c520f71091cd09a9c9628a4e010f6fbc6118da9573af46af5b3f4c3ed8d463dc 34.9 MiB linux/amd64,linux/arm64,linux/ppc64le,linux/s390x io.cri-containerd.image=managed다운로드 및 이미지 확인ctr images pull docker.io/golreas/hello:1.0.0 docker.io/golreas/hello:1.0.0: resolved |++++++++++++++++++++++++++++++++++++++| manifest-sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:23e7733194ec9068106448513f45f2ae36e8931263abe26110e82c2db99549ec: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:00b6bc59183634774862a1f5d9fa777966ffdd8b4edd6fe07006671358dfc249: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:148b7926ba2143f7dbd1efaab45bd08b5fde13f01510d1319ee7cd0aa781f8d0: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:0a5428d7ed1bdde6d0638d39b519fcd3307eb60e70ba9f220d1066b39a71de93: done |++++++++++++++++++++++++++++++++++++++| config-sha256:f8812cc66e7be6bd8a78ca25a7701407a6aa40bf06d11ca572f61d63c91944a6: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:7293ae927b976710c33b54ae3957471f36b9e1150408853c3dfbd7baff3f59d1: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:34ef2a75627f6089e01995bfd3b3786509bbdc7cfb4dbc804b642e195340dbc9: done |++++++++++++++++++++++++++++++++++++++| elapsed: 12.7s total: 76.4 M (6.0 MiB/s) unpacking linux/arm64/v8 sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8... done: 1.57064216s태그 변경ctr images tag docker.io/golreas/hello:1.0.0 docker.io/golreas/hello:2.0.0 docker.io/golreas/hello:2.0.0 [root@k8s-master ~]# ctr images list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/golreas/hello:1.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 - docker.io/golreas/hello:2.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 -업로드ctr image push docker.io/golreas/hello:2.0.0 --user golreas Password: manifest-sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8: done |++++++++++++++++++++++++++++++++++++++| config-sha256:f8812cc66e7be6bd8a78ca25a7701407a6aa40bf06d11ca572f61d63c91944a6: done |++++++++++++++++++++++++++++++++++++++| elapsed: 3.0 s 이미지 -> 파일로 변환ctr -n default image export file.tar docker.io/golreas/hello:1.0.0 [root@k8s-master ~]# ls anaconda-ks.cfg file.tar k8s-local-volume k8s_env.sh k8s_install.sh monitoring 파일 -> 이미지로 변환ctr -n k8s.io image import file.tar unpacking docker.io/golreas/hello:1.0.0 (sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8)...done삭제ctr -n k8s.io image remove docker.io/golreas/hello:1.0.0 docker.io/golreas/hello:1.0.0 [root@k8s-master ~]# ctr -n k8s.io image list | grep hello 같은 이미지를 도커에서 받았을 때와 쿠버네티스에서 받았을 때 사이즈가 다른 이유dockerdocker pull 1pro/api-tester:latest latest: Pulling from 1pro/api-tester 416105dc84fc: Already exists fe66142579ff: Already exists 1250d2aa493e: Already exists 405eaf4f903e: Pull complete 4f4fb700ef54: Pull complete Digest: sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221 Status: Downloaded newer image for 1pro/api-tester:latest docker.io/1pro/api-tester:latest docker image list REPOSITORY TAG IMAGE ID CREATED SIZE 1pro/api-tester latest 320d6bd226c9 18 months ago 520MB"Architecture": "arm64", "Os": "linux", "Size": 520321200,  containerdctr image pull docker.io/1pro/api-tester:latest docker.io/1pro/api-tester:latest: resolved |++++++++++++++++++++++++++++++++++++++| index-sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221: done |++++++++++++++++++++++++++++++++++++++| manifest-sha256:95802370e0a3407e6e447de4c4ccd2a029e99eeb380b9fbf935a53cc683feed3: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1: done |++++++++++++++++++++++++++++++++++++++| config-sha256:320d6bd226c920f6876939f87cf5d81ea00de92d4e20d226ca73562c1a1a88f6: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:416105dc84fc8cf66df5d2c9f81570a2cc36a6cae58aedd4d58792f041f7a2f5: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:fe66142579ff5bb0bb5cf989222e2bc77a97dcbd0283887dec04d5b9dfd48cfa: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:1250d2aa493e8744c8f6cb528c8a882c14b6d7ff0af6862bbbfe676f60ea979e: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:405eaf4f903eeffb31e40d57d182d052fe390a30a4f401b5ec5b17f093cc61c9: done |++++++++++++++++++++++++++++++++++++++| elapsed: 3.4 s total: 0.0 B (0.0 B/s) unpacking linux/arm64/v8 sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221... done: 3.718912435s ctr image list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/1pro/api-tester:latest application/vnd.oci.image.index.v1+json sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221 247.8 MiB linux/amd64,linux/arm64,unknown/unknown -linux/amd64,linux/arm64 Container 이미지는 각각의 Layer로 구성돼 있는데, Docker에서 다운 받을 때는 전체 Layer를 받았고, Kubernetes에는 기존 이미지에 이미 존재하는 Layer가 있기 때문에 새로 받은 이미지의 Size가 작게 조회 됐을 것이다. docker -> containerddocker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 2.0.0 f8812cc66e7b 56 minutes ago 249MB golreas/api-tester v1.0.0 9438a37e6182 4 hours ago 520MB 1pro/api-tester latest 320d6bd226c9 18 months ago 520MB [root@cicd-server ~]# docker save -o docker-image.tar 1pro/api-tester:latest [root@cicd-server ~]# ls -lh docker-image.tar -rw-------. 1 root root 500M Jun 15 01:16 docker-image.tar [root@cicd-server ~]# scp docker-image.tar root@192.168.56.30:/root The authenticity of host '192.168.56.30 (192.168.56.30)' can't be established. ED25519 key fingerprint is SHA256:db7xQBeDq/ivTK1ymDqPFK0EDxCLVZfszUaoggOADiE. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.56.30' (ED25519) to the list of known hosts. root@192.168.56.30's password: docker-image.tar ctr image rm docker.io/1pro/api-tester:latest docker.io/1pro/api-tester:latest [root@k8s-master ~]# ctr image import docker-image.tar unpacking docker.io/1pro/api-tester:latest (sha256:a878b80425d48f695d8b1527fdb41d46c96fbdada66848b4b6919b44faad749d)...done [root@k8s-master ~]# ctr image list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/1pro/api-tester:latest application/vnd.docker.distribution.manifest.v2+json sha256:a878b80425d48f695d8b1527fdb41d46c96fbdada66848b4b6919b44faad749d 499.9 MiB linux/arm64 - containerd -> dockerctr image rm docker.io/1pro/api-tester:latest docker.io/1pro/api-tester:latest [root@k8s-master ~]# ctr image import docker-image.tar unpacking docker.io/1pro/api-tester:latest (sha256:a878b80425d48f695d8b1527fdb41d46c96fbdada66848b4b6919b44faad749d)...done [root@k8s-master ~]# ctr image list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/1pro/api-tester:latest application/vnd.docker.distribution.manifest.v2+json sha256:a878b80425d48f695d8b1527fdb41d46c96fbdada66848b4b6919b44faad749d 499.9 MiB linux/arm64 - docker.io/golreas/hello:1.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 - docker.io/golreas/hello:2.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 - [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# ctr image rm docker.io/1pro/api-tester:latest docker.io/1pro/api-tester:latest [root@k8s-master ~]# ctr image pull docker.io/1pro/api-tester:latest docker.io/1pro/api-tester:latest: resolved |++++++++++++++++++++++++++++++++++++++| index-sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221: done |++++++++++++++++++++++++++++++++++++++| manifest-sha256:95802370e0a3407e6e447de4c4ccd2a029e99eeb380b9fbf935a53cc683feed3: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1: done |++++++++++++++++++++++++++++++++++++++| config-sha256:320d6bd226c920f6876939f87cf5d81ea00de92d4e20d226ca73562c1a1a88f6: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:1250d2aa493e8744c8f6cb528c8a882c14b6d7ff0af6862bbbfe676f60ea979e: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:fe66142579ff5bb0bb5cf989222e2bc77a97dcbd0283887dec04d5b9dfd48cfa: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:405eaf4f903eeffb31e40d57d182d052fe390a30a4f401b5ec5b17f093cc61c9: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:416105dc84fc8cf66df5d2c9f81570a2cc36a6cae58aedd4d58792f041f7a2f5: done |++++++++++++++++++++++++++++++++++++++| elapsed: 3.4 s total: 0.0 B (0.0 B/s) unpacking linux/arm64/v8 sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221... done: 2.824286002s [root@k8s-master ~]# ctr image list REF TYPE DIGEST SIZE PLATFORMS LABELS docker.io/1pro/api-tester:latest application/vnd.oci.image.index.v1+json sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221 247.8 MiB linux/amd64,linux/arm64,unknown/unknown - docker.io/golreas/hello:1.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 - docker.io/golreas/hello:2.0.0 application/vnd.docker.distribution.manifest.v2+json sha256:9e8c2be45e8618f075510b98d7e554d599c3ba8ed1f083faedcee243aff8e9c8 76.6 MiB linux/arm64 - [root@k8s-master ~]# ctr image export containerd-image.tar docker.io/1pro/api-tester:latest [root@k8s-master ~]# ls -lh containerd-image.tar -rw-r--r--. 1 root root 248M Jun 9 16:14 containerd-image.tar [root@k8s-master ~]# [root@k8s-master ~]# [root@k8s-master ~]# scp containerd-image.tar root@192.168.56.20:/root The authenticity of host '192.168.56.20 (192.168.56.20)' can't be established. ED25519 key fingerprint is SHA256:opQ7AT2hiB2U1FYJZyW8u3i8xsCqE91vlg6tWJRWqw0. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.56.20' (ED25519) to the list of known hosts. root@192.168.56.20's password: containerd-image.tar docker image rm 1pro/api-tester:latest Untagged: 1pro/api-tester:latest Untagged: 1pro/api-tester@sha256:189625384d2f2856399f77b6212b6cfc503931e8b325fc1388e23c8a69f3f221 Deleted: sha256:320d6bd226c920f6876939f87cf5d81ea00de92d4e20d226ca73562c1a1a88f6 Deleted: sha256:71aa8f0ba35ade0fb46725ca4f2bf964f96633622a57ad64a8c0f88475afa93a Deleted: sha256:7a611a94f41e2a6d2f0fe927f361028ae762a361f6df0c099dcfc31f1e8c168a [root@cicd-server ~]# docker load -i containerd-image.tar 34456869abea: Loading layer [==================================================>] 17.15MB/17.15MB 5f70bf18a086: Loading layer [==================================================>] 32B/32B Loaded image: 1pro/api-tester:latest [root@cicd-server ~]# docker image list REPOSITORY TAG IMAGE ID CREATED SIZE golreas/hello 2.0.0 f8812cc66e7b About an hour ago 249MB golreas/api-tester v1.0.0 9438a37e6182 4 hours ago 520MB 1pro/api-tester latest 320d6bd226c9 18 months ago 520MB 

데브옵스 · 인프라dockerctrbuilddevops

<강의정리> 따라하며 배우는 도커와 CI환경(John Ahn) 1 - 도커 개념 정리

도커의 장점 일반적으로 프로그램을 다운받을 경우, installer 또는 io(file archive) 이용 -> 에러가 날 수 있음도커를 이용한 프로그램 다운 docker run -it redis -> 간편   도커 개념 서버에서의 컨네이터는 spring, mysql, react, redis ... 도커 이미지 - 프로그램을 실행하는데 필요한 설정과 종속성을 갖고있음 도커 컨테이너 - 이미지의 인스턴스이며, 프로그램을 실행함다양한 프로그램을 컨테이너로 추상화함으로써 어떠한 클라우드에서도 동일한 인터페이스 제공   도커 흐름 도커 클라이언트 -> 도커 서버 -> 캐시에서 이미지 반환 또는 도커허브에서 이미지 반환 기존의 가상화 기술은, 하이퍼 바이저를 통해 다수의 게스트 OS를 구동하고 호스트 OS와 하드웨어를 게스트 OS에 에뮬레이트(복제)함 도커 컨네이터 가상화 기술은 하이퍼바이저와 게스트 OS없이 호스트 OS위에서 커널을 공유하여 애플리케이션 실행 패키지(이미지)를 배포만 하면 됨. 경량화독립적인 컨테이너이기 때문에 하드 디스크 상에서도 격리됨; 프로세스를 작동시키는데 필요한 리소스 포함 도커 작동 원리; 리눅스 기능 1. Cgroup(control groups) - 시스템 리소스 사용량을 관리, 어플리케이션 cpu memory 제한 가능 2. 네임스페이스 - 프로세스를 격리시킬 수 있는 가상화 기술 프로그램 -> 리눅스 커널(이미지의 파일 스냅샷 전달) -> 리눅스 VM -> OS -> 하드웨어(프로그램 실행)

docker강의docker-container

<강의>따라하며 배우는 도커와 CI환경(John Ahn) 4 - 운영환경(aws eb)

전체 프로세스로컬 -> 깃허브 -> travis CI -> AWS EB (AWS S3 -> AWS ECS(ec2 컨테이너 인스턴스)에서 도커 이미지 생성 및 배포   운영환경을 위한 Nginx- 리액트 컨테이너 안의 서버로 엔진엑스 사용- 빌드 파일에서 엔진엑스가 정적파일 찾아서 반환- Dockerfile에 Nginx 이미지 추가 FROM nginx COPY --from=builder /usr/src/app/build /usr/share/nginx/html builder 스테이지에서 생성된 빌드 파일을 엔진엑스가 사용하는 경로(기본값)에 복사함   .travis.yml 파일 sudo: required language: generic services: - docker before_install: - docker build -t <이미지 이름> -f <dockerfile명> script: - docker run -e CI=true <이미지 이름> docker run test -- --coverage after_success:   AWS- ec2는 컴퓨터를 임대하는 개념 -> OS, 웹서버, DB 설치해서 사용- EB(Elastic Beastalk) -> 서버, 언어, 도커와 함께 개발된 서비스를 배포 및 확장- eb는 ec2, db, 보안 그룹 등을 컨트롤함(eb가 더 넓은 개념)   AWS EB 환경구성브라우저 -> eb의 로드발란서가 ec2 인스턴스들에게 분산시   .travis.yml 파일에 배포 설정 추가script 아래에 deploy: provider: elasticbeanstalk region: ap-northeast-2 app: docker-react-project <앱이름> env: DockerReactProject-env <환경이름> bucket_name: elasticbeanstalk-ap-northeast-2-234234235 <자동 생성 s3 버킷 이름> bucket_path: docker-react-project <앱이름> on: branch: master <git 배포용 branch 선택>   travis ci에 aws 접근 권한 설정아이엠 사용자 생성 후 트래비스 환경 변수에 AWS_ACCESS_KEY, AWS_SECRET_KEY 값 추가.travis.yml 파일에도 deploy 부분에access_key_id: $AWS_ACCESS_KEYsecret_access_key: $AWS_SECRET_KEY   엔진엑스 포트 매핑Dockerfile에 FROM nginx 밑에 EXPOSE 80 추가

docker강의docker-nginxdocker-travisdocker-awsdocker-aws-eb

<강의 정리>따라하며 배우는 도커와 CI 환경(John Ahn) 2 - 도커 명령어

1. 기본적인 도커 클라이언트 명령어 이미지 생성  docker create <이미지 이름> docker build -> Dockerfile을 이용하여 이미지 생성 docker build -t <이미지 이름 지정>   이미지 실행 docker run <이미지 이름> <명령어> docker run hello-docker ls docker run -p <포트지정> docker run -f <dockerfile 지정> docker run은 아래와 같음  docker create <이미지 이름> + docker start <컨테이너 아이디 또는 이름>   컨테이너에 명령어 전달 -> 컨테이너란 이미지를 실행한 상태를 일컬음 docker exec <이미지 아이디> <명령어> 레디스를 이용한 예시 docker run redis -> 레디스 서버 실행 docker exec -it <컨테이너 아이디> redis-cli -> 레디스 클라이언트 실행 -it 는 interactive와 terminal 옵션 -> 계속해서 명령어 적용 유지시켜줌 docker exec -it <컨테이너 아이디> sh 해서 터미널 환경에 들어가서 명령어 사용하면 간단 나올 때는 ctrl + D    이미지 중지 docker stop <이미지 이름> -> 실행중이던 것 완료하고 중지 docker kill <이미지 이름> -> 바로 중지   컨테이너 확인 docker ps -> 실행 중인 컨테이너 docker ps -a   (중지된) 컨테이너 삭제 docker rm <이미지 이름> -> 중지된 컨테이너 삭제 docker rm 'docker ps -a -q' -> 모든 중지된 컨테이너 삭제  docker rmi <이미지 아이디> docker system prune -> 중지된 컨테이너, 이미지, 네트워크 모두 삭제    도커 컴포즈 명령어 - docker compose yml 설정 파일 필요? docker-compose up docker-compose down   2. Dockerfile 생성하기 dockerfile 설정파일을 통해 도커 서버가 이미지를 생성함 도커 이미지가 필요한 것; 이미지는 여러 레이어로 구성 베이스 이미지 -> 이미지의 기반(OS) 파일 스냅샷 -> 필요한 파일을 다운로드할 명령어 시작 시 실행될 명령어   Dockerfile 예시 # 베이스 이미지FROM <이미지 이름>:<태그> -> 태그 안 붙이면 자동으로 최신 버전예시 FROM node:10 # 파일 다운로드RUN <명령어>예시 RUN npm install # 컨테이너 시작 시 실행될 명령어(1회 한정)CMD ["node", "server.js"]   Dockerfile로 이미지 생성하기 docker build ./ 또는 docker build . docker build -t <자신의 도커 아이디> <저장소;프로젝트 이름> : <버전> ./ docker build -t example1234/hello:latest ./ -> docker run -it example1234/hello 로 실행 가능   파일 못 찾는 현상 -> 파일 스냅샷 안에 넣어줘야 참고하는 파일이 컨테이너 안에 생성됨 FROM 다음에 COPY ./ ./ 로 복사    이미지 실행 시 포트 매핑 docker run -p <브라우저에서 사용할 포트>:<컨테이너 포트> <이미지 이름>   working directory 명시해주기 FROM 다음에 WORKDIR /usr/src/app -> 이미지 안에서 어플리케이션 소스를 갖고 있을 디렉터리를 생성 root에 접근하려면 쉘에 들어가서 cd로 이동하면 됨   어플리케이션 소스 변경 시 효율적으로 재빌드하기 COPY package.json ./  RUN npm install COPY ./ ./ -> 디팬던시가 변경되지 않는 한 디팬던시를 항상 받지 않고 캐시된 것을 이용하기 때문에 소스 변경 반영이 효율적이게 된다.     3. Docker Volumn  COPY 대신 Docker Volumn을 이용해 로컬 파일을 참조 docker run -p ... -v 호스트경로:참조할 도커 디렉터리 지정예시) docker run -v /usr/src/app/node_modules -v $(pwd):/usr/src/app 참조하지 않을 디렉터리는 호스트 경로($pwd)없이 경로 지정하면 참조 안 하고 컨테이너 내에서 찾아서 사용함$(pwd)는 현재 디렉터리; print working directory -> 빌드 없이 stop과 run으로 소스코드 반영이 가능하다.

docker강의docker명령어Dockerfile

채널톡 아이콘