docker

Docker

ドキュメント

[41] https://docs.docker.com/ にあります。

[42] Google検索だと docker.jp というサイトが出てきて、 日本語でわかりやすそうでうっかり開いてしまいますが、 古かったりするので要注意。 信頼できる公式ドキュメントを見ましょう。

機能、概念

[12] Docker

Docker repository

[10]

Docker を使ったクラウドサービス

[9]

コンテナー内からホストにアクセスする

[3] Docker container 内からホスト (外側) に TCP/IP でアクセスしたい時は、

$ docker run --add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }') -i -t debian:sid /bin/bash
... のように --add-host オプションを指定すると、ホスト名 dockerhost/etc/hosts に追加されますので、この名前でアクセスできます。

[26] この dockerhost という名前は任意の値で良いのですが、 幾つかのサンプルで共通して使われている他、 実際のアプリケーション等でもこの名前を採用したものがいくつかありました。

[27] 何依存なのか正確には調べていませんが、いつからかこれでは IPアドレスではなくて linkdown という値が返ってくるようになりました。

[28] container がいくつか実行中のときだけ linkdown ではなくなるのかも?


[17] Mac OS X ではこれは使えません。 Docker for Macdocker.for.mac.localhost という名前を用意しているようです。 その後 docker.for.mac.internal が追加されたようです。 また同様に Windows 版で docker.for.win.localhost, docker.for.win.internal が追加されたようです。

[25] DevilboxLinux 用に docker.for.lin.host.internal, docker.for.lin.localhost を使っていました >>21

[24] プラットフォームごとに異なる不便が続いていましたが、 最終的に host.docker.internal が追加されて統一されました >>23, >>29

[30] ゲートウェイを表す gateway.docker.internal もあります。 >>29

[31] ただし Linux 版にはまだ追加されていません。 各種実行プラットフォームで普通に使えるようになるまでは、 まだしばらく時間がかかりそうです。

[32] また、 Docker 内で他の Docker container を動作させる、 いわゆる "Docker in Docker" 的手法を使う場合には、 見かけ上の「ホスト」 (的なもの = Docker container の実行元) と実際のホストが別になってしまうので、 host.docker.internal では解決できません。 CI などで要注意です。

一定時間後に終了させたい

[34] docker 単体ではできない。

[33] Add timeout option to docker run · Issue #1905 · moby/moby · GitHub, https://github.com/moby/moby/issues/1905

[35] How to limit `docker run` execution time? - Stack Overflow, https://stackoverflow.com/questions/48299352/how-to-limit-docker-run-execution-time

不要データを削除させて空き領域を増やす

[36] 放っておくとどんどんディスク空き領域が消えていきます。

[16] 令和最新版:

$ docker volume ls -qf dangling=true | xargs docker volume rm
$ docker system prune --force

[38] それに加えて

$ docker image prune -a -f

... も実行すると空きが一気に増えることがあります。しかしこれはちょっと危険で、 container が利用中でない image を全部消してくれ(しまい)ます。 常時実行中のサーバーの最新イメージ以外は要らないみたいなときに使うべきです。 まだ push していないイメージとかローカルでだけしか使わないイメージを置いてある開発環境とかで間違って実行すると悲しくなります。

[37] 古いバージョンは便利なやつがないので組合せでやるしかなかった:

[7] Dockerで不要になったコンテナやイメージを削除する - @znz blog (Kazuhiro NISHIYAMA 著, 版) http://blog.n-z.jp/blog/2013-12-24-docker-rm.html

/var/lib/docker/tmp/GetImageBlob* が大量にできてディスク容量を圧迫し続けている

[39] /tmp filling up with GetImageBlob* files · Issue #29284 · moby/moby · GitHub, https://github.com/moby/moby/issues/29284

[40] >>39 docker daemon を再起動しろとのこと。

メモ

[1] lukecyca/travis-docker-example ( 版) https://github.com/lukecyca/travis-docker-example

Proof of concept for running docker in a Travis CI build

[2] 【翻訳】いいDockerイメージを構築するには? ーDockerfileのベストプラクティス | POSTD ( 版) http://postd.cc/building-good-docker-images/

[6] Heroku | Introducing 'heroku docker:release': Build & Deploy Heroku Apps with Docker ( 版) https://blog.heroku.com/archives/2015/5/5/introducing_heroku_docker_release_build_deploy_heroku_apps_with_docker

Docker

[8] docker pull を複数同時に実行すると、 (異なるイメージであっても) 何か干渉するのか、途中で固まることがあります。できるだけ同時に1つだけしか実行しないように配慮するべきのようです。

[11] Get Started, Part 1: Orientation and Setup | Docker Documentation ( ()) https://docs.docker.com/get-started/#prerequisites

[13] Install Docker | Docker Documentation () https://docs.docker.com/engine/installation/

[14] docker run ... -p でポートを転送していると、意図せず Docker container のポートを外部に晒してしまう場合があります。 iptablesfirewalld で遮断しているつもりでも、 それよりも Docker 側の規則が勝ってしまう場合があります。

[15] iptablesでDockerコンテナへのアクセス制限をする - Qiita () http://qiita.com/irotoris/items/f3b98feb69807f450984

[43] Docker is deleting Open Source organisations - what you need to know, https://blog.alexellis.io/docker-is-deleting-open-source-images/