【備忘録】自分向けDocker開発を楽にするために

### dockerコンテナのIP確認

```
docker inspect <コンテナID> | grep IPAddress
```
https://mebee.info/2021/08/05/post-40153/

### docker containerにアクセスできないとき

以下を参考にして確認
https://web.plus-idea.net/on/docker-web-server-access-denied/

### docker hostネットワークの罠

hostネットワークを利用する際は「EXPOSE」でポートを開けときましょう

```
hostモードのネットワークを利用する場合、コンテナーは独自の IP アドレスを持たないため、ポートマッピング は機能しません。
したがって-p、--publish、-P、--publish-allの各オプションは無視され、警告メッセージが表示されます。
```

https://matsuand.github.io/docs.docker.jp.onthefly/network/host/

### ubuntuでのIP確認方法

```
ip addr show	#IPv4とIPv6アドレスを表示
ip a	#ip addr showと同じ
hostname -I	#IPv4アドレスを表示
curl ifconfig.me	#サーバと通信する時に使われるパブリックIPアドレスを表示
```

https://news.mynavi.jp/techplus/article/20190825-883094/


### dockerの内部IPを調べる方法

https://qiita.com/miyatahirotaka/items/a44e2ae0bac53a4a5feb


### docker create network でサブネット管理

※どのサブネットに属するかを設定し忘れると後々とんでもないことになる
https://qiita.com/MetricFire/items/b731c84975bd9894748d

### dockerのコンテナ間通信の方法

- リンクを作成（レガシー）

以下の理由があってレガシーなのかな。。。
※portを自動設定してくれるので楽なんだけど、複数のコンテナがある場合portの管理がめんどくさい。
※ハッカーが大好きなポートスキャンをされる可能性を考慮し、portの管理はしっかり行えるようにする

https://docs.oracle.com/cd/E39368_01/E75728/html/section_rsr_p2z_fp.html

- dockerネットワーク作成（これがメインかな）

https://qiita.com/zgw426/items/bb42f6bd17707de354b9 


docker networkは難しい！少し触らなかったらすぐに忘れちゃうのでこちらの記事で思い出す。
3つくらい記事を読んだらだいたいok
https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9
https://sagantaf.hatenablog.com/entry/2019/12/18/234553
https://genchan.net/it/virtualization/docker/10601/
https://qiita.com/suo-takefumi/items/bb42f6bd17707de354b9





### とにかく「疎通確認」をしてからコンテナ内部の実装に入る
個人的に最適なコンテナ構築フロー
- 中身のないdocker container作成（ubuntuだけ立ち上げる）
- 手書きでネットワーク図を書く。ポートフォアディングとかの設計を行う

ネットワーク系わからなくなったら以下を参考にする。頭の整理をする

https://knowledge.sakura.ad.jp/16082/

- dockerfileのexposeやdocker　runのポート確認を行う
- pingやtelnetで疎通ができるか確認
- 以下の対処(疎通できてないよ。これはIPがおかしいよ)

```
[Errno99] Cannot assign requested address
```

6. 以下の対処

```
エラー内容メモしてたのに忘れてしまった！！！！
IPは通ってるがportが空いてないよ、のエラー
```

- 疎通確認できしだい、ごりごりDockerfileを作っていく


### 訳わからないエラーに頭を抱えないように「privileged」設定をする。最後に「privileged」をなくして実装

```
docker run --privileged ~~~~~
```

https://qiita.com/muddydixon/items/d2982ab0846002bf3ea8

### dockerfileを最適化しすぎてコンテナに入った時に後悔しがちなモジュール


- pingがない。netstatがない。等（netstatの引数は -nap : netstat -nap）

```
apt-get install iputils-ping net-tools
```

- telnetがない

```
apt-get update 
apt-get install telnet
```

- lsofがない

```
apt-get install lsof
```

他にもあればupdate


### ubuntuのバージョン確認



```
lsb_release コマンドを使って Ubuntu のバージョンを確認する
etc/issue ファイルを使って Ubuntu のバージョンを確認する
etc/os-release ファイルを使って Ubuntu のバージョンを確認する
hostnamectl コマンドを使って Ubuntu のバージョンを確認する
hostname -I  :hostIPの探索
```

https://www.delftstack.com/ja/howto/linux/how-to-check-the-version-of-ubuntu/


### ubuntuのコンテナ内では[systemctl]とか基本的に使えねーよ！！！

※使う方法はあるが、めんどくさいので使えないと思っておいた方が良い
※代わりに[service]とかを使う
https://genchan.net/it/virtualization/docker/13093/


### pythonがメインの人は仮想環境管理を忘れずに！！！最後にpip freezeでrequirementをdockerfileで呼べるように！！！

https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e


### pythonの訳わからないpipのエラーは以下！　setuptoolが古いはぼけ！

https://github.com/grpc/grpc/issues/24037


### なぜかコンテナのポートが開かないとき

firewallの設定を変えてみましょう
https://qiita.com/htshozawa/items/e24729a4ab332cb40313

ポートが空いているかはこちらで確認

```
sudo netstat -tulpn
```

### OSの諸設定

- OS自動update停止
https://linux.just4fun.biz/?Ubuntu/%E8%87%AA%E5%8B%95%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%82%92%E6%9C%89%E5%8A%B9%E3%83%BB%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86#h55d6bba


- timezoneの設定

dockerfileに以下を入れときましょう
```
ENV TZ Asia/Tokyo
```

https://qiita.com/zaki-lknr/items/cd9844fa6a1efa58cab1
https://qiita.com/apollo_program/items/2495a109ce7afec21f25



### コンテナ疎通を確認していくとわからなくなってくる「127.0.0.1とlocalhostと0.0.0.0の違い」

以下の記事で頭を整理
https://qiita.com/1ain2/items/194a9372798eaef6c5ab



### dockerを考える上で「eth0」「docker0」とかを理解しているのは当たりまえ！


eth0 : ネットワークインターフェースのひとつ。ホストにIPが降られるのではなく、NICにIPが割り振られている。ここを勘違いしている人多いのではないか...?

docker0 :仮想ブリッジのこと。eth0をつなげてる

以下の図をイメージしながらネットワークを構築
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/908963/d671db1d-3569-a7f4-2d0e-fe8e7f1a4ef3.png)

https://tech.uzabase.com/entry/2017/08/23/175813


仮想ブリッジについてはここを一読したら大体ok
https://gihyo.jp/admin/serial/01/ibm_kvm/0003



- containerとかimageとかがたくさんキャッシュされてめんどくさくなった時


```
docker system prune --all
```

https://stackoverflow.com/questions/55334380/error-readlink-var-lib-docker-overlay2-invalid-argument