Google Cloud Engine integration for Docker
gce-docker is a service that provides integration with the GCE to Docker, the following resources are supported:
- Persistent Disks, the service is able to attach, format and mount persistent-disks allowing to use it as volumes in the container
- Load Balancers & External IPs: support from auto-creation of LoadBanacers and External IPs allowing direcct access to the container.
Examples
Creating a Persistent Disk and mount is a volume to a Container
docker run -ti -v my-disk:/data --volume-driver=gce busybox df -h /data
Creating a simple Load Balancer with a static IP
docker run -d --label gce.lb.address=104.197.200.230 --label gce.lb.type=static -p 80:80 tutum/hello-world
Installing
The recommended way to install gce-docker
is use the provided docker image.
Run the driver using the following command:
docker run -d -v /:/rootfs -v /run/docker/plugins:/run/docker/plugins -v /var/run/docker.sock:/var/run/docker.sock --privileged mcuadros/gce-docker
privileged
is required since gce-docker
needs low level access to the host mount namespace, the driver mounts, umounts and format disk.
The instance requires Read/Write
privileges to Google Compute Engine and IP forwarding flags should be active to.
Usage
Persistent Disks
Persistent disk creation
Using docker volume create
a new disk is created.
docker volume create --driver=gce --name my-disk -o SizeGb=90
Options:
- Type (optional, default:pd-ssd, options:
pd-ssd
or pd-standard
): Disk type to use to create the disk.
- SizeGb (optional): Size of the persistent disk, specified in GB.
- SourceSnapshot (optional): The source snapshot used to create this disk.
- SourceImaget (optional): The source image used to create this disk.
Using a disk on your container
Just add the flags --volume-driver=gce
and the -v <disk-name>:/data
to any docker run command:
docker run -ti -v my-disk:/data --volume-driver=gce busybox sh
If the disk already exists will be used, if not a new one with the default values will be created (Standard/500GB)
The disk is attached to the instance, if the disk is not formatted also is formatted with ext4
, when the container stops, the disk is unmounted and detached.
Load Balancer
The load balancers, are handle by a watcher, waiting for Docker events, the watched events are start
and die
. When a new containeris created or destroyed, the LoadBalancer and all the others dependant resources are created or deleted too.
This is a small example create a LoadBalancer for a web server:
docker run -d --label gce.lb.type=ephemeral -p 80:80 tutum/hello-world
Available labels:
- gce.lb.type (options:
ephemeral
or static
): Type of IP to be used in the new load balancer
- gce.lb.group (optional): Name of group of instances to assign to the same load balancer. If not provided a combination of instance name and container id will be used.
- gce.lb.address (optional, required with type
static
): Value of the reserved IP address that the forwarding rule is serving on behalf of. The IP address or the IP name.
- gce.lb.source.ranges (optional): The IP address blocks that this load balancer applies to expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
- gce.lb.source.tags (optional):A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
- gce.lb.session.affinity (optional): Sesssion affinity option, must be one of the following values:
NONE
: Connections from the same client IP may go to any instance in the pool.
CLIENT_IP
: Connections from the same client IP will go to the same instance in the pool while that instance remains healthy.
CLIENT_IP_PROTO
: Connections from the same client IP with the same IP protocol will go to the same instance in the pool while that instance remains healthy.
License
MIT, see LICENSE