質問: 今回はじめてDockerを使用しました。 ここの https://github.com/akveo/ng2-admin Dockerfileをもとにして、同じコンテンツをブラウザで表示しようと思っています。 (Docker for mac vaersion:1.12.1) DockerとGitの仕組みをまだ完全に理解しているわけではないので、 意図した質問が出来ないかもしれませんが宜しくお願い致します。。。 1、最初にDocker for macをダウンロード 2、https://github.com/akveo/ng2-admin ここから.zipファイルとしてローカルにダウンロード。 3、適当なフォルダを作成。 User/Docker/project/ダウンロードしたファイルなど(Dockerfile含) 4、macのターミナルから上記のディレクトリへ移動し、docker buildコマンド 5、docker imagesでimageを確認し、先ほどbuildしたimageを確認 6、docker runを実行 7、ブラウザ(Chrome)でdocker psで確認したportを付けて、 http://localhost:8080 でアクセスしたのですが、このページは機能していませんと表示されてしまいます。 macのIPやdockerのIPなど確認してみたのですが、機能せずブラウザ表示できません。 runしたコマンド (docker run -d --name 任意 -p 8080:80 buildした時付けた名前:タグ名) どなたかご教示お願いできないでしょうか。 宜しくお願い致します。
回答: 気になってGitHubを見に行ってデモも触ってみたところ、とても面白かったのでわたしもDockerで動かしてみました。 コンテナ内でのアプリケーションは、8080番で起動しています。 ですので、ビルドしたdocker imageからアプリケーションを実行してアクセスするには、docker runのポート指定が逆になります。 また、Macでport 80番にフォワードしようとすると、通常はsudo(root) でないと利用できないので、8080番とか8888番とかを設定してみてください。 ``` $ docker run --name 任意の名前 -d -p 8888:8080 ng2-admin:0.7.0 ``` わたしの環境だと、これで、Mac側のブラウザの http://localhost:8888/ でアクセスできました。 (8080は別で使っているので8888にしましたが、こちらも空いてるポートなら任意です) もし宜しければ、dockerのコンテナをGUIで操作できるKitematicも使ってみると良いかと思います。 (停止しているコンテナを起動する際に、GUIからポートを変更したり共有するボリュームを調整したりできます) 参考までに、キャプチャをつけておきます。 !Kitematicでの確認 **追記:アプリケーションのソースの編集について** 面白そうだったのでやってみました...。色々方法があると思いますので、1例として挙げますね。 DockerのホストがMacで、イメージを作る際にGitHubから一式ソースを取得していると思います。 ``` $ tree -L 1 . ├── CHANGELOG.md ├── Dockerfile ├── LICENSE ├── README.md ├── _VERSION ├── build.sh ├── config ├── docs ├── package.json ├── src ├── tsconfig.json ├── tslint.json ├── typedoc.json └── webpack.config.js 3 directories, 11 files ``` ここのsrc/がAngularJSのソースになるとおもいます。(まちがってたらすみません) また、このDockerのイメージは、ビルド時に同じソースを /var/www というところに持ってきて展開しています。 コンテナ側の/var/www/src に当たるところを、Mac側の src/ として共有する形で起動してあげるといいと思います。 コンテナに"docker exec"で入って、ソースファイルの変更をwatchするコマンドを発行しておくと、Mac上でお好きなエディタでソースを編集してあげたタイミングでビルドが走って、アプリケーションにも反映されるんじゃないかと思います。 以下、やってみた例です。 ボリュームをシェアすると、Kitematic側でも確認できます。また、いったんコンテナをGUIから保存しておいて、保存している状態でその他必要に応じてボリュームを追加できたりします。 ``` # まずは起動(ソースのボリュームだけシェア) $ docker run --name demo -v ~/work/ng2-admin/src:/var/www/src -d -p 8888:8080 ng2-admin:0.7.0 # コンテナ起動したらexecでコンテナに入る $ docker exec -it demo /bin/bash # 入った先で watchを起動、更新があるとソースを勝手にビルド # npm run watch:dev ``` !イメージ説明 これくらいで、あまり運用とかはわからないのですが、参考になれば....