-
Notifications
You must be signed in to change notification settings - Fork 4
/
617.txt
238 lines (168 loc) · 8.76 KB
/
617.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
* ドキュメント
[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>