├── .circleci └── config.yml ├── .gitignore ├── LICENSE ├── README-short.txt ├── README.md ├── build ├── builder ├── Dockerfile ├── README.md └── scripts │ ├── apk-install │ └── mkimage-alpine.bash ├── docs ├── about.md ├── build.md ├── caveats.md ├── index.md └── usage.md ├── logo.png ├── logo_fastly.png ├── test ├── test_alpine-3.1.bats ├── test_alpine-3.2.bats ├── test_alpine-3.3.bats ├── test_alpine-3.4.bats ├── test_alpine-3.5.bats ├── test_alpine-3.6.bats ├── test_alpine-3.7.bats ├── test_alpine-3.8.bats ├── test_alpine-3.9.bats ├── test_alpine-edge.bats ├── test_gliderlabs_alpine-3.1.bats ├── test_gliderlabs_alpine-3.2.bats ├── test_gliderlabs_alpine-3.3.bats ├── test_gliderlabs_alpine-3.4.bats ├── test_gliderlabs_alpine-3.5.bats ├── test_gliderlabs_alpine-3.6.bats ├── test_gliderlabs_alpine-3.7.bats ├── test_gliderlabs_alpine-3.8.bats ├── test_gliderlabs_alpine-3.9.bats └── test_gliderlabs_alpine-edge.bats └── versions ├── gliderlabs-3.1 ├── Dockerfile └── options ├── gliderlabs-3.2 ├── Dockerfile └── options ├── gliderlabs-3.3 ├── Dockerfile └── options ├── gliderlabs-3.4 ├── Dockerfile └── options ├── gliderlabs-3.5 ├── Dockerfile └── options ├── gliderlabs-3.6 ├── Dockerfile └── options ├── gliderlabs-3.7 ├── Dockerfile └── options ├── gliderlabs-3.8 ├── Dockerfile └── options ├── gliderlabs-3.9 ├── Dockerfile └── options ├── gliderlabs-edge ├── Dockerfile └── options ├── library-3.1 ├── Dockerfile └── options ├── library-3.2 ├── Dockerfile └── options ├── library-3.3 ├── Dockerfile └── options ├── library-3.4 ├── Dockerfile └── options ├── library-3.5 ├── Dockerfile └── options ├── library-3.6 ├── aarch64 │ ├── Dockerfile │ ├── UTC │ └── options ├── armhf │ ├── Dockerfile │ ├── UTC │ └── options ├── ppc64le │ ├── Dockerfile │ ├── UTC │ └── options ├── s390x │ ├── Dockerfile │ ├── UTC │ └── options ├── x86 │ ├── Dockerfile │ ├── UTC │ └── options └── x86_64 │ ├── Dockerfile │ └── options ├── library-3.7 ├── aarch64 │ ├── Dockerfile │ ├── UTC │ └── options ├── armhf │ ├── Dockerfile │ ├── UTC │ └── options ├── ppc64le │ ├── Dockerfile │ ├── UTC │ └── options ├── s390x │ ├── Dockerfile │ ├── UTC │ └── options ├── x86 │ ├── Dockerfile │ ├── UTC │ └── options └── x86_64 │ ├── Dockerfile │ └── options ├── library-3.8 ├── aarch64 │ ├── Dockerfile │ ├── UTC │ └── options ├── armhf │ ├── Dockerfile │ ├── UTC │ └── options ├── ppc64le │ ├── Dockerfile │ ├── UTC │ └── options ├── s390x │ ├── Dockerfile │ ├── UTC │ └── options ├── x86 │ ├── Dockerfile │ ├── UTC │ └── options └── x86_64 │ ├── Dockerfile │ └── options ├── library-3.9 ├── aarch64 │ ├── Dockerfile │ ├── UTC │ └── options ├── armhf │ ├── Dockerfile │ ├── UTC │ └── options ├── ppc64le │ ├── Dockerfile │ ├── UTC │ └── options ├── s390x │ ├── Dockerfile │ ├── UTC │ └── options ├── x86 │ ├── Dockerfile │ ├── UTC │ └── options └── x86_64 │ ├── Dockerfile │ └── options └── library-edge ├── aarch64 ├── Dockerfile ├── UTC └── options ├── armhf ├── Dockerfile ├── UTC └── options ├── ppc64le ├── Dockerfile ├── UTC └── options ├── s390x ├── Dockerfile ├── UTC └── options ├── x86 ├── Dockerfile ├── UTC └── options └── x86_64 ├── Dockerfile └── options /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | parallelism: 4 5 | branches: 6 | ignore: 7 | - /rootfs\/.*/ 8 | docker: 9 | - image: docker:17.03.0-ce 10 | steps: 11 | - setup_remote_docker: 12 | version: 17.03.0-ce 13 | - checkout 14 | - add_ssh_keys 15 | - restore_cache: 16 | key: deps 17 | - run: 18 | name: install bash 19 | command: apk --no-cache add bash git openssh-client xz 20 | - run: 21 | name: avoid hosts unknown for github 22 | command: mkdir -p ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config 23 | - run: 24 | name: install bats 25 | command: | 26 | if [[ ! -e ~/deps/bats_v0.4.0.tar.gz ]]; then mkdir -p ~/deps; curl -sSL -o ~/deps/bats_v0.4.0.tar.gz https://github.com/sstephenson/bats/archive/v0.4.0.tar.gz; fi 27 | tar -xf ~/deps/bats_v0.4.0.tar.gz 28 | bats-0.4.0/install.sh /usr/local 29 | - save_cache: 30 | key: deps 31 | paths: 32 | - ~/deps 33 | - run: 34 | shell: /bin/bash -eo pipefail -O globstar 35 | name: build images 36 | command: ./build $(circleci tests glob versions/**/options | circleci tests split) 37 | - run: 38 | shell: /bin/bash -eo pipefail -O globstar 39 | name: test images 40 | command: ./build test $(circleci tests glob versions/**/options | circleci tests split) 41 | - run: 42 | shell: /bin/bash -eo pipefail -O globstar 43 | name: push images 44 | command: | 45 | if [[ "$CIRCLE_BRANCH" == "release" ]]; then docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASSWORD; fi 46 | ./build push $(circleci tests glob versions/**/options | circleci tests split) 47 | - run: 48 | shell: /bin/bash -eo pipefail -O globstar 49 | name: commit artifacts 50 | command: ./build commit $(circleci tests glob versions/**/options | circleci tests split) 51 | - store_artifacts: 52 | path: images 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /versions/**/rootfs.tar.gz 2 | /versions/**/rootfs.tar.xz 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Glider Labs, LLC 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /README-short.txt: -------------------------------------------------------------------------------- 1 | A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size! 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-alpine 2 | 3 | [![CircleCI](https://img.shields.io/circleci/project/github/gliderlabs/docker-alpine/release.svg)](https://circleci.com/gh/gliderlabs/docker-alpine) 4 | [![Docker Stars](https://img.shields.io/docker/stars/gliderlabs/alpine.svg)][hub] 5 | [![Docker Pulls](https://img.shields.io/docker/pulls/gliderlabs/alpine.svg)][hub] 6 | [![Slack](http://glider-slackin.herokuapp.com/badge.svg)][slack] 7 | 8 | 9 | A super small Docker image based on [Alpine Linux][alpine]. The image is only 5 MB and has access to a package repository that is much more complete than other BusyBox based images. 10 | 11 | ## Why? 12 | 13 | Docker images today are big. Usually much larger than they need to be. There are a lot of ways to make them smaller, but the Docker populace still jumps to the `ubuntu` base image for most projects. The size savings over `ubuntu` and other bases are huge: 14 | 15 | ``` 16 | REPOSITORY TAG IMAGE ID VIRTUAL SIZE 17 | gliderlabs/alpine latest 9cfff538e583 4.803 MB 18 | debian latest 19134a8202e7 123.1 MB 19 | ubuntu latest 104bec311bcd 129 MB 20 | centos latest 67591570dd29 191.8 MB 21 | ``` 22 | 23 | There are images such as `progrium/busybox` which get us very close to a minimal container and package system. But these particular BusyBox builds piggyback on the OpenWRT package index which is often lacking and not tailored towards generic everyday applications. Alpine Linux has a much more complete and up to date [package index][alpine-packages]: 24 | 25 | ```console 26 | $ docker run progrium/busybox opkg-install nodejs 27 | Unknown package 'nodejs'. 28 | Collected errors: 29 | * opkg_install_cmd: Cannot install package nodejs. 30 | 31 | $ docker run gliderlabs/alpine apk add --no-cache nodejs 32 | fetch http://alpine.gliderlabs.com/alpine/v3.3/main/x86_64/APKINDEX.tar.gz 33 | fetch http://alpine.gliderlabs.com/alpine/v3.3/community/x86_64/APKINDEX.tar.gz 34 | (1/4) Installing libgcc (5.3.0-r0) 35 | (2/4) Installing libstdc++ (5.3.0-r0) 36 | (3/4) Installing libuv (1.7.5-r0) 37 | (4/4) Installing nodejs (4.2.3-r0) 38 | Executing busybox-1.24.1-r7.trigger 39 | OK: 29 MiB in 15 packages 40 | ``` 41 | 42 | This makes Alpine Linux a great image base for utilities and even production applications. [Read more about Alpine Linux here][alpine-about] and you can see how their mantra fits in right at home with Docker images. 43 | 44 | ## Usage 45 | 46 | Stop doing this: 47 | 48 | ```dockerfile 49 | FROM ubuntu-debootstrap:14.04 50 | RUN apt-get update -q \ 51 | && DEBIAN_FRONTEND=noninteractive apt-get install -qy mysql-client \ 52 | && apt-get clean \ 53 | && rm -rf /var/lib/apt 54 | ENTRYPOINT ["mysql"] 55 | ``` 56 | This took 19 seconds to build and yields a 164 MB image. Eww. Start doing this: 57 | 58 | ```dockerfile 59 | FROM gliderlabs/alpine:3.4 60 | RUN apk add --no-cache mysql-client 61 | ENTRYPOINT ["mysql"] 62 | ``` 63 | 64 | Only 3 seconds to build and results in a 36 MB image! Hooray! 65 | 66 | ## Documentation 67 | 68 | This image is well documented. [Check out the documentation at Viewdocs][docs] and the `docs` directory in this repository. 69 | 70 | ## Contacts 71 | 72 | We make reasonable efforts to support our work and are always happy to chat. Join us in [our Slack community][slack] or [submit a GitHub issue][issues] if you have a security or other general question about this Docker image. Please email [security](http://lists.alpinelinux.org/alpine-security/summary.html) or [user](http://lists.alpinelinux.org/alpine-user/summary.html) mailing lists if you have concerns specific to Alpine Linux. 73 | 74 | ## Inspiration 75 | 76 | The motivation for this project and modifications to `mkimage.sh` are highly inspired by Eivind Uggedal (uggedal) and Luis Lavena (luislavena). They have made great strides in getting Alpine Linux running as a Docker container. Check out their [mini-container/base][mini-base] image as well. 77 | 78 | ## Sponsors 79 | 80 | [![Fastly](https://github.com/gliderlabs/docker-alpine/raw/master/logo_fastly.png)][fastly] 81 | 82 | [Fastly][fastly] provides the CDN for our Alpine Linux package repository. This allows super speedy package downloads from all over the globe! 83 | 84 | ## License 85 | 86 | The code in this repository, unless otherwise noted, is BSD licensed. See the `LICENSE` file in this repository. 87 | 88 | [mini-base]: https://github.com/mini-containers/base 89 | [alpine-packages]: http://pkgs.alpinelinux.org/ 90 | [alpine-about]: https://www.alpinelinux.org/about/ 91 | [docs]: http://gliderlabs.viewdocs.io/docker-alpine 92 | [slack]: http://glider-slackin.herokuapp.com/ 93 | [issues]: https://github.com/gliderlabs/docker-alpine/issues 94 | [alpine]: http://alpinelinux.org/ 95 | [fastly]: https://www.fastly.com/ 96 | [hub]: https://hub.docker.com/r/gliderlabs/alpine/ 97 | 98 | -------------------------------------------------------------------------------- /build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | shopt -s globstar 4 | 5 | image_pull() { 6 | local pull_url file dir 7 | pull_url="$1" 8 | dir="$2" 9 | file="${pull_url##*/}" 10 | 11 | curl -fSsL "$pull_url" > "$dir/rootfs.tar.gz" 12 | } 13 | 14 | image_build() { 15 | local build_options dir 16 | build_options="$1" 17 | dir="$2" 18 | 19 | [[ "$BUILDER_IMAGE" ]] || { 20 | BUILDER_IMAGE="alpine-builder" 21 | docker build -t "$BUILDER_IMAGE" builder 22 | } 23 | 24 | docker run -e "TRACE=$TRACE" --rm "$BUILDER_IMAGE" "${BUILD_OPTIONS[@]}" \ 25 | > "$version_dir/rootfs.tar.xz" 26 | } 27 | 28 | build() { 29 | declare options_files="${*:-versions/**/options}" 30 | 31 | for file in $options_files; do 32 | ( # shellcheck source=versions/gliderlabs-3.2/options 33 | source "$file" 34 | local version_dir 35 | version_dir="${file%/*}" 36 | arch="${ARCH:-x86_64}" 37 | : "${TAGS:?}" 38 | 39 | [[ "$PULL_URL" ]] && image_pull "$PULL_URL" "$version_dir" 40 | [[ "$BUILD_OPTIONS" ]] && image_build "${BUILD_OPTIONS[@]}" "$version_dir" 41 | 42 | # Build + tag images 43 | for tag in "${TAGS[@]}"; do 44 | docker build -t "$tag" "$version_dir" 45 | 46 | if [[ "$CIRCLE_BUILD_NUM" ]]; then 47 | { 48 | mkdir -p images \ 49 | && docker tag "$tag" "${tag}-${CIRCLE_BUILD_NUM}" \ 50 | && docker save "${tag}-${CIRCLE_BUILD_NUM}" \ 51 | | xz -9e > "images/${tag//\//_}-${CIRCLE_BUILD_NUM}.tar.xz" \ 52 | && docker rmi "${tag}-${CIRCLE_BUILD_NUM}" 53 | } || true 54 | fi 55 | done ) 56 | 57 | done 58 | } 59 | 60 | commit() { 61 | [[ "$CIRCLE_BRANCH" == "release" ]] || return 0 62 | 63 | declare options_files="${*:-versions/**/options}" 64 | local build_num="${CIRCLE_BUILD_NUM:-nobuild}" 65 | local current_branch 66 | current_branch=$(git rev-parse --abbrev-ref HEAD) 67 | : "${current_branch:?}" 68 | 69 | for file in $options_files; do 70 | local release version_dir 71 | version_dir="${file%/*}" 72 | release="${version_dir##versions/}" 73 | 74 | : "${release:?}" "${version_dir:?}" 75 | 76 | git checkout -B "rootfs/$release" "$current_branch" 77 | git add -f -- "$version_dir/rootfs.tar.*" 78 | git commit -m "release image version $release for build $build_num" 79 | done 80 | 81 | [[ "$NO_PUSH" ]] || git push -f origin 'refs/heads/rootfs/*' 82 | git checkout "$current_branch" 83 | } 84 | 85 | run_tests() { 86 | declare options_files="${*:-versions/**/options}" 87 | declare -a test_files 88 | for file in $options_files; do 89 | # shellcheck source=versions/gliderlabs-3.2/options 90 | source "$file" 91 | local tag 92 | tag="${TAGS[0]}" tag="${tag//:/-}" tag="${tag//\//_}" 93 | test_file="test/test_${tag}.bats" 94 | [[ -f "$test_file" ]] && test_files+=("$test_file") || echo " - skipping test for ${tag}: no test file ${test_file}" 95 | done 96 | 97 | [[ "${test_files[@]}" ]] && bats "${test_files[@]}" 98 | } 99 | 100 | push() { 101 | [[ "$CIRCLE_BRANCH" == "release" ]] || return 0 102 | [[ "$NO_PUSH" ]] && return 0 103 | 104 | declare options_files="${*:-versions/**/options}" 105 | for file in $options_files; do 106 | ( #shellcheck source=versions/gliderlabs-3.2/options 107 | source "$file" 108 | for tag in "${TAGS[@]}"; do 109 | if docker history "$tag" &> /dev/null; then 110 | [[ "$PUSH_IMAGE" ]] && docker push "$tag" 111 | fi 112 | done 113 | exit 0 ) 114 | done 115 | } 116 | 117 | library() { 118 | convert() { 119 | # takes a space-separated list of alpine-linux architectures, and returns a space-separated list of docker architectures 120 | local i=0 121 | for arch in "$@"; do 122 | case "$arch" in # converts Alpine Linux arch strings to Docker arch strings 123 | x86_64) echo -n "amd64";; 124 | x86) echo -n "i386";; 125 | armhf) echo -n "arm32v6";; # arm32v7 is not officially supported by Alpine, but arm32v6 should still work. 126 | aarch64) echo -n "arm64v8";; 127 | ppc64le) echo -n "ppc64le";; 128 | s390x) echo -n "s390x";; 129 | *) echo >&2 "error: unknown arch '$arch'"; return 1;; # Fail on unknown archs 130 | esac 131 | if [[ i -ne $#-1 ]]; then 132 | echo -n " " 133 | fi 134 | let i=$i+1 135 | done 136 | } 137 | 138 | local release_refs 139 | release_refs="$(git ls-remote --exit-code --heads origin release)" 140 | : "${release_refs:?}" 141 | 142 | echo 143 | echo "# autogenerated by https://github.com/gliderlabs/docker-alpine/blob/master/build" 144 | echo 145 | echo "Maintainers: Glider Labs (@gliderlabs)" 146 | echo "GitRepo: https://github.com/gliderlabs/docker-alpine.git" 147 | echo "GitFetch: refs/heads/release" 148 | echo "GitCommit: ${release_refs:0:40}" 149 | 150 | for file in versions/library-*/x86_64/options versions/library-*/options; do 151 | # shellcheck source=versions/library-3.2/options 152 | source "$file" 153 | local version_dir release tags 154 | version_dir="${file%/options}" 155 | version_dir="${version_dir%/x86_64}" 156 | release="${version_dir#versions/}" 157 | tags="${TAGS[*]#alpine:}" 158 | if [ -e "$version_dir/options" ]; then 159 | # compatability with older configs that were only written for x86_64 architectures 160 | ARCHS=("x86_64") 161 | else 162 | ARCHS=( "$version_dir"/*/options ) 163 | ARCHS=( "${ARCHS[@]#$version_dir/}" ) 164 | ARCHS=( "${ARCHS[@]%/*}" ) 165 | fi 166 | a="$(convert "${ARCHS[@]}")" 167 | 168 | echo 169 | echo "Tags: ${tags// /, }" 170 | echo "Architectures: ${a// /, }" 171 | 172 | local i=0 173 | for arch in $a; do 174 | # ${ARCHS[i]} is the alpine version string, different from $archs, the docker version string. 175 | # Our folder structure is based on the alpine version string 176 | local branch dir refs 177 | if [ -e "$version_dir/options" ]; then 178 | # compatability with older configs that were only written for x86_64 architectures 179 | branch="rootfs/${release}" 180 | dir="$version_dir" 181 | else 182 | branch="rootfs/${release}/${ARCHS[i]}" 183 | dir="$version_dir/${ARCHS[i]}" 184 | fi 185 | refs="$(git ls-remote --exit-code --heads origin "$branch")" 186 | : "${refs:?}" 187 | echo "$arch-GitFetch: refs/heads/$branch" 188 | echo "$arch-GitCommit: ${refs:0:40}" 189 | echo "$arch-Directory: $dir" 190 | let i=i+1 191 | done 192 | done 193 | echo 194 | } 195 | 196 | main() { 197 | set -eo pipefail; [[ "$TRACE" ]] && set -x 198 | declare cmd="$1" 199 | case "$cmd" in 200 | test) shift; run_tests "$@";; 201 | commit) shift; commit "$@";; 202 | push) shift; push "$@";; 203 | library) shift; library;; 204 | *) build "$@";; 205 | esac 206 | } 207 | 208 | main "$@" 209 | -------------------------------------------------------------------------------- /builder/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | COPY scripts/mkimage-alpine.bash scripts/apk-install / 3 | RUN apk add --no-cache bash tzdata xz 4 | ENTRYPOINT ["/mkimage-alpine.bash"] 5 | -------------------------------------------------------------------------------- /builder/README.md: -------------------------------------------------------------------------------- 1 | # Alpine Linux rootfs Builder 2 | 3 | This builder image constructs a Alpine Linux `rootfs.tar.xz` for us to use when building the base Alpine Linux image. The `mkimage-alpine.sh` script does all the heavy lifting. During the configuration of the image we add our `apk-install` convenience script. 4 | 5 | ## Options 6 | 7 | The builder takes several options: 8 | 9 | * `-r `: The release tag to use (such as `edge` or `v3.1`). 10 | * `-m `: The mirror URL base. Defaults to `http://nl.alpinelinux.org/alpine`. 11 | * `-s`: Outputs the `rootfs.tar.xz` to stdout. 12 | * `-c`: Adds the `apk-install` script to the resulting rootfs. 13 | * `-e`: Adds extra `edge/main` and `edge/testing` pins to the repositories file. 14 | * `-d`: Disables su to root by removing the blank root password. 15 | * `-E`: Does not add `community` to the repositories file (necessary for versions without a community repo). 16 | * `-t `: Sets the timezone. 17 | * `-p `: Comma-separated packages list. Default is `alpine-base`. 18 | * `-b`: Extracts `alpine-base` to the rootfs without dependencies. For images slimmed down with `-p` which still want `/etc/*-release` and `/etc/issue`. 19 | * `-a `: Changes the architecture of the rootfs to download. Default is `x86_64` 20 | -------------------------------------------------------------------------------- /builder/scripts/apk-install: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | apk add --update-cache "$@" && rm -rf /var/cache/apk/* 3 | -------------------------------------------------------------------------------- /builder/scripts/mkimage-alpine.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This mkimage-alpine.sh is a modified version from 4 | # https://github.com/docker/docker/blob/master/contrib/mkimage-alpine.sh. 5 | # Changes were inspired by work done by Eivind Uggedal (uggedal) and 6 | # Luis Lavena (luislavena). 7 | 8 | declare REL="${REL:-edge}" 9 | declare MIRROR="${MIRROR:-http://nl.alpinelinux.org/alpine}" 10 | 11 | set -eo pipefail; [[ "$TRACE" ]] && set -x 12 | 13 | [[ "$(id -u)" -eq 0 ]] || { 14 | printf >&2 '%s requires root\n' "$0" && exit 1 15 | } 16 | 17 | usage() { 18 | printf >&2 '%s: [-r release] [-m mirror] [-a arch] [-s] [-E] [-e] [-c] [-d] [-t timezone] [-p packages] [-b]\n' "$0" && exit 1 19 | } 20 | 21 | build() { 22 | declare mirror="$1" rel="$2" packages=("${3:-alpine-base}") arch="${4:-x86_64}" 23 | 24 | local rootfs 25 | rootfs="$(mktemp -d "${TMPDIR:-/var/tmp}/alpine-docker-rootfs-XXXXXXXXXX")" 26 | 27 | # conf 28 | mkdir -p "$rootfs/etc/apk" 29 | { 30 | echo "$mirror/$rel/main" 31 | [[ "$OMIT_COMMUNITY" ]] || echo "$mirror/$rel/community" 32 | [[ "$REPO_EXTRA" ]] && { 33 | [[ "$rel" == "edge" ]] || echo "@edge $mirror/edge/main" 34 | echo "@testing $mirror/edge/testing" 35 | } 36 | } > "$rootfs/etc/apk/repositories" 37 | 38 | # mkbase 39 | { 40 | # shellcheck disable=SC2086 41 | apk --root "$rootfs" --update-cache --keys-dir /etc/apk/keys \ 42 | add --arch $arch --initdb ${packages[*]//,/ } 43 | [[ "$ADD_BASELAYOUT" ]] && \ 44 | apk --root "$rootfs" --keys-dir /etc/apk/keys \ 45 | fetch --stdout --arch $arch alpine-base | tar -xvz -C "$rootfs" etc 46 | [[ "$TIMEZONE" ]] && { 47 | apk --root "$rootfs" --keys-dir /etc/apk/keys \ 48 | add --arch $arch -t .timezone tzdata 49 | cp "$rootfs/usr/share/zoneinfo/$TIMEZONE" "$rootfs/etc/localtime" 50 | apk --root "$rootfs" --keys-dir /etc/apk/keys \ 51 | del --arch $arch --purge .timezone 52 | } 53 | rm -f "$rootfs/var/cache/apk"/* 54 | [[ "$DISABLE_ROOT_PASSWD" ]] && \ 55 | sed -ie 's/^root::/root:!:/' "$rootfs/etc/shadow" 56 | } >&2 57 | 58 | [[ "$ADD_APK_SCRIPT" ]] && cp /apk-install "$rootfs/usr/sbin/apk-install" 59 | 60 | # save 61 | tar -J -f rootfs.tar.xz --numeric-owner --exclude='dev/*' -C "$rootfs" -c . 62 | [[ "$STDOUT" ]] && cat rootfs.tar.xz 63 | 64 | return 0 65 | } 66 | 67 | main() { 68 | while getopts "hr:m:t:sEecdp:ba:" opt; do 69 | case $opt in 70 | r) REL="$OPTARG";; 71 | m) MIRROR="${OPTARG%/}";; 72 | s) STDOUT=1;; 73 | E) OMIT_COMMUNITY=1;; 74 | e) REPO_EXTRA=1;; 75 | t) TIMEZONE="$OPTARG";; 76 | c) ADD_APK_SCRIPT=1;; 77 | p) PACKAGES="$OPTARG";; 78 | b) ADD_BASELAYOUT=1;; 79 | d) DISABLE_ROOT_PASSWD=1;; 80 | a) ARCH="$OPTARG";; 81 | *) usage;; 82 | esac 83 | done 84 | 85 | build "$MIRROR" "$REL" "$PACKAGES" "$ARCH" 86 | } 87 | 88 | main "$@" 89 | -------------------------------------------------------------------------------- /docs/about.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | [Alpine Linux](http://alpinelinux.org/) is a lightweight Linux distribution based on [musl libc][musl] and [BusyBox][busybox]. The base is extremely small, builds as a Docker image in a matter of minutes, and has a full-featured package index. 4 | 5 | ## musl libc 6 | 7 | musl provides consistent quality and implementation behavior from tiny embedded systems to full-fledged servers. Minimal machine-specific code means less chance of breakage on minority architectures and better success with “write once run everywhere” C development. Designed from the ground up for static linking, musl carefully avoids pulling in large amounts of code or data that the applications will not use. 8 | 9 | Using musl maximizes application deployability. Binaries statically linked with musl have no external dependencies, even for features like DNS lookups or character set conversions that are implemented with dynamic loading on glibc. An application can really be deployed as a single binary file and run on any machine with the appropriate instruction set architecture and Linux kernel or Linux syscall ABI emulation layer. 10 | 11 | ## BusyBox 12 | 13 | BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system. 14 | 15 | BusyBox has been written with size-optimization and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or features) at compile time. This makes it easy to customize your embedded systems. To create a working system, just add some device nodes in `/dev`, a few configuration files in `/etc`, and a Linux kernel. 16 | 17 | ## Match made in heaven 18 | 19 | Pairing musl libc with BusyBox to combine common UNIX utilities into a single small executable, it makes for an excellent Docker image base. We get extremely small builds (the base image is only 5 MB) that end up cutting time during push and pull. 20 | 21 | [musl]: http://www.musl-libc.org/ 22 | [busybox]: http://www.busybox.net/ 23 | -------------------------------------------------------------------------------- /docs/build.md: -------------------------------------------------------------------------------- 1 | # Build 2 | 3 | [![CircleCI](https://img.shields.io/circleci/project/gliderlabs/docker-alpine/release.svg)](https://circleci.com/gh/gliderlabs/docker-alpine) 4 | 5 | A convenience `build` script is included that builds the image and runs basic tests against the resulting image tags. The script is used in the continuous integration process (check out the CircleCI badge link above). But you can run this script locally to build your own images. Be sure to check out the environment variables that can be tweaked at the top of the `build` script file. 6 | 7 | ## Image 8 | 9 | ### Builder 10 | 11 | The image is built using a builder Docker container based on the `debian` image. This builder image lives in the `builder` sub-directory of the project and uses a `mkimage-alpine.sh` script to generate an Alpine Linux `rootfs.tar.xz` file. This file then gets copied to the root of the project so we can build the main Alpine Linux image by just using the `ADD` command to automatically untar the components to the resulting image. 12 | 13 | ### Options 14 | 15 | The build script takes a glob of `options` files as an argument. Each of these files lives in a folder that describes the version of Alpine Linux to build. Each line of the `options` file are the options that will be applied to the resulting image. By default, we use the included glob of `versions/**/options`. 16 | 17 | ### Multi-arch 18 | 19 | Each options file specifies a version of the image to build. An options file can generate images for multiple architectures using the `ARCHS` variable. 20 | 21 | ### Example 22 | 23 | To build all the images simply run: 24 | 25 | ```console 26 | $ ./build 27 | ``` 28 | 29 | Pass version files to the `build` script to build specific versions: 30 | 31 | ```console 32 | $ ./build version/library-3.2/options versions/gliderlabs-3.2/options 33 | ``` 34 | 35 | With `parallel` available you can speed up building a bit: 36 | 37 | ```console 38 | $ parallel -m ./build ::: versions/**/options 39 | ``` 40 | 41 | ## Differences 42 | 43 | There is only one difference between the `gliderlabs/alpine` image and the [official Alpine Linux image in the Docker Library][library] today. The `gliderlabs/alpine` image has an `apk-install` script added to it. However, this script is now considered deprecated as the `apk` utility has the same functionality built-in (using `apk --no-cache`). We now recommend using the official `alpine` images unless you were already using `gliderlabs/alpine`. 44 | 45 | ## Testing 46 | 47 | The test for images is very simple at the moment. It just attempts to install the `openssl` package and verify we exit cleanly. 48 | 49 | Use the `test` sub-command of the `build` utility to run tests on currently build images (`build test`). 50 | 51 | ### Example 52 | 53 | Run tests for a single image: 54 | 55 | ```console 56 | $ ./build test versions/gliderlabs-3.2/options 57 | ✓ version is correct 58 | ✓ package installs cleanly 59 | ✓ timezone 60 | ✓ apk-install script should be available 61 | ✓ repository list is correct 62 | ✓ cache is empty 63 | ✓ root password is disabled 64 | 65 | 7 tests, 0 failures 66 | ``` 67 | 68 | Run all tests: 69 | 70 | ```console 71 | $ ./build test 72 | ✓ version is correct 73 | ✓ package installs cleanly 74 | ✓ timezone 75 | ... 76 | ✓ apk-install script should be missing 77 | ✓ repository list is correct 78 | ✓ cache is empty 79 | ✓ root password is disabled 80 | 81 | 84 tests, 0 failures 82 | ``` 83 | 84 | Run tests in parallel with the `parallel` utility: 85 | 86 | ```console 87 | $ parallel ./build test ::: versions/**/options 88 | 1..7 89 | ok 1 version is correct 90 | ok 2 package installs cleanly 91 | ok 3 timezone 92 | ok 4 apk-install script should be available 93 | ... 94 | ``` 95 | 96 | ## Library 97 | 98 | These are the steps we use for updating the official library image: 99 | 100 | 1. Merge the `master` branch into `release` and push `release`. This will trigger CircleCI to push resulting image tarballs to the `rootfs/*` branches and push the `gliderlabs` organization images directly to Docker Hub. 101 | 1. Verify [the build is green in CircleCI](https://circleci.com/gh/gliderlabs/docker-alpine/tree/release). 102 | 1. Fork the [official images repository][official] and clone it locally if you have not already done so. 103 | 1. Create a new local branch in the `docker-library/official-images` repository for the update to alpine. 104 | 1. Open the `library/alpine` file from `docker-library/official-images`. 105 | 1. Run `./build library` from the `gliderlabs/docker-alpine` folder root to copy the latest version references. 106 | 1. Paste in the updated version references to the `library/alpine` file opened in the `docker-library/official-images` local clone. 107 | 1. Commit and push the changes to your fork. 108 | 1. Open a pull request to the [official images repository][official]. 109 | 110 | [library]: https://github.com/docker-library/official-images/blob/master/library/alpine 111 | [fastly]: https://www.fastly.com/ 112 | [official]: https://github.com/docker-library/official-images 113 | -------------------------------------------------------------------------------- /docs/caveats.md: -------------------------------------------------------------------------------- 1 | # Caveats 2 | 3 | The musl libc implementation may work a little different than you are used to. The [musl libc differences from glibc document](http://wiki.musl-libc.org/wiki/Functional_differences_from_glibc#Name_Resolver_.2F_DNS) does a really good job of outlining everything. Please take a glance at it. Here we'll talk about some of the more common things you might encounter. 4 | 5 | ## DNS 6 | 7 | One common issue you may find is with DNS. musl libc does not use `domain` or `search` directives in the `/etc/resolv.conf` file. For example, if you started your Docker daemon with `--dns-search=service.consul`, and then tried to resolve `consul` from within an Alpine Linux container, it would fail as the name `consul.service.consul` would not be tried. You will need to work around this by using fully qualified names. 8 | 9 | Another difference is parallel querying of name servers. This can be problematic if your first name server has a different DNS view (such as service discovery through DNS). For example, if you started your Docker daemon with `--dns=172.17.42.1 --dns=10.0.2.15` where `172.17.42.1` is a local DNS server to resolve name for service discovery and `10.0.2.15` is for external DNS resolving, you wouldn't be able to guarantee that `172.17.42.1` will always be queried first. There will be sporadic failures. 10 | 11 | In both of these cases, it can help to run a local caching DNS server such as dnsmasq, that can be used for both caching and search path routing. Running dnsmasq with `--server /consul/10.0.0.1` would forward queries for the `.consul` to 10.0.0.1. 12 | 13 | ## Incompatible Binaries 14 | 15 | While there are binaries that will run on musl libc without needing to be recompiled, you will likely encounter binaries and applications that rely on specific glibc functionality that will fail to start up. An example of this would be Oracle Java which relies on specific symbols only found in glibc. You can often use `ldd` to determine the exact symbol: 16 | 17 | ```console 18 | # ldd bin/java 19 | /lib64/ld-linux-x86-64.so.2 (0x7f542ebb5000) 20 | libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f542ebb5000) 21 | libjli.so => bin/../lib/amd64/jli/libjli.so (0x7f542e9a0000) 22 | libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f542ebb5000) 23 | libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f542ebb5000) 24 | Error relocating bin/../lib/amd64/jli/libjli.so: __rawmemchr: symbol not found 25 | ``` 26 | 27 | In this case, the upstream would need to remove the support for this offending symbol or have the ability to compile the software natively on musl libc. Be sure to check the [Alpine Linux package index](http://pkgs.alpinelinux.org/packages) to see if a suitable replacement package already exists. 28 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Alpine Linux Docker Image 2 | 3 | [![CircleCI](https://img.shields.io/circleci/project/gliderlabs/docker-alpine/release.svg)](https://circleci.com/gh/gliderlabs/docker-alpine) 4 | [![Docker Stars](https://img.shields.io/docker/stars/gliderlabs/alpine.svg)][hub] 5 | [![Docker Pulls](https://img.shields.io/docker/pulls/gliderlabs/alpine.svg)][hub] 6 | [![Slack](http://glider-slackin.herokuapp.com/badge.svg)][slack] 7 | 8 | 9 | Welcome to the documentation for the Alpine Linux Docker Image. Here we explain a bit about the motivations behind this image, how you typically use it, the build process, and how to make great minimalist containers! 10 | 11 | ## About 12 | 13 | The heart of this image is [Alpine Linux][alpine]. The image is only 5 MB and has access to a package repository that is much more complete than other minimal base images. Learn more [about this image][about], musl libc, BusyBox, and why the Docker Alpine Linux image makes a great base for your Docker projects. 14 | 15 | ## Official 16 | 17 | This image serves as the source for the [official Alpine Linux image in the Docker Library][library]. The build process for both official `alpine` and `gliderlabs/alpine` are the same. However, different build options are used for the official library images. Check out [the build page][build] for more information on differences. 18 | 19 | ## Motivations 20 | 21 | Docker images today are big. Usually much larger than they need to be. There are a lot of ways to make them smaller. But you need to start with a small base. There are great size savings to be had when compared to base images such as `ubuntu`, `centos`, and `debian`. 22 | 23 | ## Usage 24 | 25 | You use the `apk` command to manage packages. We don't ship the image with a package index (since that can go stale fairly quickly), so you need to add the `--update-cache` flag to `apk` when installing. An example installing the `nginx` package would be `apk add --update-cache nginx`. Check out [the usage page][usage] for more advanced usage and `Dockerfile` examples. 26 | 27 | ## Caveats 28 | 29 | The musl libc implementation may work a little different than you are used to. One example of this is with DNS. musl libc does not use `domain` or `search` in the `/etc/resolv.conf` file. It also queries name servers in parallel which can be problematic if your first name server has a different DNS view (such as service discovery through DNS). We have [a page dedicated to the caveats][caveats] you should be aware of. 30 | 31 | ## Build 32 | 33 | This image is built and tested in a continuous integration environment using the `build` script. We then push the resulting images directly to Docker Hub. Check out [the page on building and testing][build] the images for more information. 34 | 35 | ## Contacts 36 | 37 | We make reasonable efforts to support our work and are always happy to chat. Join us in [our Slack community][slack] or [submit a GitHub issue][issues] if you have a security or other general question about this Docker image. Please email [security](http://lists.alpinelinux.org/alpine-security/summary.html) or [user](http://lists.alpinelinux.org/alpine-user/summary.html) mailing lists if you have concerns specific to Alpine Linux. 38 | 39 | ## Contributing 40 | 41 | We welcome contributions to the image build process, version bumps, and other optimizations. The image gets built and pushed from the `release` branch automatically. Once a pull request is merged, a build will be kicked off, and resulting image pushed to Docker Hub in a matter of minutes! 42 | 43 | ## Sponsors 44 | 45 | [![Fastly](https://github.com/gliderlabs/docker-alpine/raw/master/logo_fastly.png)][fastly] 46 | 47 | [Fastly][fastly] provides the CDN for our Alpine Linux package repository. This allows super speedy package downloads from all over the globe! 48 | 49 | [about]: /docker-alpine/about 50 | [usage]: /docker-alpine/usage 51 | [build]: /docker-alpine/build 52 | [caveats]: /docker-alpine/caveats 53 | [slack]: http://glider-slackin.herokuapp.com/ 54 | [issues]: https://github.com/gliderlabs/docker-alpine/issues 55 | [alpine]: http://alpinelinux.org/ 56 | [library]: https://github.com/docker-library/official-images/blob/master/library/alpine 57 | [fastly]: https://www.fastly.com/ 58 | [hub]: https://hub.docker.com/r/gliderlabs/alpine/ 59 | -------------------------------------------------------------------------------- /docs/usage.md: -------------------------------------------------------------------------------- 1 | # Usage 2 | 3 | ## Packages 4 | 5 | Replacing your current base image with the Docker Alpine Linux image usually requires updating the package names to the corresponding ones in the [Alpine Linux package index][packageindex]. We use the `apk` command to manage packages. It works similar to `apt` or `yum`. 6 | 7 | An example installing the `nginx` package would be `apk add --update-cache nginx`. The `--update-cache` flag fetches the current package index before adding the package. We don't ship the image with a package index (since that can go stale fairly quickly). 8 | 9 | ## Example 10 | 11 | Here is a full example `Dockerfile` that installs the Python runtime and some build dependencies: 12 | 13 | ``` 14 | FROM gliderlabs/alpine:3.3 15 | 16 | RUN apk add --update-cache \ 17 | python \ 18 | python-dev \ 19 | py-pip \ 20 | build-base \ 21 | && pip install virtualenv \ 22 | && rm -rf /var/cache/apk/* 23 | 24 | WORKDIR /app 25 | 26 | ONBUILD COPY . /app 27 | ONBUILD RUN virtualenv /env && /env/bin/pip install -r /app/requirements.txt 28 | 29 | EXPOSE 8080 30 | CMD ["/env/bin/python", "main.py"] 31 | ``` 32 | 33 | ## Disabling Cache 34 | 35 | As of Alpine Linux 3.3 there exists a new `--no-cache` option for `apk`. It allows users to install packages with an index that is updated and used on-the-fly and not cached locally: 36 | 37 | ``` 38 | FROM gliderlabs/alpine:3.3 39 | 40 | RUN apk --no-cache add nginx 41 | 42 | EXPOSE 80 43 | CMD ["nginx", "-g", "daemon off;"] 44 | ``` 45 | 46 | This avoids the need to use `--update-cache` and remove `/var/cache/apk/*` when done installing packages. 47 | 48 | ## Convenience Cleanup 49 | 50 | The `gliderlabs` variant of this image contains a small unofficial wrapper script that assists in the cleanup of the package index after installing packages. However, this functionality is now available in the upstream `apk` utility as of Alpine version 3.2 (using `apk --no-cache`). This script may be removed from the `gliderlabs/alpine` images in the future. 51 | 52 | ## Virtual Packages 53 | 54 | Another great `apk add` feature for cleanup is the concept of virtual packages using the `--virtual` or `-t` switch. Packages added under this virtual name can then be removed as one group. An example use of this would be removing a group of build dependencies all at once: 55 | 56 | ``` 57 | FROM gliderlabs/alpine:3.3 58 | 59 | WORKDIR /myapp 60 | COPY . /myapp 61 | 62 | RUN apk --update-cache add python py-pip openssl ca-certificates 63 | RUN apk --update-cache add --virtual build-dependencies python-dev build-base wget \ 64 | && pip install -r requirements.txt \ 65 | && python setup.py install \ 66 | && apk del build-dependencies 67 | 68 | CMD ["myapp", "start"] 69 | ``` 70 | 71 | ## Additional Information 72 | 73 | Check out the [Alpine Linux package management documentation][apk] for more information and usage of `apk`. 74 | 75 | [apk]: http://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Update_the_Package_list 76 | [packageindex]: http://pkgs.alpinelinux.org/packages 77 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/logo.png -------------------------------------------------------------------------------- /logo_fastly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/logo_fastly.png -------------------------------------------------------------------------------- /test/test_alpine-3.1.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history "alpine:3.1" >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run "alpine:3.1" cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.1.4" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run "alpine:3.1" apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run "alpine:3.1" date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run "alpine:3.1" which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run "alpine:3.1" cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.1/main" ] 31 | [ "${lines[1]}" = "" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run "alpine:3.1" sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody "alpine:3.1" su 42 | [ $status -eq 1 ] 43 | } 44 | 45 | @test "CVE-2016-2183, CVE-2016-6304, CVE-2016-6306" { 46 | run docker run alpine:3.1 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.1u-r0 | grep -q "[=>]"' 47 | [ $status -eq 0 ] 48 | } 49 | 50 | -------------------------------------------------------------------------------- /test/test_alpine-3.2.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history "alpine:3.2" >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run "alpine:3.2" cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.2.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run "alpine:3.2" apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run "alpine:3.2" date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run "alpine:3.2" which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run "alpine:3.2" cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.2/main" ] 31 | [ "${lines[1]}" = "" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run "alpine:3.2" sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody "alpine:3.2" su 42 | [ $status -eq 1 ] 43 | } 44 | 45 | @test "CVE-2016-2183, CVE-2016-6304, CVE-2016-6306" { 46 | run docker run alpine:3.2 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2i-r0 | grep -q "[=>]"' 47 | [ $status -eq 0 ] 48 | } 49 | 50 | @test "CVE-2016-7052" { 51 | run docker run alpine:3.2 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2j-r0 | grep -q "[=>]"' 52 | [ $status -eq 0 ] 53 | } 54 | 55 | -------------------------------------------------------------------------------- /test/test_alpine-3.3.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.3 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.3 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.3.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.3 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.3 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.3 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.3 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.3/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.3/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.3 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.3 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "CVE-2016-2183, CVE-2016-6304, CVE-2016-6306" { 47 | run docker run alpine:3.3 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2i-r0 | grep -q "[=>]"' 48 | [ $status -eq 0 ] 49 | } 50 | 51 | @test "CVE-2016-7052" { 52 | run docker run alpine:3.3 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2j-r0 | grep -q "[=>]"' 53 | [ $status -eq 0 ] 54 | } 55 | 56 | @test "/dev/null should be missing" { 57 | run sh -c "docker export $(docker create alpine:3.3) | tar -t dev/null" 58 | [ "$output" != "dev/null" ] 59 | [ $status -ne 0 ] 60 | } 61 | -------------------------------------------------------------------------------- /test/test_alpine-3.4.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.4 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.4 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.4.6" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.4 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.4 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.4 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.4 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.4/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.4/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.4 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.4 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "CVE-2016-2183, CVE-2016-6304, CVE-2016-6306" { 47 | run docker run alpine:3.4 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2i-r0 | grep -q "[=>]"' 48 | [ $status -eq 0 ] 49 | } 50 | 51 | @test "CVE-2016-7052" { 52 | run docker run alpine:3.4 sh -c 'apk version -t $(apk info -v | grep ^libssl | cut -d- -f2-) 1.0.2j-r0 | grep -q "[=>]"' 53 | [ $status -eq 0 ] 54 | } 55 | 56 | @test "/dev/null should be missing" { 57 | run sh -c "docker export $(docker create alpine:3.4) | tar -t dev/null" 58 | [ "$output" != "dev/null" ] 59 | [ $status -ne 0 ] 60 | } 61 | -------------------------------------------------------------------------------- /test/test_alpine-3.5.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.5 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.5 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.5.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.5 apk add --no-cache libressl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.5 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.5 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.5 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.5/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.5/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.5 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.5 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "/dev/null should be missing" { 47 | run sh -c "docker export $(docker create alpine:3.5) | tar -t dev/null" 48 | [ "$output" != "dev/null" ] 49 | [ $status -ne 0 ] 50 | } 51 | -------------------------------------------------------------------------------- /test/test_alpine-3.6.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.6 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.6 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.6.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.6 apk add --no-cache libressl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.6 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.6 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.6 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.6/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.6/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.6 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.6 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "/dev/null should be missing" { 47 | run sh -c "docker export $(docker create alpine:3.6) | tar -t dev/null" 48 | [ "$output" != "dev/null" ] 49 | [ $status -ne 0 ] 50 | } 51 | -------------------------------------------------------------------------------- /test/test_alpine-3.7.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.7 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.7 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.7.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.7 apk add --no-cache libressl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.7 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.7 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.7 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.7/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.7/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.7 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.7 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "/dev/null should be missing" { 47 | run sh -c "docker export $(docker create alpine:3.7) | tar -t dev/null" 48 | [ "$output" != "dev/null" ] 49 | [ $status -ne 0 ] 50 | } 51 | -------------------------------------------------------------------------------- /test/test_alpine-3.8.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.8 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.8 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.8.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.8 apk add --no-cache libressl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.8 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.8 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.8 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.8/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.8/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.8 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.8 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "/dev/null should be missing" { 47 | run sh -c "docker export $(docker create alpine:3.8) | tar -t dev/null" 48 | [ "$output" != "dev/null" ] 49 | [ $status -ne 0 ] 50 | } 51 | -------------------------------------------------------------------------------- /test/test_alpine-3.9.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history alpine:3.9 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run alpine:3.9 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.9.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run alpine:3.9 apk add --no-cache libressl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run alpine:3.9 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be missing" { 23 | run docker run alpine:3.9 which apk-install 24 | [ $status -eq 1 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run alpine:3.9 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" ] 31 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/v3.9/community" ] 32 | [ "${lines[2]}" = "" ] 33 | } 34 | 35 | @test "cache is empty" { 36 | run docker run alpine:3.9 sh -c "ls -1 /var/cache/apk | wc -l" 37 | [ $status -eq 0 ] 38 | [ "$output" = "0" ] 39 | } 40 | 41 | @test "root password is disabled" { 42 | run docker run --user nobody alpine:3.9 su 43 | [ $status -eq 1 ] 44 | } 45 | 46 | @test "/dev/null should be missing" { 47 | run sh -c "docker export $(docker create alpine:3.9) | tar -t dev/null" 48 | [ "$output" != "dev/null" ] 49 | [ $status -ne 0 ] 50 | } 51 | -------------------------------------------------------------------------------- /test/test_alpine-edge.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history "alpine:edge" >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run "alpine:edge" cat /etc/os-release 7 | [ $status -eq 0 ] 8 | case "${lines[2]}" in 9 | VERSION_ID=3.12*) true;; 10 | *) false;; 11 | esac 12 | } 13 | 14 | @test "package installs cleanly" { 15 | run docker run "alpine:edge" apk add --update-cache openssl 16 | [ $status -eq 0 ] 17 | } 18 | 19 | @test "timezone" { 20 | run docker run "alpine:edge" date +%Z 21 | [ $status -eq 0 ] 22 | [ "$output" = "UTC" ] 23 | } 24 | 25 | @test "apk-install script should be missing" { 26 | run docker run "alpine:edge" which apk-install 27 | [ $status -eq 1 ] 28 | } 29 | 30 | @test "repository list is correct" { 31 | run docker run "alpine:edge" cat /etc/apk/repositories 32 | [ $status -eq 0 ] 33 | [ "${lines[0]}" = "http://dl-cdn.alpinelinux.org/alpine/edge/main" ] 34 | [ "${lines[1]}" = "http://dl-cdn.alpinelinux.org/alpine/edge/community" ] 35 | [ "${lines[2]}" = "" ] 36 | } 37 | 38 | @test "cache is empty" { 39 | run docker run "alpine:edge" sh -c "ls -1 /var/cache/apk | wc -l" 40 | [ $status -eq 0 ] 41 | [ "$output" = "0" ] 42 | } 43 | 44 | @test "root password is disabled" { 45 | run docker run --user nobody "alpine:edge" su 46 | [ $status -eq 1 ] 47 | } 48 | 49 | @test "/dev/null should be missing" { 50 | run sh -c "docker export $(docker create alpine:edge) | tar -t dev/null" 51 | [ "$output" != "dev/null" ] 52 | [ $status -ne 0 ] 53 | } 54 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.1.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.1 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.1 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.1.4" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.1 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.1 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.1 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.1 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.1/main" ] 31 | [ "${lines[1]}" = "" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.1 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.1 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.2.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.2 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.2 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.2.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.2 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.2 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.2 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.2 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.2/main" ] 31 | [ "${lines[1]}" = "" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.2 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.2 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.3.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.3 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.3 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.3.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.3 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.3 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.3 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.3 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.3/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.3/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.3 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.3 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.4.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.4 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.4 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.4.6" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.4 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.4 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.4 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.4 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.4/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.4/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.4 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.4 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.5.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.5 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.5 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.5.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.5 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.5 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.5 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.5 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.5/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.5/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.5 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.5 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.6.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.6 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.6 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.6.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.6 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.6 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.6 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.6 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.6/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.6/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.6 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.6 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.7.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.7 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.7 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.7.3" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.7 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.7 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.7 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.7 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.7/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.7/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.7 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.7 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.8.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.8 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.8 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.8.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.8 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.8 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.8 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.8 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.8/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.8/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.8 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.8 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-3.9.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:3.9 >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:3.9 cat /etc/os-release 7 | [ $status -eq 0 ] 8 | [ "${lines[2]}" = "VERSION_ID=3.9.5" ] 9 | } 10 | 11 | @test "package installs cleanly" { 12 | run docker run gliderlabs/alpine:3.9 apk add --update-cache openssl 13 | [ $status -eq 0 ] 14 | } 15 | 16 | @test "timezone" { 17 | run docker run gliderlabs/alpine:3.9 date +%Z 18 | [ $status -eq 0 ] 19 | [ "$output" = "UTC" ] 20 | } 21 | 22 | @test "apk-install script should be available" { 23 | run docker run gliderlabs/alpine:3.9 which apk-install 24 | [ $status -eq 0 ] 25 | } 26 | 27 | @test "repository list is correct" { 28 | run docker run gliderlabs/alpine:3.9 cat /etc/apk/repositories 29 | [ $status -eq 0 ] 30 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/v3.9/main" ] 31 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/v3.9/community" ] 32 | } 33 | 34 | @test "cache is empty" { 35 | run docker run gliderlabs/alpine:3.9 sh -c "ls -1 /var/cache/apk | wc -l" 36 | [ $status -eq 0 ] 37 | [ "$output" = "0" ] 38 | } 39 | 40 | @test "root password is disabled" { 41 | run docker run --user nobody gliderlabs/alpine:3.9 su 42 | [ $status -eq 1 ] 43 | } 44 | -------------------------------------------------------------------------------- /test/test_gliderlabs_alpine-edge.bats: -------------------------------------------------------------------------------- 1 | setup() { 2 | docker history gliderlabs/alpine:edge >/dev/null 2>&1 3 | } 4 | 5 | @test "version is correct" { 6 | run docker run gliderlabs/alpine:edge cat /etc/os-release 7 | [ $status -eq 0 ] 8 | case "${lines[2]}" in 9 | VERSION_ID=3.12*) true;; 10 | *) false;; 11 | esac 12 | } 13 | 14 | @test "package installs cleanly" { 15 | run docker run gliderlabs/alpine:edge apk add --update-cache openssl 16 | [ $status -eq 0 ] 17 | } 18 | 19 | @test "timezone" { 20 | run docker run gliderlabs/alpine:edge date +%Z 21 | [ $status -eq 0 ] 22 | [ "$output" = "UTC" ] 23 | } 24 | 25 | @test "apk-install script should be available" { 26 | run docker run gliderlabs/alpine:edge which apk-install 27 | [ $status -eq 0 ] 28 | } 29 | 30 | @test "repository list is correct" { 31 | run docker run gliderlabs/alpine:edge cat /etc/apk/repositories 32 | [ $status -eq 0 ] 33 | [ "${lines[0]}" = "http://alpine.gliderlabs.com/alpine/edge/main" ] 34 | [ "${lines[1]}" = "http://alpine.gliderlabs.com/alpine/edge/community" ] 35 | [ "${lines[2]}" = "" ] 36 | } 37 | 38 | @test "cache is empty" { 39 | run docker run gliderlabs/alpine:edge sh -c "ls -1 /var/cache/apk | wc -l" 40 | [ $status -eq 0 ] 41 | [ "$output" = "0" ] 42 | } 43 | 44 | @test "root password is disabled" { 45 | run docker run --user nobody gliderlabs/alpine:edge su 46 | [ $status -eq 1 ] 47 | } 48 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.1/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.1" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export BUILD_OPTIONS=(-d -s -E -c -t UTC -r $RELEASE -m $MIRROR) 4 | export TAGS=(gliderlabs/alpine:3.1) 5 | export PUSH_IMAGE="true" 6 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.2/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.2" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export BUILD_OPTIONS=(-d -s -E -c -t UTC -r $RELEASE -m $MIRROR) 4 | export TAGS=(gliderlabs/alpine:3.2) 5 | export PUSH_IMAGE="true" 6 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.3/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.3" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.3) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.4/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.4" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.4) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.5/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.5/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.5" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.5) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.6/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.6/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.6" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.6) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.7/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.7" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.7) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.8/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.8" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.8) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-3.9/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.9" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:3.9 gliderlabs/alpine:latest) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/gliderlabs-edge/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/gliderlabs-edge/options: -------------------------------------------------------------------------------- 1 | export RELEASE="edge" 2 | export MIRROR="http://alpine.gliderlabs.com/alpine" 3 | export PACKAGES="busybox,alpine-baselayout,apk-tools,alpine-keys,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -c -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(gliderlabs/alpine:edge) 6 | export PUSH_IMAGE="true" 7 | -------------------------------------------------------------------------------- /versions/library-3.1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.1/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.1" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export BUILD_OPTIONS=(-d -s -E -t UTC -r $RELEASE -m $MIRROR) 4 | export TAGS=(alpine:3.1) 5 | -------------------------------------------------------------------------------- /versions/library-3.2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.2/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.2" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export BUILD_OPTIONS=(-d -s -E -t UTC -r $RELEASE -m $MIRROR) 4 | export TAGS=(alpine:3.2) 5 | -------------------------------------------------------------------------------- /versions/library-3.3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.3/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.3" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.3) 6 | -------------------------------------------------------------------------------- /versions/library-3.4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.4/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.4" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.4) 6 | -------------------------------------------------------------------------------- /versions/library-3.5/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.5/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.5" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.5) 6 | -------------------------------------------------------------------------------- /versions/library-3.6/aarch64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.6/aarch64/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.6/aarch64/UTC -------------------------------------------------------------------------------- /versions/library-3.6/aarch64/options: -------------------------------------------------------------------------------- 1 | export ARCH="aarch64" 2 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/${ARCH}/alpine-minirootfs-3.6.3-${ARCH}.tar.gz" 3 | export TAGS=(alpine:3.6-${ARCH}) 4 | -------------------------------------------------------------------------------- /versions/library-3.6/armhf/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.6/armhf/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.6/armhf/UTC -------------------------------------------------------------------------------- /versions/library-3.6/armhf/options: -------------------------------------------------------------------------------- 1 | export ARCH="armhf" 2 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/${ARCH}/alpine-minirootfs-3.6.3-${ARCH}.tar.gz" 3 | export TAGS=(alpine:3.6-${ARCH}) 4 | -------------------------------------------------------------------------------- /versions/library-3.6/ppc64le/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.6/ppc64le/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.6/ppc64le/UTC -------------------------------------------------------------------------------- /versions/library-3.6/ppc64le/options: -------------------------------------------------------------------------------- 1 | export ARCH="ppc64le" 2 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/${ARCH}/alpine-minirootfs-3.6.3-${ARCH}.tar.gz" 3 | export TAGS=(alpine:3.6-${ARCH}) 4 | -------------------------------------------------------------------------------- /versions/library-3.6/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.6/s390x/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.6/s390x/UTC -------------------------------------------------------------------------------- /versions/library-3.6/s390x/options: -------------------------------------------------------------------------------- 1 | export ARCH="s390x" 2 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/${ARCH}/alpine-minirootfs-3.6.3-${ARCH}.tar.gz" 3 | export TAGS=(alpine:3.6-${ARCH}) 4 | -------------------------------------------------------------------------------- /versions/library-3.6/x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.6/x86/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.6/x86/UTC -------------------------------------------------------------------------------- /versions/library-3.6/x86/options: -------------------------------------------------------------------------------- 1 | export ARCH="x86" 2 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v3.6/releases/${ARCH}/alpine-minirootfs-3.6.3-${ARCH}.tar.gz" 3 | export TAGS=(alpine:3.6-${ARCH}) 4 | -------------------------------------------------------------------------------- /versions/library-3.6/x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.6/x86_64/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.6" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.6) 6 | -------------------------------------------------------------------------------- /versions/library-3.7/aarch64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.7/aarch64/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.7/aarch64/UTC -------------------------------------------------------------------------------- /versions/library-3.7/aarch64/options: -------------------------------------------------------------------------------- 1 | version=3.7.1 2 | export ARCH="aarch64" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.7/armhf/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.7/armhf/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.7/armhf/UTC -------------------------------------------------------------------------------- /versions/library-3.7/armhf/options: -------------------------------------------------------------------------------- 1 | version=3.7.1 2 | export ARCH="armhf" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.7/ppc64le/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.7/ppc64le/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.7/ppc64le/UTC -------------------------------------------------------------------------------- /versions/library-3.7/ppc64le/options: -------------------------------------------------------------------------------- 1 | version=3.7.1 2 | export ARCH="ppc64le" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.7/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.7/s390x/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.7/s390x/UTC -------------------------------------------------------------------------------- /versions/library-3.7/s390x/options: -------------------------------------------------------------------------------- 1 | version=3.7.1 2 | export ARCH="s390x" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.7/x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.7/x86/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.7/x86/UTC -------------------------------------------------------------------------------- /versions/library-3.7/x86/options: -------------------------------------------------------------------------------- 1 | version=3.7.1 2 | export ARCH="x86" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.7/x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.7/x86_64/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.7" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,busybox,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.7) 6 | -------------------------------------------------------------------------------- /versions/library-3.8/aarch64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.8/aarch64/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.8/aarch64/UTC -------------------------------------------------------------------------------- /versions/library-3.8/aarch64/options: -------------------------------------------------------------------------------- 1 | version=3.8.2 2 | export ARCH="aarch64" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.8/armhf/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.8/armhf/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.8/armhf/UTC -------------------------------------------------------------------------------- /versions/library-3.8/armhf/options: -------------------------------------------------------------------------------- 1 | version=3.8.2 2 | export ARCH="armhf" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.8/ppc64le/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.8/ppc64le/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.8/ppc64le/UTC -------------------------------------------------------------------------------- /versions/library-3.8/ppc64le/options: -------------------------------------------------------------------------------- 1 | version=3.8.2 2 | export ARCH="ppc64le" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.8/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.8/s390x/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.8/s390x/UTC -------------------------------------------------------------------------------- /versions/library-3.8/s390x/options: -------------------------------------------------------------------------------- 1 | version=3.8.2 2 | export ARCH="s390x" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.8/x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.8/x86/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.8/x86/UTC -------------------------------------------------------------------------------- /versions/library-3.8/x86/options: -------------------------------------------------------------------------------- 1 | version=3.8.2 2 | export ARCH="x86" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH} alpine:latest-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.8/x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.8/x86_64/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.8" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,busybox,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.8 alpine:latest) 6 | -------------------------------------------------------------------------------- /versions/library-3.9/aarch64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.9/aarch64/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.9/aarch64/UTC -------------------------------------------------------------------------------- /versions/library-3.9/aarch64/options: -------------------------------------------------------------------------------- 1 | version=3.9.0 2 | export ARCH="aarch64" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.9/armhf/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.9/armhf/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.9/armhf/UTC -------------------------------------------------------------------------------- /versions/library-3.9/armhf/options: -------------------------------------------------------------------------------- 1 | version=3.9.0 2 | export ARCH="armhf" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.9/ppc64le/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.9/ppc64le/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.9/ppc64le/UTC -------------------------------------------------------------------------------- /versions/library-3.9/ppc64le/options: -------------------------------------------------------------------------------- 1 | version=3.9.0 2 | export ARCH="ppc64le" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.9/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.9/s390x/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.9/s390x/UTC -------------------------------------------------------------------------------- /versions/library-3.9/s390x/options: -------------------------------------------------------------------------------- 1 | version=3.9.0 2 | export ARCH="s390x" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.9/x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-3.9/x86/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-3.9/x86/UTC -------------------------------------------------------------------------------- /versions/library-3.9/x86/options: -------------------------------------------------------------------------------- 1 | version=3.9.0 2 | export ARCH="x86" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/v${version%.*}/releases/${ARCH}/alpine-minirootfs-${version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:${version%.*}-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-3.9/x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-3.9/x86_64/options: -------------------------------------------------------------------------------- 1 | export RELEASE="v3.9" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="alpine-baselayout,busybox,alpine-keys,apk-tools,libc-utils" 4 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 5 | export TAGS=(alpine:3.9) 6 | -------------------------------------------------------------------------------- /versions/library-edge/aarch64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-edge/aarch64/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-edge/aarch64/UTC -------------------------------------------------------------------------------- /versions/library-edge/aarch64/options: -------------------------------------------------------------------------------- 1 | fs_version=3.7.0 2 | export ARCH="aarch64" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/edge/releases/${ARCH}/alpine-minirootfs-${fs_version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:edge-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-edge/armhf/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-edge/armhf/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-edge/armhf/UTC -------------------------------------------------------------------------------- /versions/library-edge/armhf/options: -------------------------------------------------------------------------------- 1 | fs_version=3.7.0 2 | export ARCH="armhf" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/edge/releases/${ARCH}/alpine-minirootfs-${fs_version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:edge-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-edge/ppc64le/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-edge/ppc64le/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-edge/ppc64le/UTC -------------------------------------------------------------------------------- /versions/library-edge/ppc64le/options: -------------------------------------------------------------------------------- 1 | fs_version=3.7.0 2 | export ARCH="ppc64le" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/edge/releases/${ARCH}/alpine-minirootfs-${fs_version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:edge-${ARCH}) -------------------------------------------------------------------------------- /versions/library-edge/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-edge/s390x/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-edge/s390x/UTC -------------------------------------------------------------------------------- /versions/library-edge/s390x/options: -------------------------------------------------------------------------------- 1 | fs_version=3.7.0 2 | export ARCH="aarch64" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/edge/releases/${ARCH}/alpine-minirootfs-${fs_version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:edge-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-edge/x86/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.gz / 3 | # ensure UTC instead of the default GMT 4 | COPY UTC /etc/localtime 5 | CMD ["/bin/sh"] 6 | -------------------------------------------------------------------------------- /versions/library-edge/x86/UTC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gliderlabs/docker-alpine/25d285ff5901c40b3e655995a17ee9c4e1590af6/versions/library-edge/x86/UTC -------------------------------------------------------------------------------- /versions/library-edge/x86/options: -------------------------------------------------------------------------------- 1 | fs_version=3.7.0 2 | export ARCH="x86" 3 | export PULL_URL="http://dl-cdn.alpinelinux.org/alpine/edge/releases/${ARCH}/alpine-minirootfs-${fs_version}-${ARCH}.tar.gz" 4 | export TAGS=(alpine:edge-${ARCH}) 5 | -------------------------------------------------------------------------------- /versions/library-edge/x86_64/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | ADD rootfs.tar.xz / 3 | CMD ["/bin/sh"] 4 | -------------------------------------------------------------------------------- /versions/library-edge/x86_64/options: -------------------------------------------------------------------------------- 1 | export RELEASE="edge" 2 | export MIRROR="http://dl-cdn.alpinelinux.org/alpine" 3 | export PACKAGES="busybox,alpine-baselayout,apk-tools,alpine-keys,libc-utils" 4 | export ARCHS=(x86_64) 5 | export BUILD_OPTIONS=(-b -s -t UTC -r $RELEASE -m $MIRROR -p $PACKAGES) 6 | export TAGS=(alpine:edge) 7 | --------------------------------------------------------------------------------