티스토리 뷰
개요
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
- 도커컨테이너
- docker container tissue box
- Sh
- Linux
- shellscript
- docker container
- 도커각티슈박스
- docker container whale
- 이직
- 도커티슈박스
- 싱가폴
- 개발자
- 도커각티슈케이스
- 2017 티스토리 결산
- docker container case
- docker container tissue
- 도커티슈케이스
- vim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |