├── README.md └── docker-releasetag /README.md: -------------------------------------------------------------------------------- 1 | # docker-releasetag 2 | 3 | Prototype of how `docker tag` should work to help aid in [12Factor](http://12factor.net/) releases in the Docker world. 4 | 5 | A [release in 12Factor](http://12factor.net/build-release-run) is a "build" + "config", where "config" is environment variables. In this case, a "build" is a Docker container image. 6 | 7 | ## Using docker-releasetag 8 | 9 | It works roughly as `docker tag`, but you can pass the environment as arguments: 10 | 11 | $ docker-releasetag mybuild myrelease:v1 FOO=bar BAZ=qux 12 | 13 | Or if you have an environment file: 14 | 15 | FOO=bar 16 | BAZ=qux 17 | 18 | Then you can pass it via STDIN using the `-` argument: 19 | 20 | $ docker-releasetag mybuild myrelease:v1 - < envfile 21 | -------------------------------------------------------------------------------- /docker-releasetag: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | main() { 4 | local source_image="$1"; shift 5 | local release_tag="$1"; shift 6 | local environ="$@" 7 | 8 | if [[ "$environ" == "" ]]; then 9 | echo "No environment specified" 10 | exit 1 11 | fi 12 | 13 | if [[ "$environ" == "-" ]]; then 14 | environ="$(cat)" 15 | else 16 | environ="$(echo -e "${environ/ /\n}")" 17 | fi 18 | 19 | local dir=$(mktemp -dt "$(basename $0).XXXX") 20 | echo "$dir" 21 | trap "rm -rf $dir" EXIT 22 | 23 | local dockerfile="$dir/Dockerfile" 24 | echo "FROM $source_image" > "$dockerfile" 25 | 26 | while IFS="=" read key value; do 27 | echo "ENV" "$key" "$value" >> "$dockerfile" 28 | done <<< "$environ" 29 | 30 | cd "$dir" && docker build -t "$release_tag" . 31 | } 32 | 33 | [[ "$0" == "$BASH_SOURCE" ]] && main $@ --------------------------------------------------------------------------------