* ドキュメント

[41] 
<https://docs.docker.com/>
にあります。

[42] 
[[Google検索]]だと docker.jp というサイトが出てきて、
[[日本語]]でわかりやすそうでうっかり開いてしまいますが、
古かったりするので要注意。
信頼できる公式ドキュメントを見ましょう。


* 機能、概念

[FIG(short list)[ [12] [[Docker]]
- [[image][image (Docker)]]
- [[container][container (Docker)]]
- [[Docker Compose]]
- [[Swarm Mode]]
]FIG]

* Docker repository

[FIG(short list)[ [10] 
- [[Docker Hub]]
- [[quay.io]]
]FIG]

* Docker を使ったクラウドサービス

[FIG(short list)[ [9] 
- [[Docker Cloud]]
- [[Amazon ECS]]
- [[Arukas]]
]FIG]

* コンテナー内からホストにアクセスする


[3] [[Docker]] [[container]] 内から[[ホスト]] (外側) に [[TCP/IP]]
でアクセスしたい時は、
[PRE(code)[
$ docker run --add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }') -i -t debian:sid /bin/bash
]PRE]
... のように [CODE[--add-host]] オプションを指定すると、[[ホスト名]]
[DFN[[CODE[dockerhost]]]] が [CODE[/etc/hosts]] に追加されますので、この名前でアクセスできます。

[26] 
この [CODE[dockerhost]] という名前は任意の値で良いのですが、
幾つかのサンプルで共通して使われている他、
実際のアプリケーション等でもこの名前を採用したものがいくつかありました。

[27] 
何依存なのか正確には調べていませんが、いつからかこれでは
[[IPアドレス]]ではなくて
[CODE[linkdown]]
という値が返ってくるようになりました。

[28] 
container がいくつか実行中のときだけ linkdown ではなくなるのかも?


-*-*-

[17] [[Mac OS X]] ではこれは使えません。 [[Docker for Mac]] は
[DFN[[CODE[docker.for.mac.localhost]]]] という名前を用意しているようです。
その後 [DFN[[CODE[docker.for.mac.internal]]]] が追加されたようです。
また同様に [[Windows]] 版で
[DFN[[CODE[docker.for.win.localhost]]]],
[DFN[[CODE[docker.for.win.internal]]]]
が追加されたようです。

[25] 
[[Devilbox]]
は
[[Linux]]
用に
[DFN[[CODE[docker.for.lin.host.internal]]]],
[DFN[[CODE[docker.for.lin.localhost]]]]
を使っていました
[SRC[>>21]]。



[24] 
[[プラットフォーム]]ごとに異なる不便が続いていましたが、
最終的に
[DFN[[CODE[host.docker.internal]]]]
が追加されて統一されました
[SRC[>>23, >>29]]。

[30] 
[[ゲートウェイ]]を表す
[DFN[[CODE[gateway.docker.internal]]]]
もあります。
[SRC[>>29]]

[31] 
ただし [[Linux]] 版にはまだ追加されていません。
各種実行[[プラットフォーム]]で普通に使えるようになるまでは、
まだしばらく時間がかかりそうです。

[32] 
また、 [[Docker]] 内で他の [[Docker]] container を動作させる、
いわゆる "Docker in Docker" 的手法を使う場合には、
見かけ上の「ホスト」 (的なもの = Docker container の実行元)
と実際の[[ホスト]]が別になってしまうので、
[CODE[host.docker.internal]]
では解決できません。
[[CI]] などで要注意です。

