They're all quite different. Canvas is raster based, SVG is vector, and WebGL is a totally different approach tailored to hardware acceleration (and still paints into a canvas, so it's raster ultimately).
You can use WebGL as a 2D drawing system. On machines with OpenGL hardware support (which today is everything above a flip phone) that's a reasonable way to do fast 2D work. Games often do that for their menu screens.
SVG is more useful as a storage format than as a graphics toolbox.