로딩...
docker
컨테이너
brew install --cask docker
exmaple usage
docker built -t [TAG_NAME] . # . 은 Dockerfile 위치
docker images # image 확인
docker run --name [CONTAINER_NAME] -d -p 8080:8080 [IMAGE_NAME]
docker ps # 실행 확인
docker logs [CONTAINER_NAME] -f # -f 는 following
docker exec -it [CONTAINER_NAME] /bin/bash # bash shell 로 접속
# docker rm
# docker rmi
arg vs env
ARG JS
COPY ./$JS ./packages/$JS
CMD node $JS
둘다 $JS 로 표현되고 있지만 사용되는 구문에 따라 ARG 가 참조될지 ENV 가 참조될지 결정된다
arg
- build time 에 사용되므로 COPY 등 이미지가 만들어지는 타이밍에 사용된다
env
- runtime 에 사용된된다.
CMD
가 실행되는 타이밍은 runtime 이므로 env가 참조된다
- runtime 에 사용된된다.
주의 해야할 점은 사용을 해보니
FROM
절 전/후의ARG
사용 용도가 다르다FROM
전의ARG
는FROM
절에서 사용 가능하다FROM
전의ARG
는FROM
후의 절에서 사용 가능하지 않다FROM
후의ARG
는FROM
이 후 절에서 사용 가능하다FROM
후의ARG
는FROM
절에서 사용 가능하지 않다
build
docker build . -f [Dockerfile.custom]
docker build . --no-cache # 결과 캐싱하지 않음, stdout 출력 필요시에도 사용
docker build . --pull # pull 옵션을 통해서 항상 리모트 이미지를 사용할지 결정이 가능
docker build . --progress=plain # 기본적으로 프로그레스 텍스트(변하는 텍스트)를 보여주는데 이를 plain text 를 출력하는게 좋음
error
container 가 실행중에 아래와 같은 형태의 에러를 낸다면 architecture 문제 즉 arm64 로 빌드된 이미지가 amd64 에서 실행된 경우
exec /whoami: exec format error │
아래와 같은 형태로 플랫폼을 지정해서 pull 이 가능하다
sh docker pull --platform [linux/amd64] [image-name]
STEP 9/9: RUN yarn --immutable
➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed
➤ YN0000: ┌ Link step
➤ YN0008: │ puppeteer@npm:19.6.2 must be rebuilt because its dependency tree changed
➤ YN0009: │ puppeteer@npm:19.6.2 couldn't be built successfully (exit code 1, logs can be found here: /tmp/xfs-2807b8a5/build.log)
➤ YN0000: └ Completed in 0s 487ms
➤ YN0000: Failed with errors in 0s 792ms
Error: building at STEP "RUN yarn --immutable": while running runtime: exit status 1
[Warning] one or more build args were not consumed: [TARGETARCH TARGETOS TARGETPLATFORM]
COPY packages ./packages
컨텐츠 변경에도 캐시가 유지되는 문제
COPY packages ./packages
폴더안의 새로운 폴더가 생성되었음에도 불구하고 레이어가 캐시되는 문제가 있다.
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to parse stage name "registry/image/tag:": invalid reference format
- dockerfile 에서
FROM image:$TAG
와 같은 형태로 사용하면서 $TAG 를 ARG 로 받지 않아서 생긴문제
ARG TAG=latest
FROM registry/repo/name:$TAG
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no build stage in current context
둘 중 하나 확인못함
- ENV 는 FROM 전에 갈수 없다
- ARG 를 잘못 쓴 것으로 보인다
- build 중 ctrl+c 로 취소하면서 문제가 생긴 것으로 보인데 빌드되다만 이미지를 삭제한다
- Docker desktop -> 우상단의 debug 아이콘 -> Clean / Purge data
ERROR [internal] load metadata for [image]:[tag]
항상 빌드되던 다커빌드시에 발생했는데 apt-get update 를 진행하는중에 발생했다. 좀 관련이 없어보이지만 결국 docker system prune
으로 해결되었다
ERROR [internal] load metadata for [image]:[tag]
다른 빌드를 할때는 용량 부족에 대한 에러가 발생했다
failed to register layer: Error processing tar file(exit status 1): write /home/pptruser/.cache/puppeteer/chrome/linux-113.0.5672.63/chrome-linux64/ClearKeyCdm/_platform_specific/linux_x64/libclearkeycdm.so: no space left on device
no space 에러는 docker system prune [-a]
로 해결된다.
FROM
절에서 참조할 수 없는 이미지를 참조한 경우
At least one invalid signature was encountered.
docker system prune
GPG error
[+] Building 3.4s (5/5) FINISHED
=> [internal] load build definition from Dockerfile.chrome 0.0s
=> => transferring dockerfile: 750B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 71B 0.0s
=> [internal] load metadata for docker.io/library/node:20-bullseye 0.9s
=> CACHED [1/2] FROM docker.io/library/node:20-bullseye@sha256:c1b3e61fa0fde701bdb45032796bc4bb020a8c53f06cba5765584b620087fa03 0.0s
=> ERROR [2/2] RUN apt-get update && apt-get install gnupg wget -y && wget --quiet --output-document=- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg && 2.4s
------
> [2/2] RUN apt-get update && apt-get install gnupg wget -y && wget --quiet --output-document=- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && apt-get update && apt-get install google-chrome-stable -y --no-install-recommends && rm -rf /var/lib/apt/lists/*:
#5 0.484 Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
#5 0.589 Get:2 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]
#5 0.631 Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
#5 1.156 Err:1 http://deb.debian.org/debian bullseye InRelease
#5 1.156 At least one invalid signature was encountered.
#5 1.719 Err:2 http://deb.debian.org/debian-security bullseye-security InRelease
#5 1.719 At least one invalid signature was encountered.
#5 2.268 Err:3 http://deb.debian.org/debian bullseye-updates InRelease
#5 2.268 At least one invalid signature was encountered.
#5 2.306 Reading package lists...
#5 2.404 W: GPG error: http://deb.debian.org/debian bullseye InRelease: At least one invalid signature was encountered.
#5 2.404 E: The repository 'http://deb.debian.org/debian bullseye InRelease' is not signed.
#5 2.405 W: GPG error: http://deb.debian.org/debian-security bullseye-security InRelease: At least one invalid signature was encountered.
#5 2.405 E: The repository 'http://deb.debian.org/debian-security bullseye-security InRelease' is not signed.
#5 2.405 W: GPG error: http://deb.debian.org/debian bullseye-updates InRelease: At least one invalid signature was encountered.
#5 2.405 E: The repository 'http://deb.debian.org/debian bullseye-updates InRelease' is not signed.
------
executor failed running [/bin/sh -c apt-get update && apt-get install gnupg wget -y && wget --quiet --output-document=- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && apt-get update && apt-get install google-chrome-stable -y --no-install-recommends && rm -rf /var/lib/apt/lists/*]: exit code: 100
- GPG 에러 였지만 결국엔 disk space 랑 연결, 아래 명령어를 통해서 해결
docker system prune -a
cannot replace to directory
cannot replace to directory /var/lib/docker/overlay2/pg75y9wcqxxgmqzex5k30owur/merged/app/.yarn/cache/next-npm-14.0.3-45132b65cd-73aa3d5dd7.zip with file
- dockerfile 에서
COPY
구문의 타겟에 복사할 대상과 같은 이름의 디렉토리가 존재할 떄 발생