Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dockerについて #6

Open
Yuya-Furusawa opened this issue Jul 8, 2021 · 5 comments
Open

Dockerについて #6

Yuya-Furusawa opened this issue Jul 8, 2021 · 5 comments

Comments

@Yuya-Furusawa
Copy link
Owner

DockerやDocker Composeに関して調べたことをまとめる

公式Docs

@Yuya-Furusawa
Copy link
Owner Author

Dockerネットワークの理解

デフォルトネットワーク

Dockerをインストールすると自動的に3つのネットワークが作成される。

$ docker network ls
NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

デフォルトでdocker0というブリッジネットワークが作成される。
docker runするとこのネットワークでコンテナが作成される。

ユーザー定義ネットワーク

自分で新しいネットワークを作成することができる。

  • ブリッジネットワーク
    • 基本的なネットワーク
    • 同一ネットワーク内のコンテナは互いに通信可能
  • オーバレイネットワーク
  • リモートネットワーク

参照

@Yuya-Furusawa
Copy link
Owner Author

Composeのネットワーク機能

例えばmyappディレクトリにあるdocker-compose.ymlがこんな感じになっていたとする

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

docker-compose upを実行すると、次が起こる

  1. myapp_defaultというネットワークが作成される
  2. webの設定に従ってコンテナが作成され、ネットワークmyapp_defaultに参加する
    • コンテナ名を指定してないのでwebというコンテナ名になる
  3. dbの設定に従ってコンテナが作成され、ネットワークmyapp_defaultに参加する
    • コンテナ名を指定してないのでwebというコンテナ名になる

つまりDocker Composeを使えば、ネットワークが勝手に作成され、作成されたコンテナが同一ネットワークに追加される。

各コンテナのホスト名はそれぞれwebdbとなる。たとえば web のアプリケーション・コードでは、URL postgres://db:5432を使ってのアクセスが可能となり、Postgres データベースの利用ができるようになる。

ホスト名とdocker-compose.ymlで書いたサービス名は一致する。 ただし、ホスト名もオプションで指定することは可能。

参照

@Yuya-Furusawa
Copy link
Owner Author

コンテナとイメージの削除

コンテナの削除

基本

docker rm [コンテナID]

まとめて削除

docker rm `docker ps -a -q`

イメージの削除

基本

docker rmi [イメージID]

まとめて削除

docker rmi `docker images -q`

@Yuya-Furusawa
Copy link
Owner Author

ブラウザからはdockerコンテナのhostnameは認識できない

  • Docker Composeでコンテナを複数を立ち上げるとそれらのコンテナはデフォルトでbridgeネットワークで繋がれる
  • 各コンテナのhostnameはそのネットワーク内で参照可能
    • ネットワーク内で名前解決される
  • しかしブラウザはそのbridgeネットワーク上に存在しない(ブラウザはホストマシーン上に存在する)
  • したがってブラウザからアクセスするときはコンテナのhostnameは使わない

メモ-109

参照

@Yuya-Furusawa
Copy link
Owner Author

DockerfileでのRUN, CMD, ENTRYPOINT

RUN | コマンド実行

  • 各コマンドごとにレイヤーが作成される
  • レイヤーの数には上限があるため、まとめて実行するのが良い
RUN chown -R mysql:root /var/lib/mysql/

CMD | コンテナ実行時の実行コマンド

  • Dockerfileで一度だけ指定可能
  • docker run時に実行されるコマンドを指定
  • docker run時にコマンドを指定した場合、指定したコマンドが実行される(このコマンドは実行されない)
CMD ["node", "start"]

ENTRYPOINT | コマンド実行時の実行コマンド

  • Dockerfileで一度だけ指定可能
  • docker run時に実行されるコマンドを指定
  • docker run時にコマンドを指定した場合でも、このコマンドが実行される
ENTRYPOINT ["node", "start"]

参照

@Yuya-Furusawa Yuya-Furusawa changed the title Dockerに関して調べたことのまとめ Dockerについて Nov 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant