dockerhub의 automated build에서 임의의 docker build 명령을 사용하여 단일 Dockerfile에서 설정을 동적으로 변경하여 여러 이미지를 빌드합니다.
8869 단어 dockerfile도커DockerHub
개요
dockerhub에는 automated build라는 기능이 있습니다.Dockerfile
를 포함한 github 리포지토리를 연결하면 dockerhub 빌드 서버에서 CI로 자동으로 이미지를 빌드합니다.
이 repository에 hooks/build
파일을 두면 빌드를 임의의 명령으로 재정의할 수 있습니다.
또, 그 때에 여러가지 환경 변수를 참조할 수 있으므로, 그것을 --build-arg
에 걸치는 것으로, 생성하는 이미지에 동적으로 파라미터를 설정할 수 있습니다.
빌드 후크 정보
hooks/build
를 작성해 두면, automated build시에 훅 해 빌드의 거동을 오버라이드(override) 할 수 있습니다.
hooks/build#!/bin/bash
set -eu
docker build -t $IMAGE_NAME .
(↑이 hooks/build
의 예라면 디폴트 거동과 특별히 차이는 없습니다만)
이 기능에 대해 Docker Cloud 문서에는 설명이 있습니다 ( htps : // / cs. 도 c r. 코 m / 도 c 케 r-c ぉ d / 부이 lds / 아 d ).
Docker Hub에 대한 문서를 찾을 수 없었지만 비슷한 방식으로 작동하는 것 같습니다.
하지만 일부 환경 변수가 Docker Cloud 문서와 일치하지 않는 것 같습니다.
(또한, 이 문서에 의하면, hooks/build
이외에도 훅 포인트가 있는 것 같습니다 (시험하고 있지 않습니다))
빌드 후크에서 참조할 수 있는 환경 변수
hooks/build
에 env
명령을 넣어 어떤 환경 변수가 설정되는지 보았습니다.
Github repo는 htps : // 기주 b. 코 m / 츠치에 에에 / 도 c 케 r 쿠다 py 3 3 , exper/echo-env
라는 브랜치에 add env to hooks/build
다양한 환경 변수를 얻을 수 있음을 알 수 있습니다.
HOSTNAME=287ed2d96aaa
DOCKER_REPO=index.docker.io/tuttieee/cuda-python3
DOCKER_HOST=unix:///var/run/docker.sock
SOURCE_BRANCH=exper/echo-env
PYTHONUNBUFFERED=1
PUSH=true
GIT_SHA1=3c8f459ac08b2c4c5a7e3fbf74d9f8b44d2cf621
BUILD_PATH=/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SIGNED_URLS={"post": {"debug": {"url": "https://docker-highland-p1-debug-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kZWJ1Zy1sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "6oUI+zAq8ZUDnepttUsvySwYIUU="}}, "metrics": {"url": "https://docker-highland-p1-metrics-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1tZXRyaWNzLWxvZ3MifSwgeyJrZXkiOiAiYjl2cXFpdHB2Z2hrY3Bkdzd4anY5d20ubG9nIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "z2wmXnjeua6ahyvuf1ZJSPzK9kg="}}, "readme": {"url": "https://docker-highland-p1-readmes.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1yZWFkbWVzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLm1kIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.md", "signature": "xdomB7XZmq1DZ8x58BbirJZEMAc="}}, "dockerfile": {"url": "https://docker-highland-p1-dockerfiles.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kb2NrZXJmaWxlcyJ9LCB7ImtleSI6ICJiOXZxcWl0cHZnaGtjcGR3N3hqdjl3bS5Eb2NrZXJmaWxlIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.Dockerfile", "signature": "hHB0CYrXcOxmcQwba6f2FP7A66A="}}, "logs": {"url": "https://s3.amazonaws.com/docker-highland-p1-build_logs", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1idWlsZF9sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "lkuVdZEd4UOX2wUNZKIy02v6R6M="}}}, "get": {}}
DOCKER_TAG=exper_echo-env
GIT_MSG=add env to hooks/build
COMMIT_MSG=add env to hooks/build
PWD=/src/b9vqqitpvghkcpdw7xjv9wm
BUILD_CODE=b9vqqitpvghkcpdw7xjv9wm
IMAGE_NAME=index.docker.io/tuttieee/cuda-python3:exper_echo-env
HOME=/root
SHLVL=1
DOCKERCFG={"https://index.docker.io/v1/": {"email": "[email protected]", "auth": "dHV0dGllZWU6ZTc4ODRjMWYtNWUyOS00MmFhLThhNmItMjBiOGYzNTNjZjkx"}}
DOCKERFILE_PATH=
DEBIAN_FRONTEND=noninteractive
CACHE_TAG=
SOURCE_TYPE=git
MAX_LOG_SIZE=67108864
예
이상의 구조를 실제로 이용해 보았습니다.
여기서는 nvidia/cuda
를 기본 이미지로 사용하여 python3을 설치 한 Docker 이미지 만 만들었습니다.
htps : // 기주 b. 코 m / 츠치에 에에 / 도 c 케 r 쿠다 py 3 3
nvidia/cuda
는, tag에 의해 다양한 바리에이션의 이미지를 구분할 수 있습니다 ( htps : // 후 b. 도 c r. 코 m/r/응ぃぢ아/쿠다/ ).
여기에서는 각 tag를 베이스로 빌드한 각종의 이미지를 만들고 싶습니다( nvidia/cuda:9.2-runtime-ubuntu16.04
를 베이스로 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
를 빌드, nvidia/cuda:9.1-base-ubuntu17.04
를 베이스로 tuttieee/cuda-python3:9.1-base-ubuntu17.04
를 빌드,……와 같이).
베이스 이미지의 tag마다 별도의 Dockerfile을 만들어 관리하는 것은 힘들므로 피하고 싶습니다.
그래서 FROM
(베이스 이미지)를 ARG
로 동적으로 변경할 수 있도록 한 Dockerfile
를 하나만 만들고 빌드시에 동적으로 설정하도록 합니다.
※ Docker 17.05에서 ARG
로 설정한 변수를 FROM
로 참조할 수 있게 되어 있습니다.
DockerfileARG BASE_TAG
FROM nvidia/cuda:${BASE_TAG}
# Python3のインストールなど
# ...
# ...
그런 다음 hooks/build
를 준비하고 환경 변수를 기반으로 --build-arg
를 설정합니다.
hooks/build#!/bin/bash
set -eu
if [ "$DOCKERFILE_PATH" = "" ]; then
DOCKERFILE_PATH_ARG=""
else
DOCKERFILE_PATH_ARG="-f $DOCKERFILE_PATH"
fi
docker build --build-arg BASE_TAG=${DOCKER_TAG} ${DOCKERFILE_PATH_ARG} -t $IMAGE_NAME .
이상을 Github에 push하고 repo와 연관된 automated build를 작성합니다.
이 예에서는 htps //w w. ㄹㄹㄴㄴㄴㄴ g. 코 m / b ぉ g / 2017 / 우세 - rg - c r r ぃぇ - dy nami c eumge - s ぺし ふぃ 카치 온 입니다.
그런 다음 Build Settings를 다음과 같이 설정합니다.
htps : // 후 b. 도 c r. 코 m / r / 츠치 에에 / 쿠다 py 텐 3 /
예를 들어 Docker Tag Name = 9.2-runtime-ubuntu16.04
의 설정에서는 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
가 빌드됩니다.
이 때에 hooks/build
와 Dockerfile
의 ARG 의 설정에 의해, 베이스 이미지로서 nvidia/cuda:9.2-runtime-ubuntu16.04
가 사용됩니다.
이 톤으로 각 Tag를 설정해 가면, nvidia/cuda
의 각 Tag를 베이스로 한, 복수의 오리지날의 Docker 이미지가 자동으로 빌드 되게 됩니다.
Reference
이 문제에 관하여(dockerhub의 automated build에서 임의의 docker build 명령을 사용하여 단일 Dockerfile에서 설정을 동적으로 변경하여 여러 이미지를 빌드합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/whitphx/items/69e35ade3428075481ef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
hooks/build
를 작성해 두면, automated build시에 훅 해 빌드의 거동을 오버라이드(override) 할 수 있습니다.hooks/build
#!/bin/bash
set -eu
docker build -t $IMAGE_NAME .
(↑이
hooks/build
의 예라면 디폴트 거동과 특별히 차이는 없습니다만)이 기능에 대해 Docker Cloud 문서에는 설명이 있습니다 ( htps : // / cs. 도 c r. 코 m / 도 c 케 r-c ぉ d / 부이 lds / 아 d ).
Docker Hub에 대한 문서를 찾을 수 없었지만 비슷한 방식으로 작동하는 것 같습니다.
하지만 일부 환경 변수가 Docker Cloud 문서와 일치하지 않는 것 같습니다.
(또한, 이 문서에 의하면,
hooks/build
이외에도 훅 포인트가 있는 것 같습니다 (시험하고 있지 않습니다))빌드 후크에서 참조할 수 있는 환경 변수
hooks/build
에 env
명령을 넣어 어떤 환경 변수가 설정되는지 보았습니다.
Github repo는 htps : // 기주 b. 코 m / 츠치에 에에 / 도 c 케 r 쿠다 py 3 3 , exper/echo-env
라는 브랜치에 add env to hooks/build
다양한 환경 변수를 얻을 수 있음을 알 수 있습니다.
HOSTNAME=287ed2d96aaa
DOCKER_REPO=index.docker.io/tuttieee/cuda-python3
DOCKER_HOST=unix:///var/run/docker.sock
SOURCE_BRANCH=exper/echo-env
PYTHONUNBUFFERED=1
PUSH=true
GIT_SHA1=3c8f459ac08b2c4c5a7e3fbf74d9f8b44d2cf621
BUILD_PATH=/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SIGNED_URLS={"post": {"debug": {"url": "https://docker-highland-p1-debug-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kZWJ1Zy1sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "6oUI+zAq8ZUDnepttUsvySwYIUU="}}, "metrics": {"url": "https://docker-highland-p1-metrics-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1tZXRyaWNzLWxvZ3MifSwgeyJrZXkiOiAiYjl2cXFpdHB2Z2hrY3Bkdzd4anY5d20ubG9nIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "z2wmXnjeua6ahyvuf1ZJSPzK9kg="}}, "readme": {"url": "https://docker-highland-p1-readmes.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1yZWFkbWVzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLm1kIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.md", "signature": "xdomB7XZmq1DZ8x58BbirJZEMAc="}}, "dockerfile": {"url": "https://docker-highland-p1-dockerfiles.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kb2NrZXJmaWxlcyJ9LCB7ImtleSI6ICJiOXZxcWl0cHZnaGtjcGR3N3hqdjl3bS5Eb2NrZXJmaWxlIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.Dockerfile", "signature": "hHB0CYrXcOxmcQwba6f2FP7A66A="}}, "logs": {"url": "https://s3.amazonaws.com/docker-highland-p1-build_logs", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1idWlsZF9sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "lkuVdZEd4UOX2wUNZKIy02v6R6M="}}}, "get": {}}
DOCKER_TAG=exper_echo-env
GIT_MSG=add env to hooks/build
COMMIT_MSG=add env to hooks/build
PWD=/src/b9vqqitpvghkcpdw7xjv9wm
BUILD_CODE=b9vqqitpvghkcpdw7xjv9wm
IMAGE_NAME=index.docker.io/tuttieee/cuda-python3:exper_echo-env
HOME=/root
SHLVL=1
DOCKERCFG={"https://index.docker.io/v1/": {"email": "[email protected]", "auth": "dHV0dGllZWU6ZTc4ODRjMWYtNWUyOS00MmFhLThhNmItMjBiOGYzNTNjZjkx"}}
DOCKERFILE_PATH=
DEBIAN_FRONTEND=noninteractive
CACHE_TAG=
SOURCE_TYPE=git
MAX_LOG_SIZE=67108864
예
이상의 구조를 실제로 이용해 보았습니다.
여기서는 nvidia/cuda
를 기본 이미지로 사용하여 python3을 설치 한 Docker 이미지 만 만들었습니다.
htps : // 기주 b. 코 m / 츠치에 에에 / 도 c 케 r 쿠다 py 3 3
nvidia/cuda
는, tag에 의해 다양한 바리에이션의 이미지를 구분할 수 있습니다 ( htps : // 후 b. 도 c r. 코 m/r/응ぃぢ아/쿠다/ ).
여기에서는 각 tag를 베이스로 빌드한 각종의 이미지를 만들고 싶습니다( nvidia/cuda:9.2-runtime-ubuntu16.04
를 베이스로 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
를 빌드, nvidia/cuda:9.1-base-ubuntu17.04
를 베이스로 tuttieee/cuda-python3:9.1-base-ubuntu17.04
를 빌드,……와 같이).
베이스 이미지의 tag마다 별도의 Dockerfile을 만들어 관리하는 것은 힘들므로 피하고 싶습니다.
그래서 FROM
(베이스 이미지)를 ARG
로 동적으로 변경할 수 있도록 한 Dockerfile
를 하나만 만들고 빌드시에 동적으로 설정하도록 합니다.
※ Docker 17.05에서 ARG
로 설정한 변수를 FROM
로 참조할 수 있게 되어 있습니다.
DockerfileARG BASE_TAG
FROM nvidia/cuda:${BASE_TAG}
# Python3のインストールなど
# ...
# ...
그런 다음 hooks/build
를 준비하고 환경 변수를 기반으로 --build-arg
를 설정합니다.
hooks/build#!/bin/bash
set -eu
if [ "$DOCKERFILE_PATH" = "" ]; then
DOCKERFILE_PATH_ARG=""
else
DOCKERFILE_PATH_ARG="-f $DOCKERFILE_PATH"
fi
docker build --build-arg BASE_TAG=${DOCKER_TAG} ${DOCKERFILE_PATH_ARG} -t $IMAGE_NAME .
이상을 Github에 push하고 repo와 연관된 automated build를 작성합니다.
이 예에서는 htps //w w. ㄹㄹㄴㄴㄴㄴ g. 코 m / b ぉ g / 2017 / 우세 - rg - c r r ぃぇ - dy nami c eumge - s ぺし ふぃ 카치 온 입니다.
그런 다음 Build Settings를 다음과 같이 설정합니다.
htps : // 후 b. 도 c r. 코 m / r / 츠치 에에 / 쿠다 py 텐 3 /
예를 들어 Docker Tag Name = 9.2-runtime-ubuntu16.04
의 설정에서는 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
가 빌드됩니다.
이 때에 hooks/build
와 Dockerfile
의 ARG 의 설정에 의해, 베이스 이미지로서 nvidia/cuda:9.2-runtime-ubuntu16.04
가 사용됩니다.
이 톤으로 각 Tag를 설정해 가면, nvidia/cuda
의 각 Tag를 베이스로 한, 복수의 오리지날의 Docker 이미지가 자동으로 빌드 되게 됩니다.
Reference
이 문제에 관하여(dockerhub의 automated build에서 임의의 docker build 명령을 사용하여 단일 Dockerfile에서 설정을 동적으로 변경하여 여러 이미지를 빌드합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/whitphx/items/69e35ade3428075481ef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
HOSTNAME=287ed2d96aaa
DOCKER_REPO=index.docker.io/tuttieee/cuda-python3
DOCKER_HOST=unix:///var/run/docker.sock
SOURCE_BRANCH=exper/echo-env
PYTHONUNBUFFERED=1
PUSH=true
GIT_SHA1=3c8f459ac08b2c4c5a7e3fbf74d9f8b44d2cf621
BUILD_PATH=/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SIGNED_URLS={"post": {"debug": {"url": "https://docker-highland-p1-debug-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kZWJ1Zy1sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "6oUI+zAq8ZUDnepttUsvySwYIUU="}}, "metrics": {"url": "https://docker-highland-p1-metrics-logs.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1tZXRyaWNzLWxvZ3MifSwgeyJrZXkiOiAiYjl2cXFpdHB2Z2hrY3Bkdzd4anY5d20ubG9nIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "z2wmXnjeua6ahyvuf1ZJSPzK9kg="}}, "readme": {"url": "https://docker-highland-p1-readmes.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1yZWFkbWVzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLm1kIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.md", "signature": "xdomB7XZmq1DZ8x58BbirJZEMAc="}}, "dockerfile": {"url": "https://docker-highland-p1-dockerfiles.s3.amazonaws.com/", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1kb2NrZXJmaWxlcyJ9LCB7ImtleSI6ICJiOXZxcWl0cHZnaGtjcGR3N3hqdjl3bS5Eb2NrZXJmaWxlIn1dLCAiZXhwaXJhdGlvbiI6ICIyMDE4LTA5LTE5VDE2OjE2OjA5WiJ9", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.Dockerfile", "signature": "hHB0CYrXcOxmcQwba6f2FP7A66A="}}, "logs": {"url": "https://s3.amazonaws.com/docker-highland-p1-build_logs", "fields": {"policy": "eyJjb25kaXRpb25zIjogW1siY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCA2NzEwODg2NF0sIHsiYnVja2V0IjogImRvY2tlci1oaWdobGFuZC1wMS1idWlsZF9sb2dzIn0sIHsia2V5IjogImI5dnFxaXRwdmdoa2NwZHc3eGp2OXdtLmxvZyJ9XSwgImV4cGlyYXRpb24iOiAiMjAxOC0wOS0xOVQxNjoxNjowOVoifQ==", "AWSAccessKeyId": "AKIAIA35NOZ7FSTHT73Q", "key": "b9vqqitpvghkcpdw7xjv9wm.log", "signature": "lkuVdZEd4UOX2wUNZKIy02v6R6M="}}}, "get": {}}
DOCKER_TAG=exper_echo-env
GIT_MSG=add env to hooks/build
COMMIT_MSG=add env to hooks/build
PWD=/src/b9vqqitpvghkcpdw7xjv9wm
BUILD_CODE=b9vqqitpvghkcpdw7xjv9wm
IMAGE_NAME=index.docker.io/tuttieee/cuda-python3:exper_echo-env
HOME=/root
SHLVL=1
DOCKERCFG={"https://index.docker.io/v1/": {"email": "[email protected]", "auth": "dHV0dGllZWU6ZTc4ODRjMWYtNWUyOS00MmFhLThhNmItMjBiOGYzNTNjZjkx"}}
DOCKERFILE_PATH=
DEBIAN_FRONTEND=noninteractive
CACHE_TAG=
SOURCE_TYPE=git
MAX_LOG_SIZE=67108864
이상의 구조를 실제로 이용해 보았습니다.
여기서는
nvidia/cuda
를 기본 이미지로 사용하여 python3을 설치 한 Docker 이미지 만 만들었습니다.htps : // 기주 b. 코 m / 츠치에 에에 / 도 c 케 r 쿠다 py 3 3
nvidia/cuda
는, tag에 의해 다양한 바리에이션의 이미지를 구분할 수 있습니다 ( htps : // 후 b. 도 c r. 코 m/r/응ぃぢ아/쿠다/ ).여기에서는 각 tag를 베이스로 빌드한 각종의 이미지를 만들고 싶습니다(
nvidia/cuda:9.2-runtime-ubuntu16.04
를 베이스로 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
를 빌드, nvidia/cuda:9.1-base-ubuntu17.04
를 베이스로 tuttieee/cuda-python3:9.1-base-ubuntu17.04
를 빌드,……와 같이).베이스 이미지의 tag마다 별도의 Dockerfile을 만들어 관리하는 것은 힘들므로 피하고 싶습니다.
그래서
FROM
(베이스 이미지)를 ARG
로 동적으로 변경할 수 있도록 한 Dockerfile
를 하나만 만들고 빌드시에 동적으로 설정하도록 합니다.※ Docker 17.05에서
ARG
로 설정한 변수를 FROM
로 참조할 수 있게 되어 있습니다.Dockerfile
ARG BASE_TAG
FROM nvidia/cuda:${BASE_TAG}
# Python3のインストールなど
# ...
# ...
그런 다음
hooks/build
를 준비하고 환경 변수를 기반으로 --build-arg
를 설정합니다.hooks/build
#!/bin/bash
set -eu
if [ "$DOCKERFILE_PATH" = "" ]; then
DOCKERFILE_PATH_ARG=""
else
DOCKERFILE_PATH_ARG="-f $DOCKERFILE_PATH"
fi
docker build --build-arg BASE_TAG=${DOCKER_TAG} ${DOCKERFILE_PATH_ARG} -t $IMAGE_NAME .
이상을 Github에 push하고 repo와 연관된 automated build를 작성합니다.
이 예에서는 htps //w w. ㄹㄹㄴㄴㄴㄴ g. 코 m / b ぉ g / 2017 / 우세 - rg - c r r ぃぇ - dy nami c eumge - s ぺし ふぃ 카치 온 입니다.
그런 다음 Build Settings를 다음과 같이 설정합니다.
htps : // 후 b. 도 c r. 코 m / r / 츠치 에에 / 쿠다 py 텐 3 /
예를 들어 Docker Tag Name =
9.2-runtime-ubuntu16.04
의 설정에서는 tuttieee/cuda-python3:9.2-runtime-ubuntu16.04
가 빌드됩니다.이 때에
hooks/build
와 Dockerfile
의 ARG 의 설정에 의해, 베이스 이미지로서 nvidia/cuda:9.2-runtime-ubuntu16.04
가 사용됩니다.이 톤으로 각 Tag를 설정해 가면,
nvidia/cuda
의 각 Tag를 베이스로 한, 복수의 오리지날의 Docker 이미지가 자동으로 빌드 되게 됩니다.
Reference
이 문제에 관하여(dockerhub의 automated build에서 임의의 docker build 명령을 사용하여 단일 Dockerfile에서 설정을 동적으로 변경하여 여러 이미지를 빌드합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/whitphx/items/69e35ade3428075481ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)