dockerコンテナネットワークの作成と接続確認

4 min read

はじめに

くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。

概要

■ユーザー定義の専用ネットワークを作成する
■外部向けにポートを公開する

をまとめた!(^^)

■コンテナネットワークのコマンド

コマンド 意味
docker network ls コンテナネットワークをリスト表示する
docker network inspect ネットワークの詳細を表示する
docker network create コンテナネットワークを生成する
docker network rm コンテナネットワークを削除する
docker network connect コンテナをコンテナネットワークに接続する
docker network disconnect コンテナをコンテナネットワークから引き離す

■ユーザー定義の専用ネットワークを作成する

ネットワークを作成する
$ docker network create ネットワーク名

作成したネットワークをコンテナにアタッチする。ネットワークをアタッチする時はdocker runコマンドに--networkオプションを付けてネットワーク名を指定する。

コンテナにネットワークをアタッチして起動する
$ docker run --network ネットワーク名 ...

起動されたコンテナは同じコンテナネットワークにあるコンテナとだけ疎通される。
ここで起動したコンテナはデフォルトのbridgeネットワークとは疎通できない。

■外部向けにポートを公開する

コンテナポートをコンテナホストのIPアドレス上に公開して他のパソコンからコンテナホストの中のコンテナにアクセスして利用できるようになるには

$ docker run -p ホストの公開ポート番号:コンテナポート番号 ...

でコンテナを起動する。これによってコンテナはホストの公開ポートと繋がり、外部からアクセスできる。

パソコンからURLアクセステストをする。

curlで接続テスト
$ curl http://localhost:8080/


StatusCode        : 200
 : OK
Content           : <!DOCTYPE html>
                    <html>
                    <head>
                    <title>Welcome to nginx!</title>
                    <style>
                        body {
                            width: 35em;
                            margin: 0 auto;
                            font-family: Tahoma, Verdana, Arial, sans-serif;
                        }
                    </style>
                    <...
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Accept-Ranges: bytes
                    Content-Length: 612
                    Content-Type: text/html
                    Date: Fri, 12 Feb 2021 21:19:46 GMT
                    ETag: "5fd8c14a-264"
                    Last-Modified: Tue, 15 Dec 2020 ...
Forms             : {}
Headers           : {[Connection, keep-alive], [Accept-Ranges, bytes], [Content-Length, 612], [Content-Type, text/html]...}
Images            : {}
InputFields       : {}
Links             : {@{innerHTML=nginx.org; innerText=nginx.org; outerHTML=<A href="http://nginx.org/">nginx.org</A>; outerText=nginx.org; tagName=A; href=http://nginx.org
                    /}, @{innerHTML=nginx.com; innerText=nginx.com; outerHTML=<A href="http://nginx.com/">nginx.com</A>; outerText=nginx.com; tagName=A; href=http://nginx.
                    com/}}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 612

nginxにアクセスできた。
次にパソコンのIPアドレスからコンテナにアクセステストをしてみる。

パソコンのIPアドレスからコンテナにアクセス
$ curl http://192.168.xxx.xxx:8080/


StatusCode        : 200
StatusDescription : OK
Content           : <!DOCTYPE html>
                    <html>
                    <head>
                    <title>Welcome to nginx!</title>
                    <style>
                        body {
                            width: 35em;
                            margin: 0 auto;
                            font-family: Tahoma, Verdana, Arial, sans-serif;
                        }
                    </style>
                    <...
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Accept-Ranges: bytes
                    Content-Length: 612
                    Content-Type: text/html
                    Date: Fri, 12 Feb 2021 21:29:04 GMT
                    ETag: "5fd8c14a-264"
                    Last-Modified: Tue, 15 Dec 2020 ...
Forms             : {}
Headers           : {[Connection, keep-alive], [Accept-Ranges, bytes], [Content-Length, 612], [Content-Type, text/html]...}
Images            : {}
InputFields       : {}
Links             : {@{innerHTML=nginx.org; innerText=nginx.org; outerHTML=<A href="http://nginx.org/">nginx.org</A>; outerText=nginx.org; tagName=A; href=http://nginx.org
                    /}, @{innerHTML=nginx.com; innerText=nginx.com; outerHTML=<A href="http://nginx.com/">nginx.com</A>; outerText=nginx.com; tagName=A; href=http://nginx.
                    com/}}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 612

アクセスできた。
コンテナネットワークの削除。

$ docker network rm ネットワーク名
または
$ docker network prune ネットワーク名

まとめ

最近会社のS先輩がほんとにうざすぎるから、他の先輩とS先輩を始末する計画を立ててる!