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: 作業ディレクトリの指定