├── .gitignore ├── Dockerfile ├── Makefile ├── docker-compose.yml └── docker-lib.sh /.gitignore: -------------------------------------------------------------------------------- 1 | entrykit* 2 | cached-graph/ 3 | *~ 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.3 2 | MAINTAINER Yusuke KUOKA 3 | 4 | ENV DOCKER_VERSION=1.11.1 \ 5 | DOCKER_COMPOSE_VERSION=1.7.1 6 | 7 | # Install Docker, Docker Compose 8 | RUN apk --update --no-cache \ 9 | add curl device-mapper mkinitfs zsh e2fsprogs e2fsprogs-extra iptables && \ 10 | curl https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz | tar zx && \ 11 | mv /docker/* /bin/ && chmod +x /bin/docker* \ 12 | && \ 13 | apk add py-pip && \ 14 | pip install docker-compose==${DOCKER_COMPOSE_VERSION} 15 | 16 | COPY ./entrykit /bin/entrykit 17 | 18 | RUN chmod +x /bin/entrykit && entrykit --symlink 19 | 20 | COPY ./docker-compose.yml /src/ 21 | 22 | WORKDIR /src 23 | 24 | RUN echo $'#!/bin/zsh \n\ 25 | /bin/docker daemon' > /bin/docker-daemon && chmod +x /bin/docker-daemon 26 | 27 | RUN echo $'#!/bin/zsh \n\ 28 | docker info && \n\ 29 | /usr/bin/docker-compose pull && \n\ 30 | echo Cloning /var/lib/docker to /cached-graph... && \n\ 31 | ls -lah /var/lib/docker' > /bin/docker-compose-pull && chmod +x /bin/docker-compose-pull 32 | 33 | ENV PREHOOK_PRINT=cat\ /src/docker-compose.yml 34 | ENV SWITCH_PULL="codep docker-daemon docker-compose-pull" 35 | ENV SWITCH_SHELL=zsh 36 | ENV CODEP_DAEMON=/bin/docker\ daemon 37 | ENV CODEP_COMPOSE=/usr/bin/docker-compose\ up 38 | 39 | # Include useful functions to start/stop docker daemon in garden-runc containers on Concourse CI 40 | # Its usage would be something like: source /docker.lib.sh && start_docker "" "" "-g=$(pwd)/graph" 41 | COPY docker-lib.sh /docker-lib.sh 42 | 43 | ENTRYPOINT ["entrykit", "-e"] 44 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | entrykit: 2 | curl -L https://github.com/progrium/entrykit/releases/download/v0.4.0/entrykit_0.4.0_Linux_x86_64.tgz | tar zxv 3 | 4 | build: 5 | docker build -t mumoshu/dcind . 6 | 7 | e2e: 8 | docker run --privileged -v $(shell pwd):/src mumoshu/dcind 9 | 10 | pull: 11 | docker run --privileged -v $(shell pwd):/src --entrypoint switch -v $(shell pwd)/cached-graph:/cached-graph mumoshu/dcind -- pull 12 | 13 | shell: 14 | docker run -it --privileged -v $(shell pwd):/src --entrypoint switch -v $(shell pwd)/cached-graph:/cached-graph mumoshu/dcind -- shell 15 | 16 | push: 17 | docker push mumoshu/dcind 18 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | redis: 4 | image: redis 5 | volumes: 6 | logvolume01: {} 7 | -------------------------------------------------------------------------------- /docker-lib.sh: -------------------------------------------------------------------------------- 1 | # Ref: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh 2 | 3 | sanitize_cgroups() { 4 | mkdir -p /sys/fs/cgroup 5 | mountpoint -q /sys/fs/cgroup || \ 6 | mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup 7 | 8 | mount -o remount,rw /sys/fs/cgroup 9 | 10 | sed -e 1d /proc/cgroups | while read sys hierarchy num enabled; do 11 | if [ "$enabled" != "1" ]; then 12 | # subsystem disabled; skip 13 | continue 14 | fi 15 | 16 | grouping="$(cat /proc/self/cgroup | cut -d: -f2 | grep "\\<$sys\\>")" 17 | if [ -z "$grouping" ]; then 18 | # subsystem not mounted anywhere; mount it on its own 19 | grouping="$sys" 20 | fi 21 | 22 | mountpoint="/sys/fs/cgroup/$grouping" 23 | 24 | mkdir -p "$mountpoint" 25 | 26 | # clear out existing mount to make sure new one is read-write 27 | if mountpoint -q "$mountpoint"; then 28 | umount "$mountpoint" 29 | fi 30 | 31 | mount -n -t cgroup -o "$grouping" cgroup "$mountpoint" 32 | 33 | if [ "$grouping" != "$sys" ]; then 34 | if [ -L "/sys/fs/cgroup/$sys" ]; then 35 | rm "/sys/fs/cgroup/$sys" 36 | fi 37 | 38 | ln -s "$mountpoint" "/sys/fs/cgroup/$sys" 39 | fi 40 | done 41 | } 42 | 43 | start_docker() { 44 | mkdir -p /var/log 45 | mkdir -p /var/run 46 | 47 | sanitize_cgroups 48 | 49 | # check for /proc/sys being mounted readonly, as systemd does 50 | if grep '/proc/sys\s\+\w\+\s\+ro,' /proc/mounts >/dev/null; then 51 | mount -o remount,rw /proc/sys 52 | fi 53 | 54 | local server_args="" 55 | 56 | for registry in $1; do 57 | server_args="${server_args} --insecure-registry ${registry}" 58 | done 59 | 60 | if [ -n "$2" ]; then 61 | server_args="${server_args} --registry-mirror=$2" 62 | fi 63 | 64 | if [ -n "$3" ]; then 65 | server_args="${server_args} -g=$3" 66 | fi 67 | 68 | docker daemon ${server_args} >/tmp/docker.log 2>&1 & 69 | echo $! > /tmp/docker.pid 70 | 71 | trap stop_docker EXIT 72 | 73 | sleep 1 74 | 75 | until docker info >/dev/null 2>&1; do 76 | echo waiting for docker to come up... 77 | sleep 1 78 | done 79 | } 80 | 81 | stop_docker() { 82 | local pid=$(cat /tmp/docker.pid) 83 | if [ -z "$pid" ]; then 84 | return 0 85 | fi 86 | 87 | kill -TERM $pid 88 | wait $pid 89 | } 90 | --------------------------------------------------------------------------------