1. コンテナデータボリューム
データの永続化やホストとの共有を実現する仕組み。たとえば、Tomcatのログやアプリケーションディレクトリをコンテナ外にマウントすることで、コンテナ内に入らずにファイル操作が可能になる。
1.1 バインドマウントによる直接マウント
# ホストの絶対パスをコンテナ内のディレクトリにマウント
docker run -it -v /host/path:/container/path image_name
# 例:ホストの /MyDockerCentos をコンテナ内の /MyDockerCentos01 にマウント(読み取り専用)
docker run -it -v /MyDockerCentos:/MyDockerCentos01:ro centos
マウント状況は docker inspect で確認可能。JSON出力中の Mounts セクションに以下のような情報が含まれる:
"Mounts": [
{
"Type": "bind",
"Source": "/MyDockerCentos",
"Destination": "/MyDockerCentos01",
"RW": false
}
]
1.2 Dockerfileによるボリューム定義
Dockerfile内で VOLUME 命令を使うことで、イメージ作成時にデータボリュームを定義できる。
# mydockerfile の内容
FROM centos
VOLUME ["/dataVol1", "/dataVol2"]
CMD echo "build complete!"
CMD ["/bin/bash"]
このDockerfileをビルド:
docker build -f ./mydockerfile -t custom-centos .
生成されたコンテナを起動後、/ 配下に dataVol1 と dataVol2 が存在することを確認できる。
docker inspect で確認すると、これらのボリュームはデフォルトで /var/lib/docker/volumes/ 下に自動生成されるローカルボリュームとしてマウントされている。
2. Dockerfileの基本構文
Dockerfileは、Dockerイメージを自動的に構築するためのスクリプト。主な命令は以下の通り:
FROM:ベースイメージを指定RUN:ビルド時に実行するコマンドCMD:コンテナ起動時のデフォルトコマンド(最後のもののみ有効)ENTRYPOINT:CMDと異なり、docker runの引数で上書きされないEXPOSE:公開するポートを宣言WORKDIR:作業ディレクトリを設定ENV:環境変数を定義COPY / ADD:ファイルをイメージにコピー(ADDはURLや圧縮展開も対応)VOLUME:永続化用ディレクトリを定義ONBUILD:子イメージビルド時にトリガーされる命令
2.1 .dockerignore の活用
ビルドコンテキストに不要なファイルを除外するための設定ファイル。例:
# ルート直下の abc で始まるファイル・ディレクトリを除外
/abc*
# 全てのサブディレクトリ下の abc* を除外
**/abc*
# README.md だけは除外しない
*.md
!README.md
※ Dockerfile や .dockerignore 自体はビルドに必要なので、常に送信されるが、COPY/ADD ではコピーされない。
3. カスタムCentOSイメージの作成
vim、treeをプリインストールし、80番ポートを公開するCentOSイメージを構築。
FROM centos
RUN yum install -y vim tree
EXPOSE 80
CMD ["/bin/bash"]
ビルドコマンド:
docker build -f ./Dockerfile -t mycentos .
docker history <image_id> で各レイヤーのサイズとコマンドを確認可能。
4. JDK + Tomcat 組み込みイメージの作成
ローカルにあるJDKとTomcatのtar.gzをイメージに組み込む。
FROM centos
MAINTAINER huang <841396397@qq.com>
ADD jdk-8u221-linux-i586.tar.gz /usr/local/
ADD apache-tomcat-8.5.43.tar.gz /usr/local/
RUN yum install -y vim wget tree bash-completion
ENV JAVA_HOME=/usr/local/jdk1.8.0_221
ENV CATALINA_HOME=/usr/local/apache-tomcat-8.5.43
ENV PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
WORKDIR $CATALINA_HOME
EXPOSE 8080
CMD ["sh", "-c", "$CATALINA_HOME/bin/startup.sh && tail -F $CATALINA_HOME/logs/catalina.out"]
ビルド後、以下のようにデータボリューム付きで起動:
docker run -d \
-p 8001:8080 \
--name mycat \
-v /host/webapps:/usr/local/apache-tomcat-8.5.43/webapps \
-v /host/logs:/usr/local/apache-tomcat-8.5.43/logs \
--privileged \
mytomcat
5. Alibaba Cloud Container Registry へのイメージ登録
カスタムイメージをクラウドレジストリに保存・配布する手順。
5.1 イメージのタグ付けとプッシュ
# ローカルイメージにレジストリ向けタグを付与
docker tag mytomcat registry.cn-shenzhen.aliyuncs.com/namespace/repo:1.0
# Alibaba Cloud にログイン
docker login --username=your_account registry.cn-shenzhen.aliyuncs.com
# イメージをプッシュ
docker push registry.cn-shenzhen.aliyuncs.com/namespace/repo:1.0
5.2 レジストリからの取得
docker pull registry.cn-shenzhen.aliyuncs.com/namespace/repo:1.0
プライベートリポジトリの場合は、事前にRAMユーザーやアクセストークンの設定が必要。公開イメージは「イメージ検索」から、プライベートイメージは「自分のリポジトリ」→「イメージバージョン管理」から確認可能。