はじめに
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]
(https://docs.docker.com/docker-for-mac/install/#what-to-know-before-you-install) という選択になるのが一般的だと思います。
上の公式ドキュメントの記事によると、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.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]
(https://docs.docker.com/docker-for-mac/install/#what-to-know-before-you-install)
Dockerで80番へポートマッピングした際に起きたエラーについて
docker-compose コマンドまとめ
オープンソースのかんばん式管理ツールを3つほど試してみた