Dockerを使ってコンテナ環境を構築する場合、docker runコマンドで実行していたコマンドをそのままdocker-compose.ymlファイルに設定したい場合があります。その逆に、docker-compose.ymlファイルに設定しているものを、そのままdocker runで実行したい場合もあります。どちらの場合でも、この記事で紹介する無料ツールを使うことによって、「docker runコマンドをdocker-compose.ymlに変換」、「docker-compose.ymlをdocker runコマンドに変換」という双方向の変換が可能となります。
Dockerイメージを配布しているサイトでは、docker runコマンドしか紹介されていない場合も多く、そのような場合にdocker-compose.ymlファイルをどう記述すればよいのか分からなかったりしますが、ここで紹介するツールを使うことで簡単に変換できます。
docker runコマンドをdocker-compose.ymlに変換
docker runコマンドをdocker-compose.ymlファイルに変換するには、「composerize」というツールを使うと便利です。
「https://www.composerize.com/」というサイトにアクセスします。すると次のような画面が表示されます。

画面上部には下記のようなdocker runコマンドの例が記載されています。
docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx
このdocker runコマンドをdocker-compose.ymlファイルに変換した結果が、画面下部分に表示されています。
name: <your project name>
services:
nginx:
ports:
- 80:80
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
logging:
options:
max-size: 1g
image: nginx
変換したいdocker runコマンドをコピー&ペーストするだけで、このようにdocker-compose.ymlファイルの設定が瞬時に生成されます。この結果をコピーしてdocker-compose.ymlファイルに記載するだけです。
docker-compose.ymlをdocker runコマンドに変換
docker-compose.ymlファイルをdocker runコマンドに変換するには、「decomposerize」というツールを使うと便利です。
「https://www.decomposerize.com/」というサイトにアクセスします。すると次のような画面が表示されます。

画面上部には下記のようなdocker-compose.ymlファイルの例が記載されています。
version: '3.3'
services:
nginx:
ports:
- '80:80'
volumes:
- '/var/run/docker.sock:/tmp/docker.sock:ro'
restart: always
logging:
options:
max-size: 1g
image: nginx
このdocker-compose.ymlファイルをdocker runコマンドに変換した結果が、画面下部分に表示されています。
docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx
変換したいdocker-compose.ymlファイルの設定をコピー&ペーストするだけで、このようにdocker runコマンドが瞬時に生成されます。この結果をコピーしてdocker runコマンドを実行できるようになります。
それぞれの変換ツールのコマンドライン版
composerize (docker runコマンドをdocker-compose.ymlに変換)ツールには、コマンドラインで実行できるものも用意されています。こちらを使うことも可能です。利用方法は下記GitHubに詳しく記載されています。
decomposerize (docker-compose.ymlをdocker runコマンドに変換)ツールにも、コマンドラインで実行できるものも用意されています。こちらを使うことも可能です。利用方法は下記GitHubに詳しく記載されています。
まとめ
ここまで紹介したように、docker runコマンドからdocker-compose.ymlに変換、docker-compose.ymlをdocker runコマンドに変換するという、双方向の変換ツールを見てきました。実際に有名なApacheウェブサーバー(https://hub.docker.com/_/httpd)のDockerイメージファイルの紹介ページにはdocker-runコマンドしか記載されていません。しかしツールを使えば簡単にdocker runコマンドからdocker-compose.ymlファイルを生成することが出来ます。
ApacheウェブサーバーのDockerイメージを実行するためのdocker runコマンドは次のように紹介されています。
docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
composerizeツールを用いてdocker runコマンドを変換すると、次のようにdocker-compose.ymlファイルの内容を生成することが出来ます。
name: <your project name>
services:
httpd:
stdin_open: true
tty: true
container_name: my-apache-app
ports:
- 8080:80
volumes:
- '"$PWD":/usr/local/apache2/htdocs/'
image: httpd:2.4
非常に簡単に変換できることが分かります。かなり時短が出来ますので是非活用して開発をスムーズに進められるようにしましょう。