Aws-cli: [v2] alpine / musl libc용 λ°”μ΄λ„ˆλ¦¬ 배포

에 λ§Œλ“  2019λ…„ 11μ›” 20일  Β·  26μ½”λ©˜νŠΈ  Β·  좜처: aws/aws-cli

docker run -it --rm docker:latest sh
wget "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -O "awscliv2.zip"
# curl not installed
unzip awscliv2.zip
./aws/install
# sudo not install

였λ₯˜:

/ # ./aws/install
./aws/install: line 78: /aws/dist/aws2: not found
You can now run: /usr/local/bin/aws2 --version
/ # aws2
sh: aws2: not found
confusing-error v2

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

acceptopenjdk 이미지가 μž‘λ™ν•˜λŠ” μ΄μœ λŠ” λˆ„λ½λœ glibc λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ•ŒνŒŒμΈ λ¦¬λˆ…μŠ€λŠ” μ™„μ „ν•œ glibc에 λŒ€ν•œ κ²½λŸ‰ λŒ€μ•ˆμΈ 'musl glibc'λ₯Ό 기반으둜 ν•©λ‹ˆλ‹€. aws cli v2 λ°”μ΄λ„ˆλ¦¬λŠ” muslμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° μž‘λ™ν•˜λ €λ©΄ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λͺ‡ 개 더 ν•„μš”ν•©λ‹ˆλ‹€.

Java 이미지λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ•„λž˜ Dockerfile을 Alpine Linuxμ—μ„œ AWS CLI v2λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μ˜ 예둜 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

FROM alpine:3.11

ENV GLIBC_VER=2.31-r0

