OSS 버전 drone.io를 사용하여 Docker Image 빌드
개요
리포지토리의 Dockerfile을 업데이트한 후 Docker Image를 자동으로 테스트/빌드하고 Registry로 Push할 때까지의 환경을 구축
※Docker 컨테이너내에서 Docke Image 를 빌드하기 위해, Docker in Docker인 환경이 필요
참고
ぇ tp : /// 빠 s. 이오 / 호 w - ー 부이 ld - an d - p p y y - c r - 흠집 s - 우 thd 로네 /
환경
OS : CentOS Linux release 7.1
Docker : 1.8.2, build bb472f0/1.8.2
Docker : Registry: 2.0
drone : 0.3.0-alpha
※Drone, Docker Registry 등의 설치는 할애
빌드 컨테이너
alpine 기반으로 DockerImage 만들기
DockerfileFROM alpine:3.2
RUN apk add --update \
curl \
bash \
openssh \
perl \
git \
btrfs-progs \
e2fsprogs \
iptables \
xz \
&& rm -rf /var/cache/apk/*
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.8.2
ENV DOCKER_SHA256 97a3f5924b0b831a310efa8bf0a4c91956cd6387c4a8667d27e2b2dd3da67e4d
RUN curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/local/bin/docker \
&& echo "${DOCKER_SHA256} /usr/local/bin/docker" | sha256sum -c - \
&& chmod +x /usr/local/bin/docker
ENV DIND_COMMIT b8bed8832b77a478360ae946a69dab5e922b194e
RUN wget "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind" -O /usr/local/bin/dind \
&& chmod +x /usr/local/bin/dind
ADD ./binary/dmsetup /usr/local/bin/dmsetup
RUN chmod +x /usr/local/bin/dmsetup
VOLUME /var/lib/docker
CMD ["wrapdocker"]
리포지토리 구성
/my-repository:branch
|--.drone.yml
|
|--/.drone
| |--build.sh
|
|--Dockerfile
※branch로 각 Dockerfile 관리
.drone.yml
.drone.ymlimage: docker-registry:5000/dind
env:
- DOCKER_DAEMON_ARGS=--insecure-registry docker-registry:5000
script:
- ./.drone/build.sh
notify:
slack:
webhook_url: 'https://hooks.slack.com/services/…
channel: '#my-channel'
username: 'drone.io'
※image 는 alpine 를 베이스로 dind(wrapdocker) 를 인스톨 한 컨테이너를 사용
※registry 에 push 할 때에 에러가 되기 때문에, DOCKER_DAEMON_ARGS 에 insecure-registry 옵션을 지정
(실제는 제대로 증명서를 준비하는 것이 좋다)
※알림은 Slack에게 메시지를 흘린다
빌드 스크립트
build.sh#!/bin/bash
set -e
cd /var/cache/drone/src/path/to/dockerfile
/usr/local/bin/wrapdocker &
sleep 60
docker build -t docker-registry:5000/$DRONE_BRANCH .
docker push docker-registry:5000/$DRONE_BRANCH
※image 는 branch 이름을 붙인다
※환경에 따라서는 wrapdocker 의 기동에 시간이 걸리는 경우도 있었기 때문에 sleep 는 길게 설정
dind 는 privileged 옵션이 필요하기 때문에, 사전에 drone 측의 리포지토리 설정을 privileged 를 유효하게 해 둔다
"private": true,
"privileged": true,
"post_commits": true,
실행
Dockerfile을 적절하게 수정하고 푸시하면 자동으로 테스트가 실행됩니다.
리포지토리의 Dockerfile을 업데이트하면 자동으로 Registry로 푸시되므로 Registry의 Docker Image는 항상 최신 상태가됩니다.
Reference
이 문제에 관하여(OSS 버전 drone.io를 사용하여 Docker Image 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/quickguard/items/3b711fc871f42bf0772d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
OS : CentOS Linux release 7.1
Docker : 1.8.2, build bb472f0/1.8.2
Docker : Registry: 2.0
drone : 0.3.0-alpha
※Drone, Docker Registry 등의 설치는 할애
빌드 컨테이너
alpine 기반으로 DockerImage 만들기
DockerfileFROM alpine:3.2
RUN apk add --update \
curl \
bash \
openssh \
perl \
git \
btrfs-progs \
e2fsprogs \
iptables \
xz \
&& rm -rf /var/cache/apk/*
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.8.2
ENV DOCKER_SHA256 97a3f5924b0b831a310efa8bf0a4c91956cd6387c4a8667d27e2b2dd3da67e4d
RUN curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/local/bin/docker \
&& echo "${DOCKER_SHA256} /usr/local/bin/docker" | sha256sum -c - \
&& chmod +x /usr/local/bin/docker
ENV DIND_COMMIT b8bed8832b77a478360ae946a69dab5e922b194e
RUN wget "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind" -O /usr/local/bin/dind \
&& chmod +x /usr/local/bin/dind
ADD ./binary/dmsetup /usr/local/bin/dmsetup
RUN chmod +x /usr/local/bin/dmsetup
VOLUME /var/lib/docker
CMD ["wrapdocker"]
리포지토리 구성
/my-repository:branch
|--.drone.yml
|
|--/.drone
| |--build.sh
|
|--Dockerfile
※branch로 각 Dockerfile 관리
.drone.yml
.drone.ymlimage: docker-registry:5000/dind
env:
- DOCKER_DAEMON_ARGS=--insecure-registry docker-registry:5000
script:
- ./.drone/build.sh
notify:
slack:
webhook_url: 'https://hooks.slack.com/services/…
channel: '#my-channel'
username: 'drone.io'
※image 는 alpine 를 베이스로 dind(wrapdocker) 를 인스톨 한 컨테이너를 사용
※registry 에 push 할 때에 에러가 되기 때문에, DOCKER_DAEMON_ARGS 에 insecure-registry 옵션을 지정
(실제는 제대로 증명서를 준비하는 것이 좋다)
※알림은 Slack에게 메시지를 흘린다
빌드 스크립트
build.sh#!/bin/bash
set -e
cd /var/cache/drone/src/path/to/dockerfile
/usr/local/bin/wrapdocker &
sleep 60
docker build -t docker-registry:5000/$DRONE_BRANCH .
docker push docker-registry:5000/$DRONE_BRANCH
※image 는 branch 이름을 붙인다
※환경에 따라서는 wrapdocker 의 기동에 시간이 걸리는 경우도 있었기 때문에 sleep 는 길게 설정
dind 는 privileged 옵션이 필요하기 때문에, 사전에 drone 측의 리포지토리 설정을 privileged 를 유효하게 해 둔다
"private": true,
"privileged": true,
"post_commits": true,
실행
Dockerfile을 적절하게 수정하고 푸시하면 자동으로 테스트가 실행됩니다.
리포지토리의 Dockerfile을 업데이트하면 자동으로 Registry로 푸시되므로 Registry의 Docker Image는 항상 최신 상태가됩니다.
Reference
이 문제에 관하여(OSS 버전 drone.io를 사용하여 Docker Image 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/quickguard/items/3b711fc871f42bf0772d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FROM alpine:3.2
RUN apk add --update \
curl \
bash \
openssh \
perl \
git \
btrfs-progs \
e2fsprogs \
iptables \
xz \
&& rm -rf /var/cache/apk/*
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.8.2
ENV DOCKER_SHA256 97a3f5924b0b831a310efa8bf0a4c91956cd6387c4a8667d27e2b2dd3da67e4d
RUN curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/local/bin/docker \
&& echo "${DOCKER_SHA256} /usr/local/bin/docker" | sha256sum -c - \
&& chmod +x /usr/local/bin/docker
ENV DIND_COMMIT b8bed8832b77a478360ae946a69dab5e922b194e
RUN wget "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind" -O /usr/local/bin/dind \
&& chmod +x /usr/local/bin/dind
ADD ./binary/dmsetup /usr/local/bin/dmsetup
RUN chmod +x /usr/local/bin/dmsetup
VOLUME /var/lib/docker
CMD ["wrapdocker"]
/my-repository:branch
|--.drone.yml
|
|--/.drone
| |--build.sh
|
|--Dockerfile
※branch로 각 Dockerfile 관리
.drone.yml
.drone.ymlimage: docker-registry:5000/dind
env:
- DOCKER_DAEMON_ARGS=--insecure-registry docker-registry:5000
script:
- ./.drone/build.sh
notify:
slack:
webhook_url: 'https://hooks.slack.com/services/…
channel: '#my-channel'
username: 'drone.io'
※image 는 alpine 를 베이스로 dind(wrapdocker) 를 인스톨 한 컨테이너를 사용
※registry 에 push 할 때에 에러가 되기 때문에, DOCKER_DAEMON_ARGS 에 insecure-registry 옵션을 지정
(실제는 제대로 증명서를 준비하는 것이 좋다)
※알림은 Slack에게 메시지를 흘린다
빌드 스크립트
build.sh#!/bin/bash
set -e
cd /var/cache/drone/src/path/to/dockerfile
/usr/local/bin/wrapdocker &
sleep 60
docker build -t docker-registry:5000/$DRONE_BRANCH .
docker push docker-registry:5000/$DRONE_BRANCH
※image 는 branch 이름을 붙인다
※환경에 따라서는 wrapdocker 의 기동에 시간이 걸리는 경우도 있었기 때문에 sleep 는 길게 설정
dind 는 privileged 옵션이 필요하기 때문에, 사전에 drone 측의 리포지토리 설정을 privileged 를 유효하게 해 둔다
"private": true,
"privileged": true,
"post_commits": true,
실행
Dockerfile을 적절하게 수정하고 푸시하면 자동으로 테스트가 실행됩니다.
리포지토리의 Dockerfile을 업데이트하면 자동으로 Registry로 푸시되므로 Registry의 Docker Image는 항상 최신 상태가됩니다.
Reference
이 문제에 관하여(OSS 버전 drone.io를 사용하여 Docker Image 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/quickguard/items/3b711fc871f42bf0772d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
image: docker-registry:5000/dind
env:
- DOCKER_DAEMON_ARGS=--insecure-registry docker-registry:5000
script:
- ./.drone/build.sh
notify:
slack:
webhook_url: 'https://hooks.slack.com/services/…
channel: '#my-channel'
username: 'drone.io'
build.sh
#!/bin/bash
set -e
cd /var/cache/drone/src/path/to/dockerfile
/usr/local/bin/wrapdocker &
sleep 60
docker build -t docker-registry:5000/$DRONE_BRANCH .
docker push docker-registry:5000/$DRONE_BRANCH
※image 는 branch 이름을 붙인다
※환경에 따라서는 wrapdocker 의 기동에 시간이 걸리는 경우도 있었기 때문에 sleep 는 길게 설정
dind 는 privileged 옵션이 필요하기 때문에, 사전에 drone 측의 리포지토리 설정을 privileged 를 유효하게 해 둔다
"private": true,
"privileged": true,
"post_commits": true,
실행
Dockerfile을 적절하게 수정하고 푸시하면 자동으로 테스트가 실행됩니다.
리포지토리의 Dockerfile을 업데이트하면 자동으로 Registry로 푸시되므로 Registry의 Docker Image는 항상 최신 상태가됩니다.
Reference
이 문제에 관하여(OSS 버전 drone.io를 사용하여 Docker Image 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/quickguard/items/3b711fc871f42bf0772d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(OSS 버전 drone.io를 사용하여 Docker Image 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/quickguard/items/3b711fc871f42bf0772d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)