[REFS[
- [4] [CITE@en[Proposal: Hostname in /etc/hosts pointing to the host · Issue #10023 · docker/docker]]
([TIME[2015-03-02 16:49:42 +09:00]] 版)
<https://github.com/docker/docker/issues/10023>
- [5] [CITE@en[Document how to connect to Docker host from container · Issue #1143 · docker/docker]]
([TIME[2015-03-02 16:49:48 +09:00]] 版)
<https://github.com/docker/docker/issues/1143>
- [18] [CITE@en[Networking features in Docker for Mac | Docker Documentation]]
([TIME[2017-12-29 00:22:26 +09:00]])
<https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds>
-[21] [CITE@en[3. Connect to host OS — [[Devilbox]] 1.0 documentation]], [TIME[2021-01-29T01:59:37.000Z]], [TIME[2021-04-09T02:55:43.401Z]] <https://devilbox.readthedocs.io/en/latest/advanced/connect-to-host-os.html>
- [22] [CITE@en[special DNS record for host.docker.internal + gateway.docker.internal by 0xbad0c0d3 · Pull Request #2348 · moby/libnetwork · GitHub]], [TIME[2021-04-09T02:59:47.000Z]] <https://github.com/moby/libnetwork/pull/2348>
- [23] [CITE@en[Support host.docker.internal in dockerd on Linux by arkodg · Pull Request #40007 · moby/moby · GitHub]], [TIME[2021-04-09T03:00:05.000Z]] <https://github.com/moby/moby/pull/40007>
-
[29] 
[CITE@en[Networking features in Docker Desktop for Mac | [[Docker]] Documentation]], [TIME[2022-03-24T19:10:54.000Z]], [TIME[2022-03-25T09:12:06.530Z]] <https://docs.docker.com/desktop/mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host>

]REFS]

* 一定時間後に終了させたい

[34] [CODE[docker]] 単体ではできない。

[33] [CITE@en[Add timeout option to docker run · Issue #1905 · moby/moby · GitHub]], [TIME[2022-06-26T03:17:20.000Z]] <https://github.com/moby/moby/issues/1905>

[35] [CITE@en[How to limit `docker run` execution time? - Stack Overflow]], [TIME[2022-06-26T03:18:20.000Z]] <https://stackoverflow.com/questions/48299352/how-to-limit-docker-run-execution-time>


* 不要データを削除させて空き領域を増やす

[36] 放っておくとどんどん[[ディスク]]の[[空き領域]]が消えていきます。


[16] 
[[令和最新版]]:

[PRE(sh code)[
$ docker volume ls -qf dangling=true | xargs docker volume rm
$ docker system prune --force
]PRE]

[38] それに加えて

[PRE(sh code)[
$ docker image prune -a -f
]PRE]

... も実行すると空きが一気に増えることがあります。しかしこれはちょっと危険で、
container が利用中でない image を全部消してくれ(しまい)ます。
常時実行中のサーバーの最新イメージ以外は要らないみたいなときに使うべきです。
まだ push していないイメージとかローカルでだけしか使わないイメージを置いてある開発環境とかで間違って実行すると悲しくなります。



[37] 古いバージョンは便利なやつがないので組合せでやるしかなかった:

-[19] 
[CODE[docker rm -f $(docker ps -a -q)]]
-
[20] 
[CODE[docker rmi $(docker images -f "dangling=true" -q)]]








[7] [CITE@en[Dockerで不要になったコンテナやイメージを削除する - @znz blog]]
([[Kazuhiro NISHIYAMA]] 著, [TIME[2015-05-09 23:48:41 +09:00]] 版)
<http://blog.n-z.jp/blog/2013-12-24-docker-rm.html>

* /var/lib/docker/tmp/GetImageBlob* が大量にできてディスク容量を圧迫し続けている

[39] [CITE@en[/tmp filling up with GetImageBlob* files · Issue #29284 · moby/moby · [[GitHub]]]], [TIME[2022-07-31T02:28:31.000Z]] <https://github.com/moby/moby/issues/29284>

[40] >>39 docker daemon を再起動しろとのこと。

* メモ

[FIG(quote)[
[FIGCAPTION[
[1] [CITE@en[lukecyca/travis-docker-example]]
([TIME[2015-03-01 23:50:19 +09:00]] 版)
<https://github.com/lukecyca/travis-docker-example>
]FIGCAPTION]

> Proof of concept for running docker in a Travis CI build

]FIG]


[2] [CITE@ja[【翻訳】いいDockerイメージを構築するには? ーDockerfileのベストプラクティス | POSTD]]
([TIME[2015-03-02 00:03:21 +09:00]] 版)
<http://postd.cc/building-good-docker-images/>


[6] [CITE@en[Heroku | Introducing 'heroku docker:release': Build & Deploy Heroku Apps with Docker]]
([TIME[2015-05-06 03:12:11 +09:00]] 版)
<https://blog.heroku.com/archives/2015/5/5/introducing_heroku_docker_release_build_deploy_heroku_apps_with_docker>

[FIG(amazon)[
Docker
]FIG]

[8] [CODE[docker pull]] を複数同時に実行すると、 (異なるイメージであっても)
何か干渉するのか、途中で固まることがあります。できるだけ同時に1つだけしか実行しないように配慮するべきのようです。

[11] [CITE@en[Get Started, Part 1: Orientation and Setup | Docker Documentation]]
( ([TIME[2017-06-10 10:22:25 +09:00]]))
<https://docs.docker.com/get-started/#prerequisites>

[13] [CITE@en[Install Docker | Docker Documentation]]
([TIME[2017-06-10 10:22:12 +09:00]])
<https://docs.docker.com/engine/installation/>

[14] [CODE[docker run]] ... [CODE[-p]] でポートを転送していると、意図せず 
Docker container のポートを外部に晒してしまう場合があります。
[[iptables]] や [[firewalld]] で遮断しているつもりでも、
それよりも [[Docker]] 側の規則が勝ってしまう場合があります。


[15] [CITE[iptablesでDockerコンテナへのアクセス制限をする - Qiita]]
([TIME[2017-06-11 01:26:46 +09:00]])
<http://qiita.com/irotoris/items/f3b98feb69807f450984>


[43] [CITE[Docker is deleting Open Source organisations - what you need to know]], [TIME[2023-03-17T11:00:37.000Z]] <https://blog.alexellis.io/docker-is-deleting-open-source-images/>
