11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OSS版 drone.io を使って Docker Image をビルド

Last updated at Posted at 2015-12-16

概要

レポジトリの Dockerfile を更新したら自動で Docker Image をテスト/ビルドして Registry に Push するまでの環境を構築
※Docker コンテナ内で Docke Image をビルドするため、 Docker in Docker な環境が必要

参考
http://paislee.io/how-to-build-and-deploy-docker-images-with-drone/

環境

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 を作成

Dockerfile
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.yml
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'

※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 を適当に修正して push すると自動的にテストが実行

01.png

レポジトリの Dockerfile を更新したら自動で Registry に Push されるため、Registry 上の Docker Image は常に最新の状態になる

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?