docker: add wrapper for detecting storage driver and bump to 1.4

The new dockerd wrapper script does its best to select between the btrfs
and overlay backends based on the filesystem mounted at /var/lib/docker.

The new 1.4 version will remain marked as ~amd64 for testing purposes
until we stabilize its dependencies, including Linux 3.18.x.
This commit is contained in:
Michael Marineau 2014-12-15 16:40:07 -08:00
parent 63c8b70513
commit 80c75cf4b5
5 changed files with 74 additions and 4 deletions

View File

@ -0,0 +1 @@
docker-9999.ebuild

View File

@ -28,6 +28,7 @@ IUSE="aufs +btrfs contrib +device-mapper doc lxc vim-syntax zsh-completion"
# https://github.com/docker/docker/blob/master/hack/PACKAGERS.md#build-dependencies
CDEPEND="
>=sys-kernel/coreos-kernel-3.18.0
>=dev-db/sqlite-3.7.9:3
device-mapper? (
>=sys-fs/lvm2-2.02.89[thin]
@ -186,6 +187,9 @@ src_install() {
newinitd contrib/init/openrc/docker.initd docker
newconfd contrib/init/openrc/docker.confd docker
exeinto /usr/lib/coreos
doexe "${FILESDIR}/dockerd"
systemd_newunit "${FILESDIR}/docker.service-r1" "docker.service"
systemd_dounit "${FILESDIR}/docker.socket"
systemd_newunit "${FILESDIR}/early-docker.service-r1" "early-docker.service"

View File

@ -6,12 +6,11 @@ Requires=docker.socket early-docker.target
[Service]
Environment=TMPDIR=/var/tmp
Environment=DOCKER_DRIVER=btrfs
Environment=DOCKER_OPTS='--insecure-registry="0.0.0.0/0"'
EnvironmentFile=-/run/docker_opts.env
LimitNOFILE=1048576
LimitNPROC=1048576
ExecStart=/usr/bin/docker --daemon --host=fd:// $DOCKER_OPTS
ExecStart=/usr/lib/coreos/dockerd --daemon --host=fd:// $DOCKER_OPTS
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,67 @@
#!/bin/bash
# Wrapper for launching docker daemons with an appropriate backend.
set -e
parse_docker_args() {
local flag value
while [[ $# -gt 0 ]]; do
flag="$1"
shift
# treat --flag=foo and --flag foo identically
if [[ "${flag}" == *=* ]]; then
flag="${flag%=*}"
set -- "${flag#*=}" "$@"
fi
case "${flag}" in
-g|--graph)
ARG_ROOT="$1"
shift
;;
-s|--storage-driver)
ARG_DRIVER="$1"
shift
;;
*)
# ignore everything else
;;
esac
done
}
select_docker_driver() {
local fstype
# mimic docker's behavior to ensure we stat the right filesystem.
if [[ -L "${ARG_ROOT}" ]]; then
ARG_ROOT="$(readlink -f "${ARG_ROOT}")"
fi
mkdir --parents --mode=0700 "${ARG_ROOT}"
fstype=$(findmnt --noheadings --output FSTYPE --target "${ARG_ROOT}")
case "${fstype}" in
btrfs)
export DOCKER_DRIVER=btrfs
;;
ext4|tmpfs) # As of 3.18
export DOCKER_DRIVER=overlay
;;
*)
# Fall back to whatever docker's default behavior is.
;;
esac
}
ARG_ROOT="/var/lib/docker"
ARG_DRIVER=""
parse_docker_args "$@"
# Do not override the driver if it is already explicitly configured.
if [[ -z "${ARG_DRIVER}" && -z "${DOCKER_DRIVER}" ]]; then
select_docker_driver
fi
exec docker "$@"

View File

@ -6,10 +6,9 @@ Requires=early-docker.socket
[Service]
Environment=TMPDIR=/var/tmp
Environment=DOCKER_DRIVER=btrfs
LimitNOFILE=1048576
LimitNPROC=1048576
ExecStart=/usr/bin/docker --daemon --host=fd:// --bridge=none --iptables=false --ip-masq=false --graph=/var/lib/early-docker --pidfile=/var/run/early-docker.pid
ExecStart=/usr/lib/coreos/dockerd --daemon --host=fd:// --bridge=none --iptables=false --ip-masq=false --graph=/var/lib/early-docker --pidfile=/var/run/early-docker.pid
[Install]
WantedBy=early-docker.target