{"id":17043088,"url":"https://github.com/mizzy/docker-playground","last_synced_at":"2025-04-12T15:10:29.620Z","repository":{"id":28428978,"uuid":"31943889","full_name":"mizzy/docker-playground","owner":"mizzy","description":null,"archived":false,"fork":false,"pushed_at":"2015-03-23T14:58:16.000Z","size":120,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T09:44:49.221Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mizzy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-10T07:27:17.000Z","updated_at":"2015-03-29T14:19:04.000Z","dependencies_parsed_at":"2022-09-03T05:21:51.103Z","dependency_job_id":null,"html_url":"https://github.com/mizzy/docker-playground","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzy%2Fdocker-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzy%2Fdocker-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzy%2Fdocker-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizzy%2Fdocker-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mizzy","download_url":"https://codeload.github.com/mizzy/docker-playground/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248586232,"owners_count":21128997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T09:27:52.303Z","updated_at":"2025-04-12T15:10:29.587Z","avatar_url":"https://github.com/mizzy.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 検証目的\n\nDocker のコンテナ同士の通信、あるいはコンテナとホストの通信をどのように制限するのかを検証する。\n\n## 3行まとめ\n\n* docker daemon 起動時に --icc=false をつけると、コンテナ間の通信を制限できる\n* [linking system](https://docs.docker.com/userguide/dockerlinks/) で特定のコンテナ間のみ通信を許可できる\n* コンテナからホストへの通信制限は iptables の INPUT チェーンで DROP する\n\n## 検証の概要\n\n* Vagrant で core-01 と core-02 の 2つの VM を起動\n* core-01 上の a0, a1, b0, b1 の 4つのコンテナを作成\n  * a0 の 80番ポートはホストの eth1 IP アドレスの 81 番ポートで expose\n  * b0 の 80番ポートはホストの eth1 IP アドレスの 82 番ポートで expose\n  * docker ps で見ると以下のようになる\n  \n```\ncore@core-01 ~ $ docker ps\nCONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS                     NAMES\ne269b354ba62        fedora/apache:latest   \"/run-apache.sh\"    2 minutes ago       Up 2 minutes        80/tcp                    b1\ne81f524a5b78        fedora/apache:latest   \"/run-apache.sh\"    2 minutes ago       Up 2 minutes        172.17.8.101:82-\u003e80/tcp   b0\n4940e8ee7158        fedora/apache:latest   \"/run-apache.sh\"    2 minutes ago       Up 2 minutes        80/tcp                    a1\nefabeaecb6c7        fedora/apache:latest   \"/run-apache.sh\"    2 minutes ago       Up 2 minutes        172.17.8.101:81-\u003e80/tcp   a0\n```\n\n* linking system により、a1 から a0 の80番ポートへの通信を許可、b1 から b0 の 80 番ポートへの通信を許可する\n* iptables によりコンテナの IP アドレス（10.1.0.0/16） から core-01 の eth1 へのパケットを DROPすることにより、expose されたポートへのコンテナからのアクセスを禁止する\n* a0 から http://a1:80/ へ通信が通り、http://b0:80/ と http://b1:80/ への通信が通らないことを確認する\n* b0 から http://b1:80/ へ通信が通り、http://a0:80/ と http://a1:80/ への通信が通らないことを確認する\n* コンテナから http://172.17.8.101:81/ と http://172.17.8.101:82/ への通信が通らないことを確認する\n* ホスト core-02 から http://172.17.8.101:81/ と http://172.17.8.101:82/ への通信が通ることを確認する\n\n## 具体的な検証手順\n\n具体的な手順は、[Vagrantfile](Vagrantfile) や [Serverspec によるテストコード](spec/) にコードとして落とし込んであるので参照してください。\n\n以下のコマンドにより検証手順をすべて実行できます。最後の `bundle exec rake spec` が通れば、期待通り動作しています。\n\n```\n$ vagrant up\n$ bundle install\n$ bundle exec rake spec\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizzy%2Fdocker-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmizzy%2Fdocker-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizzy%2Fdocker-playground/lists"}