티스토리 뷰

개요

Dockerfile과는 별개로 FROM 절에 바꿔주고 싶은 값이 2개 이상일 때가 있습니다.

예를들면 아래와 같이 HOST도 바꿔주고 싶고 버젼도 동적으로 바꿔주고 싶을때 입니다.

 

FROM gcr.io/nginx:1.1

위 FROM절에서 gcr.io를 hello.world 등으로 동적으로 바꾸고 싶을 때가 있습니다.

 

docker build -t gcr.io/nginx -f Dockerfile --build-arg REPO_HOST="hello.world" --build-arg VERSION="1.1"

그럴 때 위 명령어로 빌드를 하고 Dockerfile에는 ARG를 선언 해줍니다.

특이한점으로는 변수마다 --build-arg를 붙여주어야 한다는 것입니다.

 

Dockerfile

ARG REPO_HOST
ARG VERSION

FROM $REPO_HOST/nginx:$VERSION

이렇게 실행 하면 FROM절에 위 build 커맨드에서 --build-arg로 넘겨준 값이 들어옵니다.

하지만 아래와 같이 ARG와 FROM사이에서 RUN을 이용해 echo를 찍거나 변수를 이용하려고 하면 에러가 납니다. RUN은 FROM다음에 써주어야 하기 때문입니다.

 

Dockerfile

ARG REPO_HOST
ARG VERSION

RUN echo "$REPO_HOST"

FROM $REPO_HOST/nginx:$VERSION

위 Dockerfile을 이용해 빌드를 하려고 하면 에러가 납니다.

여기에서 REPO_HOST, VERSION변수는 FROM전에만 쓸 수 있습니다. Docker의 빌드 단계는 FROM전과 후로 스쿱(Scope)이 다르기 때문입니다.

 

ARG로 받은 변수를 FROM절 아래에서 출력 하려고 시도하면 빈칸으로 나옵니다.

 

Dockerfile

ARG REPO_HOST
ARG VERSION

FROM $REPO_HOST/nginx:$VERSION

RUN echo "REPO_HOST: {$REPO_HOST}"

다시 아래 명령어로 빌드를 해봅니다.

docker build -t gcr.io/nginx -f Dockerfile --build-arg REPO_HOST="hello.world" --build-arg VERSION="1.1"

 

결과
REPO_HOST: {}

 

위와 같이 변수가 출력이 안되는 것을 확인 할 수 있습니다. ({}는 가독성을 위해 넣었습니다.)

그러면 --build-arg를 FROM절 아래에서도 사용하려면 어떻게 해야 할까요?

 

Dockerfile

ARG REPO_HOST
ARG VERSION

FROM $REPO_HOST/nginx:$VERSION

ARG REPO_HOST
ARG VERSION

RUN echo "REPO_HOST: {$REPO_HOST}"

위와 같이 반복이 되긴 하지만 FROM아래에도 한번 더 선언 해주면 됩니다.

 

결과

REPO_HOST: {hello.world}

 

 

dockerfile SpringBoot

스프링부트 app docker image만들 때 씀

FROM openjdk:8-jdk-alpine
ARG JAR-FILE-PATH=target/hello-1.0.jar
COPY ${JAR_FILE_PATH} app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

 

Python Selenium dockerfile

셀레늄이 돌아가려면 chromedriver가 필요 합니다.  chromedriver가 설치된 docker image를 만드는 dockerfile입니다.

FROM python:3
WORKDIR /usr/src
RUN apt-get -y update
RUN apt install wget
RUN apt install unzip  
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt -y install ./google-chrome-stable_current_amd64.deb
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/` curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN mkdir chrome
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/src/chrome


# BUILD
ENV PYTHONPATH "${PYTHONPATH}:/app"
RUN mkdir app
ADD . /app
WORKDIR /app
RUN python3 -V
RUN chmod 755 "/usr/src/chrome/chromedriver"
RUN ls /usr/src/chrome
RUN pip install -r requirements.txt
ENTRYPOINT ["python3", "./batch/main.py"]

./batch/main.py를 실행합니다.

 

end.

 

참고

blog.bitsrc.io/how-to-pass-environment-info-during-docker-builds-1f7c5566dd0e

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함