# install glibc compatibility for alpine
RUN apk --no-cache add \
        binutils \
        curl \
    && curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk \
    && apk add --no-cache \
        glibc-${GLIBC_VER}.apk \
        glibc-bin-${GLIBC_VER}.apk \
    && curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip \
    && unzip awscliv2.zip \
    && aws/install \
    && rm -rf \
        awscliv2.zip \
        aws \
        /usr/local/aws-cli/v2/*/dist/aws_completer \
        /usr/local/aws-cli/v2/*/dist/awscli/data/ac.index \
        /usr/local/aws-cli/v2/*/dist/awscli/examples \
    && apk --no-cache del \
        binutils \
        curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

μœ„μ˜ λ‚΄μš©μ€ glibc 라이브러리λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  AWS CLI v2λ₯Ό λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜ν•˜λ©° μžλ™ μ™„μ„±κ³Ό 같이 ν•„μš”ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” 일뢀 ν•­λͺ©μ„ μ œκ±°ν•©λ‹ˆλ‹€. κ²°κ³Ό μ΄λ―Έμ§€μ˜ ν¬κΈ°λŠ” μ•½ 100MBμž…λ‹ˆλ‹€.

λͺ¨λ“  26 λŒ“κΈ€

문제λ₯Ό λ””λ²„κΉ…ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ‹€νŒ¨ 이유λ₯Ό μ•Œ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ„€μΉ˜ μŠ€ν¬λ¦½νŠΈκ°€ μ•½κ°„ λΆˆμ•ˆμ •ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. v2 λ ˆμ΄λΈ”λ„ μΆ”κ°€ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬κ°€ κ²Œμ‹œν•˜λŠ” λ°”μ΄λ„ˆλ¦¬λŠ” alpine 기반 도컀 μ΄λ―Έμ§€μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ glibc에 λŒ€ν•΄ μ»΄νŒŒμΌν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. sh: aws2: not found λŠ” 이 λ°”μ΄λ„ˆλ¦¬λ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€. ubuntu:latest 와 같은 μ΄λ―Έμ§€μ—μ„œ μ‹œλ„ν•˜λ©΄ μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ΄ μž‘λ™ν•©λ‹ˆλ‹€.

λ˜ν•œ 일반 Linux λ°”μ΄λ„ˆλ¦¬μš©μœΌλ‘œ ν•˜λŠ” κ²ƒμ²˜λŸΌ μ•ŒνŒŒμΈ ν˜Έν™˜ λ°”μ΄λ„ˆλ¦¬λ₯Ό μΆœμ‹œν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. μ•ŒνŒŒμΈμ— λΉŒλ“œλœ λ°”μ΄λ„ˆλ¦¬μ™€ ν•¨κ»˜ μ œκ³΅λ˜λŠ” 도컀 이미지λ₯Ό λ¦΄λ¦¬μŠ€ν•˜λŠ” κ²½ν–₯이 더 크닀고 μƒκ°ν•©λ‹ˆλ‹€.

λ‹΅λ³€ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. https://docs.aws.amazon.com/cli/latest/userguide/install-civ2-linux.html "Linux용 μ „μ œ 쑰건" μ•„λž˜μ— λ¬Έμ„œν™”ν•˜κ±°λ‚˜ μ•ŒνŒŒμΈ κΈ°λ°˜μ—μ„œ 였λ₯˜λ₯Ό 더 μ‚¬μš©μž μΉœν™”μ μœΌλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆκΉŒ? μ΄λ―Έμ§€μΌ€μ΄μŠ€?

μ‚¬μš©μž κ°€μ΄λ“œμ—μ„œ μ—…λ°μ΄νŠΈν•  수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ˜ν•œ 이 κ²½μš°μ— λŒ€ν•΄ 보닀 μ‚¬μš©μž μΉœν™”μ μΈ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ§Œλ“œλŠ” 아이디어λ₯Ό μ’‹μ•„ν•©λ‹ˆλ‹€.

@joguSD 어리λ‘₯절 , μ•ŒνŒŒμΈμ€ 도컀 μ΄λ―Έμ§€μ˜ ν‘œμ€€μž…λ‹ˆλ‹€. 특히 μžλ™ν™”λ₯Ό μ›ν•˜κ³  맀우 큰 도컀 이미지λ₯Ό μ§€μ†μ μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•˜κ³  싢지 μ•Šμ€ λΉŒλ“œ / ci μ‹œμŠ€ν…œμ˜ 경우.

닀단계 λΉŒλ“œμ—μ„œ 곡식 μ•ŒνŒŒμΈ 도컀 이미지λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°”μ΄λ„ˆλ¦¬λ₯Ό λ‹€λ₯Έ 도컀 μ΄λ―Έμ§€λ‘œ 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.

@chadgrant -

@BarakBD-Globality μ €λŠ” ​​가지고 μžˆμ§€ μ•Šμ§€λ§Œ aws-alpine 이미지가 μƒμ„±λ˜λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FROM aws_alpine_image:latest as aws
FROM alpine:latest
COPY --from=aws /usr/local/bin/binary /usr/local/bin/binary

그듀이 μ•ŒνŒŒμΈμ„ μ§€μ›ν•˜μ§€ μ•ŠλŠ” 것은 μœ κ°μž…λ‹ˆλ‹€. ν‘œμ€€ μ΄λ―Έμ§€μž…λ‹ˆλ‹€.

λ˜ν•œ 일반 Linux λ°”μ΄λ„ˆλ¦¬μš©μœΌλ‘œ ν•˜λŠ” κ²ƒμ²˜λŸΌ μ•ŒνŒŒμΈ ν˜Έν™˜ λ°”μ΄λ„ˆλ¦¬λ₯Ό μΆœμ‹œν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. μ•ŒνŒŒμΈμ— λΉŒλ“œλœ λ°”μ΄λ„ˆλ¦¬μ™€ ν•¨κ»˜ μ œκ³΅λ˜λŠ” 도컀 이미지λ₯Ό λ¦΄λ¦¬μŠ€ν•˜λŠ” κ²½ν–₯이 더 크닀고 μƒκ°ν•©λ‹ˆλ‹€.

@joguSD 이에 λŒ€ν•œ λ…Όμ˜λ‚˜ μ›€μ§μž„μ΄ μžˆμ—ˆμŠ΅λ‹ˆκΉŒ? μ•ŒνŒŒμΈμ˜ μœ λ³‘λ₯ μ„ κ³ λ €ν•˜λ©΄ κ½€ 큰 일인 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚˜ 같은 μ‚¬λžŒλ“€μ€ cicd 및 기타 μžλ™ν™”μ—μ„œ aws λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ μ•ŒνŒŒμΈ 기반 이미지에 μ‚¬μš©ν•  수 μ—†λŠ” 경우 버전 2λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μƒλ‹Ήν•œ μž‘μ—… μ—†μ΄λŠ” μ˜΅μ…˜λ„ μ•„λ‹™λ‹ˆλ‹€! 감사 ν•΄μš”.

busybox 에도 μ„€μΉ˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

ν₯λ―Έλ‘­κ²Œλ„ 이것을 κΈ°λ³Έ μ΄λ―Έμ§€λ‘œ μ‚¬μš©ν•˜λ©΄ AWS cliκ°€ μ œλŒ€λ‘œ μ„€μΉ˜λ˜κ³  μž‘λ™ν•©λ‹ˆλ‹€.

μ—μ„œ 채택openjdk/openjdk11:μ•ŒνŒŒμΈ

λ‹€μŒ Dockerfile을 μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

FROM adoptopenjdk/openjdk11:alpine

RUN apk add --no-cache \
        ca-certificates \
        unzip \
        curl \
        groff \
        less  \
        bash  \
        openssh-client

WORKDIR /home
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm awscliv2.zip \
    && rm -R aws

acceptopenjdk 이미지가 μž‘λ™ν•˜λŠ” μ΄μœ λŠ” λˆ„λ½λœ glibc λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ•ŒνŒŒμΈ λ¦¬λˆ…μŠ€λŠ” μ™„μ „ν•œ glibc에 λŒ€ν•œ κ²½λŸ‰ λŒ€μ•ˆμΈ 'musl glibc'λ₯Ό 기반으둜 ν•©λ‹ˆλ‹€. aws cli v2 λ°”μ΄λ„ˆλ¦¬λŠ” muslμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° μž‘λ™ν•˜λ €λ©΄ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λͺ‡ 개 더 ν•„μš”ν•©λ‹ˆλ‹€.

Java 이미지λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ•„λž˜ Dockerfile을 Alpine Linuxμ—μ„œ AWS CLI v2λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μ˜ 예둜 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

FROM alpine:3.11

ENV GLIBC_VER=2.31-r0

# install glibc compatibility for alpine
RUN apk --no-cache add \
        binutils \
        curl \
    && curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk \
    && apk add --no-cache \
        glibc-${GLIBC_VER}.apk \
        glibc-bin-${GLIBC_VER}.apk \
    && curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip \
    && unzip awscliv2.zip \
    && aws/install \
    && rm -rf \
        awscliv2.zip \
        aws \
        /usr/local/aws-cli/v2/*/dist/aws_completer \
        /usr/local/aws-cli/v2/*/dist/awscli/data/ac.index \
        /usr/local/aws-cli/v2/*/dist/awscli/examples \
    && apk --no-cache del \
        binutils \
        curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

