私はドッカーの作成初心者の質問があります。 Dockerの画像を作成し、社内のArtifactoryリポジトリにプッシュする既存のJenkinsのビルドがあります。これは、Maven/Dockerと2つのDockerfiles(アプリケーション用とボリューム/データコンテナ用)を使用しています。Dockerfilesとdocker-compose.ymlの間の数値ユーザIDを同期させますか?
のApp::
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
データコンテナ:Dockerfilesはこのような何かを見
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" ]
を私は簡潔にするため、ラベル、などのようなものを省きます。したがって、これらのDockerfilesのビルドによって生成されたイメージは、ローカルのArtifactoryリポジトリになります。これらの画像をインスタンス化するためにRancher/Cattleを使用しています.RancherにArtifactoryリポジトリを追加して、そこから引き出すことができます。私は(上記DATA_VOL_PATHのように)ドッキングウィンドウ-コンからの環境変数を渡すことができることを知っているが、私はどのようなものにと困惑している
# The data/volumes container for the data.
data:
image: data-image
# App
myapp:
image: app-image
environment:
DATA_VOL_PATH:
volumes_from:
- data
:二階建てでドッキングウィンドウ-compose.ymlファイルには、次のようになります作業。 Dockerビルドを実行するとDockerfileのコマンドが実行され、その後はイメージが変更されません。イメージに基づいてコンテナをインスタンス化すると、正しく理解していれば、その上に新しい書き込み可能なUFSレイヤーが作成されます。データコンテナの場合は、作成したボリュームを実際に変更することはできません。その仮定が正しい場合は、1)2つの異なるシステム(Dockerイメージを作成するMavenとコンテナクラスターをインスタンス化するRancher)でユーザーIDを最適に同期させるにはどうすればよいか、2)データボリュームコンテナは完全にdocker-compose.ymlからですか?それでは、データ・コンテナのDockerfileコンテンツをdocker-compose.ymlに複製する方法はありますか?
これはかなり一般的なシナリオであると想定しています。そのため、そこにはいくつかの「ベストプラクティス」ソリューションが必要です。ありがとう。
あなたの質問は混乱しています。ボリュームはコンテナによって作成され(作成するのではなく)、あなたが望むユーザにそれらを 'chown 'することができます。両方のコンテナに同じユーザーがいるので、それらの間のIOには問題はありません。ホストシステムの何かについては、なぜあなたはホストシステム上に何か必要なのでしょうか?ドッカー画像を作成する同じUIDの下でコンテナを実行させることができます。しかし、いずれの場合でも、ホストシステム上に作成された同じUIDを持つことができます。 UIDを制御していない他のコンテナを使用している場合は、難易度が問題になります。 –
Oleg、私はDockerfileとdocker-compose.ymlの使用の間の相関について少し混乱しています。そのため質問自体が混乱しているかもしれません。たぶん私は質問を言い返し、もう一方の端から始めるべきです。私はまた、名前付きのボリュームがこれを行うための好ましい方法だと言われてきました。私はまだ混乱していますが、やや啓示された方法で:-) – user2337270
あなたは答えを得ていません。おそらく、人々はあなたが求めているものを理解していないということです。私はあなたが繰り返し学習することをお勧めします:あなたのJenkinsのビルドから離れ、最初にdocker.comのチュートリアルを読んでから、あなた自身のいくつかのコンテナを作成し、それらを一緒にリンクしてください。その瞬間、あなたは基本を理解することになり、Jenkinsの設定を理解することができます。その瞬間に未解決の問題が残っている場合は、カスタムJenkins/maven /何らかのセットアップの詳細があまりにも多くなく、一度に一番重要な質問をしてください。 –