#前提
Dockerについて学んだことを書いていきます。
#本題
#基本コマンド
docker image build -t
Dockerfileの情報を元にコンテナのイメージをbuildする。
Build
↓
指定したディレクトリに存在するDockerfileを読み込みコンテナイメージをbuildする。
↓
buildしたコンテナイメージは実行したマシンに保存される。
保存する時の名前を-tのタグでつける。
ローカルに保存されているDockerコンテナの内容表示
docker image ls
docker run -d -p 8080:80 dockerdemo:latest
-d デタッチ(コンテナをバックグランドで起動する)
-p パブリッシュ(ポートを指定、左側がホストからの接続ポート・右側がコンテナ側への接続ポート)
ホストへは8080のポートで接続するが、実際には80ポートに変換されるイメージ。
実行中のコンテナの出力
docker container ls
コンテナの停止
docker container stop コンテナID
#コンテナのネットワークとは
サーバにはLANポートがある。
物理的にLANケーブルを接続するNICがいくつかある。
EC2などの仮想サーバも同様。
EC2はこのようなNICが仮想化されているだけで仕組みは物理サーバと同様。
Eth0にきた通信はKernelで制御される。
リナックスだとiptablesなどで通信の制御をしたりすることがある。
Dockerはこのようなカーネルレベルでもいい感じに動作し、コンテナと外部通信の橋渡しをしてくれる。
Eth0のような物理的なレイヤーを通過
↓
Dockerネットワークのレイヤーに到着
↓
Dockerデーモンが物理レイヤーとDockerレイヤーのネットワークを接続する
↓
コンテナはDockerデーモンを通じて外部のネットワークと通信している
↓Dockerレイヤーの中身
もっともよく使われているシンプルなネットワーキングBridge
↓
Bridgeという仮想的なネットワークの接続ポイントを使用した方法
↓
コンテナを3つ立ち上げた場合
↓
vethをかいして、それぞれのコンテナはBridgeに接続している
↓
Bridgeはネットワーク機器でいうとスイッチのような役割で、Bridge自体は独立したネットワーク領域
↓
Bridgeに応じたIPアドレスがコンテナに割り当てられる
↓
Bridgeは複数作成することができる
docker network ls
現在のDockerネットワークの情報を表示する。
docker network inspect bridge
ネットワークアドレスが何になるか確認。
Bridge作成
docker network create --attachable -d bridge --subnet=10.99.0.0/16 greenbridge
#コンテナのボリュームとは
デフォルトでは、コンテナの内部で生成されたデータはコンテナの内部に保存される。
→コンテナを削除してしまうと綺麗さっぱり消えてしまう。
コンテナは不変かつ一時的な実行プロセスという特徴の一つであり、諸刃の剣。
データベース系のコンテナはずっと消えることのないデータを必要としている。
コンテナの中にカスタマイズしたデータを保存しないようにする。
Dockerのmountを使用することでコンテナとホスト、両方ファイルを共有することができる。
ファイルを共有する領域がDockerの管理下にあるか、ホスト側の管理下にあるかの違い。
Volumes
コンテナとDockerエリアと連携する方法
Bind mount
任意のファイルシステムの領域とコンテナがファイルを共有できる
Dockerの管理下Volumesのmount方法
Dockerfileの編集
VOLUME /var/www/html
VOLUMEはコンテナ側のマウントポイントを指定する
Bind mountでファイル共有方法
docker container run --name bindmount1 -d -p 80:80 -v /root/bindmount:/var/www/html volumdemo:latest
-v
左側にホストでマウントさせたいディレクトリを指定する。
:を挟んで右側のコンテナ側のマウントさせたい領域
docker container run --name bindmount1 -d -p 80:80 -v ${pwd}:/var/www/html volumdemo:latest
${pwd}で現在いるディレクトリを自動的に置き換わる。