μœ„μ˜ λ‚΄μš©μ€ glibc 라이브러리λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  AWS CLI v2λ₯Ό λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜ν•˜λ©° μžλ™ μ™„μ„±κ³Ό 같이 ν•„μš”ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” 일뢀 ν•­λͺ©μ„ μ œκ±°ν•©λ‹ˆλ‹€. κ²°κ³Ό μ΄λ―Έμ§€μ˜ ν¬κΈ°λŠ” μ•½ 100MBμž…λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ‹€ν–‰ 쀑인 도컀 μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ aws ecr get-login-password … | docker login … λ₯Ό μ–»λŠ” μ΅œλ‹¨ κ²½λ‘œλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? (즉, docker:dind )?

docker:dind μ§€μ›μœΌλ‘œ λ‚˜λ§Œμ˜ docker:stable 이미지λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것을 ν”Όν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 적어도 https://github.com/aws/aws-cli/issues/4685#issuecomment -615872019 μ†”λ£¨μ…˜ 덕뢄에 κ°€λŠ₯ν–ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

@bentolor docker:dind 도 alpine을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μœ„μ—μ„œ μ–ΈκΈ‰ν•œ Dockerfile의 첫 번째 μ€„λ§Œ λ³€κ²½ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€. λŒ€μ‹  FROM alpine:3.11 당신은 μ‚¬μš©ν•΄μ•Ό FROM docker:dind . μžμ‹ μ˜ 이미지λ₯Ό κ΅¬μΆ•ν•˜κ³  μžˆλ‹€λŠ” 것을 μ˜λ―Έν•˜μ§€λ§Œ ....

@blagerweij 덕뢄에 정말 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λ˜ν•œ 감사 @blagerweij : λ‚˜λŠ” 사본 및 μ†”λ£¨μ…˜μ„ λΆ™μ—¬ λ„£μ–΄ 쐐기풀 λ‚΄μž₯ 곡곡, μ‚¬μš©μž μ •μ˜ κ³ μ • ν‘œμ‹œκΈ° 이미지λ₯Ό νŒŒμ•… : https://hub.docker.com/r/bentolor/docker-dind-awscli

