アドバンテージじゃなくて使い方が全く違う。

物理マシンでも仮想マシンでも作ったらOSをインストールしないといけないだろ?
CentOSとかDebianとかUbuntuとか
その上でアプリを動かそうとしたら、アプリに必要なパッケージを入れて
Rubyなどの実行環境を整えてから動かすだろ?
だけどディストリごとにパッケージ名は違うし設定内容とかも違う

いろんな物理マシン・仮想マシンで自分で作ったアプリを動かそうとしたら
それぞれ違う手順が必要になり大変なわけだ

Dockerを使うとアプリを動かすのに必要なもの、(カーネルを除いた)パッケージから
ライブラリから言語から全部Dockerイメージにまとめてしまえる。

ディストロのパッケージ入れて実行バイナリを起動する代わりにDockerコンテナを起動する
Dockerコンテナ=アプリと思えばいい

カーネル以外の全てがDockerイメージにまとまってるから、CentOSでもDebianでもUbuntuでも
Windows(上のDocker専用のLinuxベースの仮想マシン)でも
Mac(上のDocker専用のLinuxベースの仮想マシン)でも
クラウドで用意されたDockerコンテナ専用の軽量仮想マシンでも同じように動く

Dockerイメージを動かすのに必要なのは、対応したLinuxカーネルとDockerのみ。
これだけ満たしていれば、いろんな環境に簡単にデプロイ出来るようになる。
(主に自分で開発したアプリを)