1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker理解への道④ 〜docker-compose.ymlのボリュームとネットワークについて〜

Posted at

はじめに

Dockerを根本的・体系的に理解するために、このシリーズを書き始めました。

Docker理解への道① ~Makefile / docker compose編~
Docker理解への道② 〜docker-compose.ymlの徹底的な理解〜
Docker理解への道③ 〜docker-compose.ymlのimageとbuildについて〜

いきなりDockerそのものを理解するのではなく、理解しやすいものから学習していくつもりです。

前回イメージとビルドについて学んだことで、複数のコンテナを管理するためのCLIツール、Docker Composeについての想像ができるようになってきました。

とはいえ、第2回でdocker-compose.ymlファイルの基本的な構造について触れましたが、ふわっとしたまま残っているのが2箇所あったので今日はそこについて明確化したいと思います。

それが、ボリュームとネットワークです。

第2回ではこのような書き方をしました。

networks:
    myapp-network: # 任意のネットワーク名
    driver: bridge # 同じPC内でコンテナ間をつなぐ(その他にもPC間を繋ぐoverlayなど)

# ボリューム:コンテナを消してもデータが残る保存場所

volumes:
    mysql-data: # 任意のボリューム名(例:データベースのデータ用)
    app-logs: # 任意のボリューム名(例:アプリのログファイル用)

mysql: # コンテナ名
    — 省略 —
    networks:
        - myapp-network
    volumes:
        - mysql-data:/var/lib/mysql # MySQLのデータ本体
        - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初回起動時に実行されるSQL

もう一読み直して改めて理解できている点、できていない点、整理してみました。

理解できた点:

  • ネットワークでは、その名の通りDocker内でコンテナ間を繋ぐネットワークの設定を定義できて、driverで種類が定義できる。

  • ボリュームでは、コンテナを消してもデータが残る場所の設定ができる。

理解できていない点:

  1. ネットワークの生成元は?

  2. ボリューム使用時、コンテナが消えた時、データ(ここでいうとmysql-data)はどこに残るの?

  3. というかデータの保管場所がコンテナ内外の2箇所存在するってこと?


よくよく考えるとまだ疑問点は残っていたので、解消してみた。それぞれ調べた結果、こういうことだった。

  1. Dockerデーモン(バックグラウンドで常に稼働し、特定のサービスや機能を提供するプログラム)が仮想ネットワークを生成している。

  2. データ保管場所はホストPC上にある。

  3. まず、ボリュームを使用しない場合は、Dockerイメージの上に書き込み可能なレイヤーが作られます。そしてデータはそこに保管されますが、コンテナ削除とともにデータも削除されます。
    反対にボリュームを使用した場合は、コンテナが起動された際、コンテナ内のパス(上の例だと/var/lib/mysql)がホストOS上の物理的に存在するディレクトリに置き換えられます。そして、データの読み書きはそのホストOS上のディレクトリと直接行われます。


docker-compose.ymlのネットワークとボリュームについて理解したことで、ふわっと理解していた部分がなくなりました。
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?