@bentolor λ‚˜λŠ” λ‹Ήμ‹ μ˜ Dockerfileκ°€ μ‚¬μš©ν•˜λŠ” λ‹Ήμ‹ μ˜ repo에 μ£Όλͺ© FROM docker:stable λŒ€μ‹  FROM docker:dind . μš”μ μ€ AWS 지원을 톡해 Dockerμ—μ„œ Docker용 이미지λ₯Ό λ§Œλ“œλŠ” 것이라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

@blagerweij μ„€λͺ…을 μœ„ν•΄ 곡식 Docker 이미지 μ—μ„œ μ•„λž˜ 이미지λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

일반적인 μ‚¬μš©λ²•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. ν•˜λ‚˜(λ˜λŠ” κ·€ν•˜μ˜ CI)λŠ” docker:dind μΈμŠ€ν„΄μŠ€λ₯Ό μ‹œμž‘ν•œ λ‹€μŒ
  2. μ‹œμž‘λœ docker:dind μ»¨ν…Œμ΄λ„ˆμ— μ—°κ²°λœ λ³„λ„μ˜ docker:stable μΈμŠ€ν„΄μŠ€λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.
  3. μ†ŒμΌ“ 연결을 톡해 λͺ…령을 첫 번째 docker:dind μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ μ‹€ν–‰ 쀑인 도컀 데λͺ¬μœΌλ‘œ λ¦¬λ””λ ‰μ…˜ν•˜λŠ” 두 번째 μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ docker λͺ…λ Ή 싀행을 μ‹œμž‘ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ: docker:dind μΈμŠ€ν„΄μŠ€κ°€ κ²°κ΅­ Docker λͺ…령을 μ‹€ν–‰ν•˜λŠ” 것은 μ‚¬μ‹€μ΄μ§€λ§Œ CLI ν”„λŸ°νŠΈμ—”λ“œλŠ” μ‹€μ œλ‘œ docker:stable μΈμŠ€ν„΄μŠ€μ— μžˆμŠ΅λ‹ˆλ‹€. 그리고 그것이 λ°”λ‘œ AWS에 λ‘œκ·ΈμΈν•΄μ•Ό ν•˜λŠ” κ³³μž…λ‹ˆλ‹€ ;-)

적어도 이것은 λ‚΄κ°€ μ•Œκ³  μžˆλŠ” μ‚¬μš© νŒ¨ν„΄μž…λ‹ˆλ‹€(예: Gitlab CI λ₯Ό μ‚¬μš©ν•˜μ—¬ 도컀 이미지λ₯Ό λΉŒλ“œν•  λ•Œ). 직접적인 docker:dind μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€λ„ μžˆμŠ΅λ‹ˆκΉŒ?

Usage of <a href="docker:stable">docker:stable</a> vs. <a href="docker:didn">docker:didn</a>

https://hub.docker.com/r/frolvlad/alpine-glibc/ μ—μ„œ glibc와 ν•¨κ»˜ μ•ŒνŒŒμΈ 이미지λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
aws μ„€λͺ…μ„œμ˜ 단계에 따라 aws cliλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆλ‹€.

@blagerweij 도컀 μ΄λ―Έμ§€μ—μ„œ 도컀와 ν•¨κ»˜ 슀크립트λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. aws cliλŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€. 방금 λΉŒλ“œμ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

@amiram 예, λ˜ν•œ ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό https://github.com/envoyproxy/envoy/issues/9078#issuecomment -576837432 μ°Έμ‘°

λˆ„κ΅°κ°€ 이 문제의 이름을 "alpine/musl용 λ°”μ΄λ„ˆλ¦¬ 배포"와 같이 λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

@joguSD @jordanst3wart

예, "alpine / musl libc용 λ°”μ΄λ„ˆλ¦¬ 배포"에 λ§Œμ‘±ν•©λ‹ˆλ‹€. λ¬Έμ œκ°€ 있으면 μ•Œλ €μ£Όμ„Έμš”

μ—΄μ • ν”„λ‘œμ νŠΈμ—λŠ” aws s3 cp만 ν•„μš”ν•˜λ―€λ‘œ pip둜 awscli V1을 μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€.

