2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2022-03-05

dockerコンテナのIP確認

docker inspect <コンテナID> | grep IPAddress

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

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

docker hostネットワークの罠

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

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

ubuntuでのIP確認方法

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

dockerの内部IPを調べる方法

docker create network でサブネット管理

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

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

  • リンクを作成(レガシー)

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

  • dockerネットワーク作成(これがメインかな)

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だけ立ち上げる)
  • 手書きでネットワーク図を書く。ポートフォアディングとかの設計を行う

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

  • dockerfileのexposeやdocker runのポート確認を行う
  • pingやtelnetで疎通ができるか確認
  • 以下の対処(疎通できてないよ。これはIPがおかしいよ)
[Errno99] Cannot assign requested address
  1. 以下の対処
エラー内容メモしてたのに忘れてしまった!!!!
IPは通ってるがportが空いてないよ、のエラー
  • 疎通確認できしだい、ごりごりDockerfileを作っていく

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

docker run --privileged ~~~~~

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の探索

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

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

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

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

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

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

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

sudo netstat -tulpn

OSの諸設定

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

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

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?