Dockerのデータ管理とネットワーク通信の実装手法

Dockerのデータ管理手法

Dockerコンテナ内のデータ管理には、主にデータボリュームとデータボリュームコンテナの2つの方法があります。

データボリュームの使用方法

データボリュームはコンテナ内の特殊なディレクトリで、ホストのディレクトリをマウントすることでデータの永続化を実現します。

# CentOS 7イメージの取得
docker pull centos:7

# ホストの/var/wwwをコンテナの/data1にマウント
docker run -v /var/www:/data1 --name container1 -it centos:7 /bin/bash

# コンテナ内でデータ作成
echo "サンプルデータ" > /data1/sample.txt
exit

# ホスト側で確認
cat /var/www/sample.txt

データボリュームコンテナの設定

複数コンテナ間でデータを共有する場合は、データボリュームコンテナを使用します。

# データボリュームコンテナの作成
docker run --name datavol -v /sharedata1 -v /sharedata2 -it centos:7 /bin/bash
echo "共有データ1" > /sharedata1/file1.txt
echo "共有データ2" > /sharedata2/file2.txt

# 他のコンテナからデータボリュームをマウント
docker run -it --volumes-from datavol --name client1 centos:7 /bin/bash
cat /sharedata1/file1.txt
cat /sharedata2/file2.txt

ポートマッピングとコンテナ間通信

ポートマッピングの設定

# ランダムポートでのマッピング
docker run -d --name nginx1 -P nginx

# 指定ポートでのマッピング
docker run -d --name nginx2 -p 8080:80 nginx

コンテナ間リンクの確立

# ソースコンテナの作成
docker run -itd -P --name source-container centos:7 /bin/bash

# リンクされたコンテナの作成
docker run -itd -P --name linked-container --link source-container:src centos:7 /bin/bash

# リンク確認
docker exec -it linked-container bash
ping src

Dockerイメージの作成方法

既存イメージからの作成

docker create -it centos:7 /bin/bash
docker exec [container_id] [command]
docker commit -m "変更説明" -a "作成者" [container_id] new-image:tag

Dockerfileを使用したイメージビルド

Dockerfileの基本構造例:

# ベースイメージの指定
FROM centos:7

# メンテナ情報
LABEL maintainer="developer@example.com"

# パッケージインストール
RUN yum update -y && \
    yum install -y httpd

# ポート公開
EXPOSE 80

# ファイルコピー
COPY index.html /var/www/html/

# 起動コマンド
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

イメージのビルドと実行:

docker build -t custom-httpd:latest .
docker run -d -p 80:80 custom-httpd:latest

Dockerfileの主要指令

  • FROM: ベースイメージの指定
  • RUN: コマンドの実行
  • COPY/ADD: ファイルの追加
  • EXPOSE: ポートの公開
  • CMD/ENTRYPOINT: 起動コマンドの指定
  • ENV: 環境変数の設定
  • WORKDIR: 作業ディレクトリの指定

タグ: Docker データボリューム ポートマッピング Dockerfile コンテナネットワーク

5月17日 03:15 投稿