FROM alpine:3.12
RUN pip install awscli        
RUN aws s3 ..

acceptopenjdk 이미지가 μž‘λ™ν•˜λŠ” μ΄μœ λŠ” λˆ„λ½λœ glibc λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ•ŒνŒŒμΈ λ¦¬λˆ…μŠ€λŠ” μ™„μ „ν•œ glibc에 λŒ€ν•œ κ²½λŸ‰ λŒ€μ•ˆμΈ 'musl glibc'λ₯Ό 기반으둜 ν•©λ‹ˆλ‹€. aws cli v2 λ°”μ΄λ„ˆλ¦¬λŠ” muslμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° μž‘λ™ν•˜λ €λ©΄ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λͺ‡ 개 더 ν•„μš”ν•©λ‹ˆλ‹€.

Java 이미지λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  μ•„λž˜ Dockerfile을 Alpine Linuxμ—μ„œ AWS CLI v2λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μ˜ 예둜 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν•œμ‘°κ°

μœ„μ˜ λ‚΄μš©μ€ glibc 라이브러리λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  AWS CLI v2λ₯Ό λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜ν•˜λ©° μžλ™ μ™„μ„±κ³Ό 같이 ν•„μš”ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” 일뢀 ν•­λͺ©μ„ μ œκ±°ν•©λ‹ˆλ‹€. κ²°κ³Ό μ΄λ―Έμ§€μ˜ ν¬κΈ°λŠ” μ•½ 100MBμž…λ‹ˆλ‹€.

이 쑰정은 glibc 버전을 ν•˜λ“œ μ½”λ”©ν•˜μ§€ μ•ŠμœΌλ €λ©΄ μžλ™μœΌλ‘œ μ΅œμ‹  버전을 κ°€μ Έμ˜΅λ‹ˆλ‹€.

FROM alpine

# install glibc compatibility for alpine
RUN apk --no-cache add \
    binutils \
    curl \
    && GLIBC_VER=$(curl -s https://api.github.com/repos/sgerrand/alpine-pkg-glibc/releases/latest | grep tag_name | cut -d : -f 2,3 | tr -d \",' ') \
    && curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk \
    && curl -sLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk \
    && apk add --no-cache \
    glibc-${GLIBC_VER}.apk \
    glibc-bin-${GLIBC_VER}.apk \
    && curl -sL https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip \
    && unzip awscliv2.zip \
    && aws/install \
    && rm -rf \
    awscliv2.zip \
    aws \
    /usr/local/aws-cli/v2/*/dist/aws_completer \
    /usr/local/aws-cli/v2/*/dist/awscli/data/ac.index \
    /usr/local/aws-cli/v2/*/dist/awscli/examples \
    && apk --no-cache del \
    binutils \
    curl \
    && rm glibc-${GLIBC_VER}.apk \
    && rm glibc-bin-${GLIBC_VER}.apk \
    && rm -rf /var/cache/apk/*

Alpine Linuxμ—μ„œ AWS CLI v2λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μ˜ 예둜 μ•„λž˜ Dockerfile을 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

제곡된 Dockerfile/scriptλŠ” μž‘λ™ν•˜μ§€λ§Œ μž‘λ™μ„ λ°©ν•΄ν•˜μ§€ μ•ŠλŠ” 이 였λ₯˜λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

aws/install: line 78: /aws/dist/aws: not found

μ΄μƒν•˜κ²Œλ„ apk add mandoc 직전에 aws/install ν•˜λ©΄ 이 였λ₯˜κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμœΌλ©° μ„€μΉ˜ ν›„ ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό μ‚­μ œν•΄λ„ μ•„λ¬΄λŸ° 영ν–₯이 μ—†μŠ΅λ‹ˆλ‹€. μž„μ˜μ˜ λ‹€λ₯Έ νŒ¨ν‚€μ§€λŠ” μ΄λŸ¬ν•œ 보호 νš¨κ³Όκ°€ μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄κ²¬μžˆλŠ” μ‚¬λžŒ?

PS apk add less λŠ” aws help κ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ” 데 ν•„μš”ν•©λ‹ˆλ‹€(그렇지 μ•ŠμœΌλ©΄ groff νŒ¨ν‚€μ§€ λˆ„λ½μ— λŒ€ν•΄ λΆˆν‰ν•©λ‹ˆλ‹€).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