MacでDocker環境構築時、Docker-for-MacとDockerHub登録が最小構成ぽいよ


はじめに

Qiita初投稿です。
Dockerのプロジェクトに初めて入って、環境構築に4時間かけて、ハマったところがあったので、MacOSX での一番シンプルな環境構築の検証結果の自分用メモです。
Vagrantの環境でのプロジェクトは経験していたのですが、プロセスやら、localhostの設定やら、VitualBox等での、VagrantとDockerの間で競合関係のエラーが出る 事を今回知りました。
基本的には、環境構築の時に使った、コマンドとDockerの公式ドキュメントの内容 ですので、DockerFile、docker-compose.yml、docker-entrypoint.shの書き方については触れません。

環境情報

環境 version
Docker-for-Mac 18.03.1-ce-mac65

docker、docker-compose、Docker-for-Mac、Docker Toolbox、docker-machineとあるけれど、どれを使えばいいの?

Docker-for-Mac vs Docker Toolbox という選択になるのが一般的だと思います。
上の公式ドキュメントの記事によると、Docker-for-Macは、docker-machineに影響を与えない。Docker-for-Mac と Docker Toolboxは共存できる。とありますが、共存は、細かい設定が必要になります。
docker-machineは、VirtualBoxに、仮想マシンを作るので、VagrantとDockerの仮想マシンがVirtualBox内に混在すると競合します(hostsをいじれば対応できるらしいが、プロセスキルや、サーバー停止などの手間が必要)。しかし、Docker-for-MacとDocker Hub登録だけの構成だとVirtualBoxに仮想マシンを作らないので、その分シンプルです。僕は、今回これでサイトを表示させるところまで行きました。

Dockerのプロセスを超綺麗にするコマンド

$ docker kill $(docker ps -aq)
$ docker rm $(docker ps -aq)
$ docker rmi $(docker images -f "dangling=true" -q)

$ docker ps
$ docker ps -a
$ docker images
$ docker-compose ps

Dockerで80番へポートマッピングした際に起きたエラーについて(参考リンク)

よって、今回は採用しませんでした。社内でも、今までのプロジェクトの全Docker化なども、構想としてあって、VagrantのプロジェクトのGitHubからForkして元プロジェクトに影響のないようにDocker化しようと考えています。

環境構築

Dockerで、環境が出来上がっているものを自分のローカル環境に落とすだけなら

$ docker-compose build
$ docker-compose up

で、済むはずが、うまく行かずにハマったのは、

$ docker ps 

した時に確認できたのですが、同じローカルホストのポート解放をDocker Hubのサンプルコードで使用していたからです。
それで、上記のDockerで80番へポートマッピングした際に起きたエラーについて(参考リンク)の記事のように
httpdの80番ポートを止めて、古いもう使わないimageは削除して、また使用したいときは、その都度イメージ作成、コンテナ作成をすれば良いと判断しました。

docker-compose コマンドまとめ から引用

docker-compose.ymlに書かれているサービスを参考にコンテナを停止し、そのコンテナとネットワークを削除します。オプションで--rmi allをつけることでイメージも削除してくれます。

$ docker-compose down --rmi all

上記のコマンドをターミナルで実行してからbuild,upすると
立ち上げるコンテナのサーバーが、error(address already in use)にならず、rails、sql共に
サーバーが立ち上がり、doneになります。

docker-compose upして、サーバーがdoneになっていれば、ssh接続などせずとも、そのまま
ローカル環境がlocalhostで立ち上がりました。

参考サイト

Docker-for-Mac vs Docker Toolbox
Dockerで80番へポートマッピングした際に起きたエラーについて
docker-compose コマンドまとめ
オープンソースのかんばん式管理ツールを3つほど試してみた