Skip to content

Commit 3b17529

Browse files
docker: Move Dockerfile files for "base" image from the root of the repository to docker/base.
This unifies the locations of most of our Docker configurations and reduces complexity. In the past, we probably had to put the Dockerfile for the "base" image in the root for the automated build feature of Docker Hub. But now they support custom paths for the Dockerfile and we should no longer have to do this. Since the automated build looks for a README.md in the same file as the Dockerfile I created a new one in docker/base/. For the most part it is copied from the root directory, but I removed the badges at the top and the reference to Gitter. Additionally, I've created docker/README.md which lists our different Docker images and describes how they are used in detail.
1 parent 4c87f97 commit 3b17529

File tree

8 files changed

+100
-8
lines changed

8 files changed

+100
-8
lines changed

Makefile

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ php_proto:
148148
docker cp vitess_php-proto:/vt/src/github.com/youtube/vitess/php/src/Vitess/Proto/. php/src/Vitess/Proto/
149149
docker rm vitess_php-proto
150150

151+
# Helper targets for building Docker images.
152+
# Please read docker/README.md to understand the different available images.
153+
151154
# This rule builds the bootstrap images for all flavors.
152155
DOCKER_IMAGES_FOR_TEST = mariadb mysql56 mysql57 percona percona57
153156
DOCKER_IMAGES = common $(DOCKER_IMAGES_FOR_TEST)
@@ -164,29 +167,26 @@ docker_bootstrap_push:
164167
docker_bootstrap_pull:
165168
for i in $(DOCKER_IMAGES); do echo "pulling bootstrap image: $$i"; docker pull vitess/bootstrap:$$i || exit 1; done
166169

167-
# Note: The default base and lite images (tag "latest") use MySQL 5.7.
168-
# Images with other MySQL/MariaDB versions get their own tag e.g. "mariadb".
169-
# We never push the non-"latest" tags though and only provide them for convenience for users who want to run something else than MySQL 5.7.
170170
docker_base:
171171
# Fix permissions before copying files, to avoid AUFS bug.
172172
chmod -R o=g *
173-
docker build -t vitess/base .
173+
docker build -f docker/base/Dockerfile -t vitess/base .
174174

175175
docker_base_mysql56:
176176
chmod -R o=g *
177-
docker build -f Dockerfile.mysql56 -t vitess/base:mysql56 .
177+
docker build -f docker/base/Dockerfile.mysql56 -t vitess/base:mysql56 .
178178

179179
docker_base_mariadb:
180180
chmod -R o=g *
181-
docker build -f Dockerfile.mariadb -t vitess/base:mariadb .
181+
docker build -f docker/base/Dockerfile.mariadb -t vitess/base:mariadb .
182182

183183
docker_base_percona:
184184
chmod -R o=g *
185-
docker build -f Dockerfile.percona -t vitess/base:percona .
185+
docker build -f docker/base/Dockerfile.percona -t vitess/base:percona .
186186

187187
docker_base_percona57:
188188
chmod -R o=g *
189-
docker build -f Dockerfile.percona57 -t vitess/base:percona57 .
189+
docker build -f docker/base/Dockerfile.percona57 -t vitess/base:percona57 .
190190

191191
docker_lite: docker_base
192192
cd docker/lite && ./build.sh

