docker-compose の初心者向けの質問があります。Docker イメージを作成し、社内の Artifactory リポジトリにプッシュする既存の Jenkins ビルドがあります。これは、Maven/Docker と、アプリ用とボリューム/データ コンテナー用の 2 つの Dockerfile を使用することによって実行されます。Dockerfile は次のようになります。
アプリ:
FROM centos
RUN useradd -u 6666 -ms /bin/bash foouser
COPY src/main/resources/home/foouser/.bashrc /home/foouser/
RUN chown -R foouser:foouser /home/foouser
USER foouser
COPY src/main/resources/opt/myapp/bin/startup.sh /opt/myapp/bin/
WORKDIR /home/foouser
ENTRYPOINT /opt/myapp/bin/startup.sh && /bin/bash
データ コンテナ:
FROM centos
# Environment variable for the path to mount/create. Defaults to /opt/data
ENV DATA_VOL_PATH="/opt/data"
# Make sure the user id is the same as the container using the volume, otherwise we may run into permission issues on
# the container mounting the volume.
RUN useradd -u 6666 -ms /bin/bash foouser && \
mkdir -p "$DATA_VOL_PATH" && \
chown -R foouser:foouser "$DATA_VOL_PATH"
VOLUME [ "$DATA_VOL_PATH" ]
簡潔にするために、ラベルなどを省略しました。したがって、これらの Dockerfile からのビルドによって生成されたイメージは、最終的にローカルの Artifactory リポジトリに配置されます。これらのイメージをインスタンス化するために Rancher/Cattle を使用しています。Artifactory リポジトリを Rancher に追加して、そこからプルできるようにしました。Rancher の docker-compose.yml ファイルは次のようになります。
# The data/volumes container for the data.
data:
image: data-image
# App
myapp:
image: app-image
environment:
DATA_VOL_PATH:
volumes_from:
- data
docker-compose (上記の DATA_VOL_PATH のように) から環境変数を渡すことができることは知っていますが、どのように機能するかについては混乱しています。私の理解では、docker ビルドを実行すると Dockerfile 内のコマンドが実行され、その後、イメージは不変になります。イメージに基づいてコンテナーをインスタンス化すると、その上に新しい書き込み可能な UFS レイヤーが作成されます。つまり、データ コンテナーの場合、一度作成したボリュームを実際に変更することはできませんよね? その仮定が正しければ、要約すると、1) 2 つの異なるシステム (Docker イメージを作成するための Maven、およびコンテナー クラスターをインスタンス化するための Rancher) 間でユーザー ID を最適に同期するにはどうすればよいか、および 2) docker-compose から完全にデータ ボリューム コンテナー。yml? 次に、docker-compose.yml でデータ コンテナーの Dockerfile コンテンツを複製するにはどうすればよいでしょうか?
これはかなり一般的なシナリオだと思いますので、いくつかの「ベスト プラクティス」ソリューションが存在するはずです。ありがとう。