今度は客先でコンテナ勉強会
今日すること
こんにちはふるてつです。
ただいま客先の勉強会にてDockerを勉強中で、まずは入門としてこちらのサイト「入門Docker」を勉強しております。
https://y-ohgi.com/introduction-docker/
今週は「コンポーネント」 メニューの中から「container」、「network」ページをもくもくとしました、では勉強した内容を書いていきます。
1. Container
言わずと知れたDocker Container
です。
Docker Image
がスナップショットだとするとDocker Container
はその「スナップショットから起動したプロセス」だとのこと。
意識する点はDocker Container
は1つのコマンドをフォアグラウンドで動かすように設計されていることだそうです。
1-1. ライフサイクル
Docker Container
の状態は5つあるとのことです。
- Image
- RUNNING
- STOPPED
- PAUSED
- DELETED
4番目のPAUSED
はユーザーがコマンドを発行しないとならない模様なので、あまり覚える必要はないかもしれません。
2. Network
Dockerはネットワークの振る舞いを定義することが可能で、デフォルトでは2種類のNetwork Driver が存在するそうです。
- bridge
- host
ネットワークのところは少し難しそうですね。
昔、VirtualBoxの時にもブリッジとかホストとか出てきて困惑しましたけど、同じものですかねー、いやだなあ🤢
とりあえず1番目のbridge
というのだけを覚えようかとは思います。
2-1. ネットワークを試す
● デフォルトで存在するネットワークの確認
docker network ls
コマンドでDocker
が管理しているNetwork
一覧を出力します。
docker network ls
NETWORK ID NAME DRIVER SCOPE
578fc5351093 bridge bridge local
4b353041c00c host host local
f5018c1f7037 none null local
3件表示されました。bridge
とhost
以外にnoneというのもあります。
これらはデフォルトで存在するものと思います。
次にホスト側のネットワークも確認します。
勉強しているサイトではip a
コマンドですが、わたしはWindows環境なのでipconfig -all
で確認します。
DockerNATというネットワークがありました、多分これですね。
Windows IP Configuration
~ 中略 ~
Ethernet adapter vEthernet (DockerNAT):
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2
Physical Address. . . . . . . . . : xx-xx-xx-xx-xx-xx
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : xx.xx.xx.xx
Subnet Mask . . . . . . . . . . . : xxx.xxx.xxx.xxx
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS over Tcpip. . . . . . . . : Enabled
● 新しいネットワークの作成
次は新しいbridge
ネットワークを作成してみます。
docker network create myapp
コマンドを実行します。
docker network create myapp
ffb3874673689da21d1e10002140f92d5f40c2b1fd1fe085821eb7429a9b44e5
networkに myapp が増えていることを確認します。
docker network ls
コマンド
docker network ls
NETWORK ID NAME DRIVER SCOPE
578fc5351093 bridge bridge local
4b353041c00c host host local
ffb387467368 myapp bridge local
f5018c1f7037 none null local
myappが増えました。
ホスト側のネットワークにも追加されたことを確認しようとしましたが、違いは見れませんでした。
LinuxとWindows環境の違いだと思います。
● Networkへnginxを参加させる
通信を受けるためのサーバーとしてnginx
を myapp ネットワークに構築します。
docker run --name nginx --network=myapp -d nginx
● AmazonLinux2を起動し、nginx
コンテナへ接続する
bridge
ネットワークの場合、同一ネットワークのコンテナにはコンテナ名で名前解決が可能だそうです。
nginx
と疎通できるか myapp ネットワーク内にAmazonLinux2
イメージでコンテナを起動し、 curl を実行してみます。
docker run --network=myapp -it amazonlinux:2 curl nginx:80
docker run --network=myapp -it amazonlinux:2 curl nginx:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
なるほど確かに疎通できました。
● 新しくネットワークを作成し、疎通できないことを確認する
では myapp2 というネットワークを作成し、nginx2 という命名でnginx
を起動します。
docker network create myapp2
docker run --name nginx2 --network=myapp2 -d nginx
myapp ネットワークに所属しているAmazonLinux2
から curl を実行し、疎通できないことを確認します。
$ docker run --network=myapp -it amazonlinux:2 curl nginx2:80
curl: (6) Could not resolve host: nginx2
なるほどたしかに疎通できませんでした。
今日の感想
今回もあいかわらず「入門Docker」の内容をそのまままとめた内容になりました。
コンテナのページは少ししかなかったので、
主にネットワークについて勉強しましたが、bridge
を使用すれば大体がつながりそうですね。
今回勉強してネットワークはそれほど恐れることはないかもと思いました。
それではまた