docker/README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Vitess Docker Images
2+
3+
The Vitess Project publishes several Docker images in the [Docker Hub "vitess" repository](https://hub.docker.com/u/vitess/).
4+
This file describes the purpose of the different images.
5+
6+
**TL;DR:** Use the [vitess/lite](https://hub.docker.com/r/vitess/lite/) image for running Vitess.
7+
Our Kubernetes Tutorial uses it as well.
8+
Instead of using the `latest` tag, you can pin it to a known stable version e.g. `v2.0`.
9+
10+
## Principles
11+
12+
The structure of this directory and our Dockerfile files is guided by the following principles:
13+
14+
* The configuration of each Vitess image is in the directory `docker/<image>/`.
15+
* Configurations for other images e.g. our internal tool Keytar (see below), can be in a different location.
16+
* Images with more complex build steps have a `build.sh` script e.g. see [lite/build.sh](https://github.com/youtube/vitess/blob/master/docker/lite/build.sh).
17+
* Tags are used to provide (stable) versions e.g. see tag `v2.0` for the image [vitess/lite](https://hub.docker.com/r/vitess/lite/tags).
18+
* Where applicable, we provide a `latest` tag to reference the latest build of an image.
19+
20+
## Images
21+
22+
Our list of images can be grouped into:
23+
24+
* published Vitess code
25+
* dependencies for our Kubernetes tutorial
26+
* internally used tools
27+
28+
### Vitess
29+
30+
| Image | How (When) Updated | Description |
31+
| --- | --- | --- |
32+
| **bootstrap** | manual (after incompatible changes are made to [bootstrap.sh](https://github.com/youtube/vitess/blob/master/bootstrap.sh) or [vendor/vendor.json](https://github.com/youtube/vitess/blob/master/vendor/vendor.json) | Basis for all Vitess images. It is a snapshot of the checked out repository after running `./bootstrap.sh`. Used to cache dependencies. Avoids lengthy recompilation of dependencies if they did not change. Our internal test runner [`test.go`](https://github.com/youtube/vitess/blob/master/test.go) uses it to test the code against different MySQL versions. |
33+
| **base** | automatic (after every GitHub push to the master branch) | Contains all Vitess server binaries. Snapshot after running `make build`. |
34+
| **root** | automatic (after every GitHub push to the master branch) | Same as **base** but with the default user set to "root". Required for Kubernetes. |
35+
| **lite** | manual (updated with every Vitess release) | Stripped down version of **base** e.g. source code and build dependencies are removed. Default image in our Kubernetes templates for minimized startup time. |
36+
37+
All these Vitess images include a specific MySQL/MariaDB version ("flavor").
38+
39+
* We provide Dockerfile files for multiple flavors (`Dockerfile.<flavor>`).
40+
* As of April 2017, the following flavors are supported: `mariadb`, `mysql56`, `mysql57`, `percona`(56), `percona57`
41+
* On Docker Hub we publish only images with MySQL 5.7 to minimize maintenance overhead and avoid confusion.
42+
* If you need an image for a different flavor, it is very easy to build it yourself. See the [Custom Docker Build instructions](http://vitess.io/getting-started/docker-build.html).
43+
44+
If you are looking for a stable version of Vitess, use the **lite** image with a fixed version. If you are looking for the latest Vitess code in binary form, use the "latest" tag of the **base** image.
45+
46+
### Kubernetes Tutorial Dependencies
47+
48+
| Image | How (When) Updated | Description |
49+
| --- | --- | --- |
50+
| **etcd-lite** | manual | Our Kubernetes tutorial uses etcd as Vitess topology backing store and runs this image. It is a stripped version of the **etcd** image for faster Kubernetes startup times. Published as `vitess/etcd:<version>-lite` e.g. [v2.0.13-lite](https://hub.docker.com/r/vitess/etcd/tags/). |
51+
| **etcd** | manual | Basis for **etcd-lite**. |
52+
| **guestbook** | manual (updated with every Vitess release) | Vitess adaption of the Kubernetes guestbook example. Used to showcase sharding in Vitess. Dockerfile is located in [`examples/kubernetes/guestbook/`](https://github.com/youtube/vitess/tree/master/examples/kubernetes/guestbook). |
53+
| **orchestrator** | manual | Binaries for [Orchestrator](https://github.com/github/orchestrator). It can be used with Vitess for automatic failovers. Currently not part of the Kubernetes Tutorial and only used in tests. |
54+
55+
### Internal Tools
56+
57+
These images are used by the Vitess project for internal workflows and testing infrastructure and can be ignored by users.
58+
59+
| Image | How (When) Updated | Description |
60+
| --- | --- | --- |
61+
| **publish-site** | manual | Contains [Jekyll](https://jekyllrb.com/) which we use to generate our [vitess.io](http://vitess.io) website from the Markdown files located in [doc/](https://github.com/youtube/vitess/tree/master/doc). |
62+
| **keytar** | manual | Keytar is a Vitess testing framework to run our Kubernetes cluster tests. Dockerfile is located in [`test/cluster/keytar/`](https://github.com/youtube/vitess/tree/master/test/cluster/keytar). |
File renamed without changes.

docker/base/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Vitess
2+
3+
Vitess is a database clustering system for horizontal scaling of MySQL
4+
through generalized sharding.
5+
6+
By encapsulating shard-routing logic, Vitess allows application code and
7+
database queries to remain agnostic to the distribution of data onto
8+
multiple shards. With Vitess, you can even split and merge shards as your needs
9+
grow, with an atomic cutover step that takes only a few seconds.
10+
11+
Vitess has been a core component of YouTube's database infrastructure
12+
since 2011, and has grown to encompass tens of thousands of MySQL nodes.
13+
14+
For more about Vitess, please visit [vitess.io](http://vitess.io).
15+
16+
## Contact
17+
18+
Ask questions in the
19+
[vitess@googlegroups.com](https://groups.google.com/forum/#!forum/vitess)
20+
discussion forum.
21+
22+
Subscribe to
23+
[vitess-announce@googlegroups.com](https://groups.google.com/forum/#!forum/vitess-announce)
24+
or the [Vitess Blog](http://blog.vitess.io/)
25+
for low-frequency updates like new features and releases.
26+
27+
## License
28+
29+
Unless otherwise noted, the Vitess source files are distributed
30+
under the BSD-style license found in the LICENSE file.

0 commit comments

Comments
 (0)